Exemplo n.º 1
0
Arquivo: anim.cpp Projeto: 4solo/cs174
/*********************************************************
**********************************************************
**********************************************************

    MAKE YOUR CHANGES AND ADDITIONS HERE

    Add other procedures if you like.

**********************************************************
**********************************************************
**********************************************************/
void drawGround(mat4 view_trans){
	mat4 model_trans(1.0f);
	//model a ground
	set_colour(0.0f, 0.8f, 0.0f);
	model_trans *= Translate(0, -10, 0);
	model_trans *= Scale(100, 1, 100);
	model_view = view_trans * model_trans;
	drawCube();
}
Exemplo n.º 2
0
Arquivo: anim.cpp Projeto: 4solo/cs174
/*********************************************************
**********************************************************
**********************************************************
 
    PROC: display()
    DOES: this gets called by the event handler to draw
          the scene, so this is where you need to build
          your ROBOT --  
      
        MAKE YOUR CHANGES AND ADDITIONS HERE
 
    Add other procedures if you like.
 
**********************************************************
**********************************************************
**********************************************************/
void display(void)
{
	// Clear the screen with the background colour (set in myinit)
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

	mat4 model_trans(1.0f);
	mat4 view_trans(1.0f);

	view_trans *= Translate(0.0f, 0.0f, -15.0f);
	HMatrix r;
	Ball_Value(Arcball, r);

	mat4 mat_arcball_rot(
		r[0][0], r[0][1], r[0][2], r[0][3],
		r[1][0], r[1][1], r[1][2], r[1][3],
		r[2][0], r[2][1], r[2][2], r[2][3],
		r[3][0], r[3][1], r[3][2], r[3][3]);
	view_trans *= mat_arcball_rot;
	view_trans *= Scale(Zoom);

	glUniformMatrix4fv(uView, 1, GL_TRUE, model_view);

	model_view = view_trans;

	mvstack.push(model_view);
	drawGround(view_trans);
	model_view = mvstack.top();
	mvstack.pop();

	model_view *= Translate(0, -10, 0);

	drawFlower();
	drawBee();
	glutSwapBuffers();
	if (Recording == 1)
		FrSaver.DumpPPM(Width, Height);
}
Exemplo n.º 3
0
Sphere::Sphere(int height, int width) : GeometricObj()
{
    float theta, phi;
    int t = 0;
    
    gNumVertices    = (height - 2) * width + 2;
    gNumTriangles   = (height - 2) * (width - 1) * 2;
    
	Vector4* vertices = new Vector4[gNumVertices];

    gIndexBuffer    = new int[3*gNumTriangles];
    
    for (int j = 1; j < height-1; ++j)
    {
        for (int i = 0; i < width; ++i)
        {
            theta = (float) j / (height-1) * M_PI;
            phi   = (float) i / (width-1)  * M_PI * 2;
            
            float   x   = sinf(theta) * cosf(phi);
            float   y   = cosf(theta);
            float   z   = -sinf(theta) * sinf(phi);
            
            // TODO: Set vertex t in the vertex array to {x, y, z}.
            
			vertices[t] = Vector4(x, y, z, 1.0);

            t++;
        }
    }
    
    // TODO: Set vertex t in the vertex array to {0, 1, 0}.
    vertices[t] = Vector4(0, 1, 0, 1);
    t++;
    

    // TODO: Set vertex t in the vertex array to {0, -1, 0}.
	vertices[t] = Vector4(0.0, -1.0, 0.0, 1.0);
    t++;
    
    t = 0;
    for (int j = 0; j < height-3; ++j)
    {
        for (int i = 0; i < width-1; ++i)
        {
            gIndexBuffer[t++] = j*width + i;
            gIndexBuffer[t++] = (j+1)*width + (i+1);
            gIndexBuffer[t++] = j*width + (i+1);
            gIndexBuffer[t++] = j*width + i;
            gIndexBuffer[t++] = (j+1)*width + i;
            gIndexBuffer[t++] = (j+1)*width + (i+1);
        }
    }
    for (int i = 0; i < width-1; ++i)
    {
        gIndexBuffer[t++] = (height-2)*width;
        gIndexBuffer[t++] = i;
        gIndexBuffer[t++] = i + 1;
        gIndexBuffer[t++] = (height-2)*width + 1;
        gIndexBuffer[t++] = (height-3)*width + (i+1);
        gIndexBuffer[t++] = (height-3)*width + i;
    }
    
	for (int i = 0; i < gNumTriangles; i++)
	{
		int k0 = gIndexBuffer[3 * i];
		int k1 = gIndexBuffer[3 * i + 1];
		int k2 = gIndexBuffer[3 * i + 2];

		triangles.push_back(Triangle(vertices[k0], vertices[k1], vertices[k2]));
	}

	num_triangles = triangles.size();
	delete[] vertices;
	delete[] gIndexBuffer;


	model_trans(0, 0) = 2.0;
	model_trans(0, 1) = 0.0;
	model_trans(0, 2) = 0.0;
	model_trans(0, 3) = 0.0;

	model_trans(1, 0) = 0.0;
	model_trans(1, 1) = 2.0;
	model_trans(1, 2) = 0.0;
	model_trans(1, 3) = 0.0;

	model_trans(2, 0) = 0.0;
	model_trans(2, 1) = 0.0;
	model_trans(2, 2) = 2.0;
	model_trans(2, 3) = -7.0;

	model_trans(3, 0) = 0.0;
	model_trans(3, 1) = 0.0;
	model_trans(3, 2) = 0.0;
	model_trans(3, 3) = 1.0;

	(*this).transform(model_trans);

	for (int i = 0; i < triangles.size(); i++)
	{
		triangles[i].computeVectors();
		triangles[i].setWorldVertices();

		triangles[i].setNormal(Vector3(triangles[i].vertices[0](0), triangles[i].vertices[0](1), triangles[i].vertices[0](2)) - Vector3(0, 0, -7), 0);
		triangles[i].setNormal(Vector3(triangles[i].vertices[1](0), triangles[i].vertices[1](1), triangles[i].vertices[1](2)) - Vector3(0, 0, -7), 1);
		triangles[i].setNormal(Vector3(triangles[i].vertices[2](0), triangles[i].vertices[2](1), triangles[i].vertices[2](2)) - Vector3(0, 0, -7), 2);

	}

	//Should probably be implemented somewhere else. But I digress...
	surface_mat.ambient = RGBColor(0, 1, 0);
	surface_mat.specular = RGBColor(0.5, 0.5, 0.5);
	surface_mat.diffuse = RGBColor(0, 0.5, 0);
	surface_mat.phong_exponent = 32.0;

}