0.5 Degree

~~~~游走在0和1的间隙~~~~~

OpenGL Study 3

 Lesson04

实现图形的旋转

bool DrawGLScene(GLvoid)
{
    
//clear the screen and the depth buffer
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    
//reset the current modelview matrix
    glLoadIdentity();

    
//move left 1.5 units,deep 6.0 units from current position
    
//move the model from (0,0,0) to (-1.5,0.0,-6.0),it can also be implemented by move the view point
    glTranslatef(-1.5f,0.0f,-6.0f);

    
//rotate around the y axis
    glRotatef(rtri,0.0f,1.0f,0.0f);

    
//draw a triangle,with smooth coloring
    glBegin(GL_TRIANGLES);
        glColor3f(
1.0f,0.0f,0.0f);
        glVertex3f(
0.0f,1.0f,0.0f);
        glColor3f(
0.0f,1.0f,0.0f);
        glVertex3f(
-1.0f,-1.0f,0.0f);
        glColor3f(
0.0f,0.0f,1.0f);
        glVertex3f(
1.0f,-1.0f,0.0f);
    glEnd();

    
//reset the current modleview matrix
    glLoadIdentity();

    
//move from (0.0,0.0,0.0) to (1.5,0.0,-6.0)
    glTranslatef(1.5f,0.0f,-6.0f);

    
//rotate around the x axis
    glRotatef(rquad,1.0f,0.0f,0.0f);

    
//draw a quad,the vertex is represented in the model coordinate
    
//with flat coloring
    glColor3f(0.5f,0.5f,1.0f);
    glBegin(GL_QUADS);
        glVertex3f(
-1.0f,1.0f,0.0f);
        glVertex3f(
-1.0f,-1.0f,0.0f);
        glVertex3f(
1.0f,-1.0f,0.0f);
        glVertex3f(
1.0f,1.0f,0.0f);
    glEnd();

    rtri
+=0.2f;
    rquad
-=0.15f;
    
return true;
}

使用glRotatef(r,x,y,z)使图形绕向量(x,y,z)旋转r弧度,r>0时,正对环绕轴来看,逆时针旋转。

代码中两次出现了glLoadIdentity()函数,在每绘制一个图形之前都将模型视图矩阵置一,然后在移动,旋转进行必要的变换,再绘制图形,这样可以防止不同图形之间变换矩阵的影响。

Lesson05

绘制3D物体

bool DrawGLScene(GLvoid)
{
    
//clear the screen and the depth buffer
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    
//reset the current modelview matrix
    glLoadIdentity();

    
//move left 1.5 units,deep 6.0 units from current position
    
//move the model from (0,0,0) to (-1.5,0.0,-6.0),it can also be implemented by move the view point
    glTranslatef(-1.5f,0.0f,-6.0f);

    
//rotate around the y axis
    glRotatef(rtri,0.0f,1.0f,0.0f);

    
//draw a diamond made of 4 triangles,with smooth coloring
    glBegin(GL_TRIANGLES);
        
//front
        glColor3f(1.0f,0.0f,0.0f);//red
        glVertex3f(0.0f,1.0f,0.0f);
        glColor3f(
0.0f,1.0f,0.0f);//green
        glVertex3f(-1.0f,-1.0f,1.0f);
        glColor3f(
0.0f,0.0f,1.0f);//blue
        glVertex3f(1.0f,-1.0f,1.0f);

        
//right
        glColor3f(1.0f,0.0f,0.0f);//red
        glVertex3f(0.0f,1.0f,0.0f);
        glColor3f(
0.0f,0.0f,1.0f);//blue
        glVertex3f(1.0f,-1.0f,1.0f);
        glColor3f(
0.5f,0.5f,0.0f);//rg
        glVertex3f(1.0f,-1.0f,-1.0f);

        
//back
        glColor3f(1.0f,0.0f,0.0f);//red
        glVertex3f(0.0f,1.0f,0.0f);
        glColor3f(
0.5f,0.5f,0.0f);//rg
        glVertex3f(1.0f,-1.0f,-1.0f);
        glColor3f(
0.5f,0.0f,0.5f);//rb
        glVertex3f(-1.0f,-1.0f,-1.0f);

        
//back
        glColor3f(1.0f,0.0f,0.0f);//red
        glVertex3f(0.0f,1.0f,0.0f);
        glColor3f(
0.5f,0.0f,0.5f);//rb
        glVertex3f(-1.0f,-1.0f,-1.0f);
        glColor3f(
0.0f,1.0f,0.0f);//green
        glVertex3f(-1.0f,-1.0f,1.0f);

    glEnd();

    
//reset the current modleview matrix
    glLoadIdentity();

    
//move from (0.0,0.0,0.0) to (1.5,0.0,-6.0)
    glTranslatef(1.5f,0.0f,-6.0f);

    
//rotate around the x axis
    glRotatef(rquad,1.0f,0.0f,0.0f);

    
//draw a cubic made of 6 quads,the vertex is represented in the model coordinate
    
//with flat coloring
    glBegin(GL_QUADS);
        
//top,y=1
        glColor3f(1.0f,0.0f,0.0f);
        glVertex3f(
-1.0f,1.0f,1.0f);
        glVertex3f(
1.0f,1.0f,1.0f);
        glVertex3f(
1.0f,1.0f,-1.0f);
        glVertex3f(
-1.0f,1.0f,-1.0f);

        
//bottom,y=-1
        glColor3f(0.0f,1.0f,0.0f);
        glVertex3f(
-1.0f,-1.0f,1.0f);
        glVertex3f(
-1.0f,-1.0f,-1.0f);
        glVertex3f(
1.0f,-1.0f,-1.0f);
        glVertex3f(
1.0f,-1.0f,1.0f);

        
//front,z=1
        glColor3f(0.0f,0.0f,1.0f);
        glVertex3f(
-1.0f,-1.0f,1.0f);
        glVertex3f(
1.0f,-1.0f,1.0f);
        glVertex3f(
1.0f,1.0f,1.0f);
        glVertex3f(
-1.0f,1.0f,1.0f);

        
//right,x=1
        glColor3f(1.0f,1.0f,0.0f);
        glVertex3f(
1.0f,-1.0f,1.0f);
        glVertex3f(
1.0f,-1.0f,-1.0f);
        glVertex3f(
1.0f,1.0f,-1.0f);
        glVertex3f(
1.0f,1.0f,1.0f);

        
//back,z=-1
        glColor3f(0.0f,1.0f,1.0f);
        glVertex3f(
-1.0f,-1.0f,-1.0f);
        glVertex3f(
-1.0f,1.0f,-1.0f);
        glVertex3f(
1.0f,1.0f,-1.0f);
        glVertex3f(
1.0f,-1.0f,-1.0f);

        
//left,x=-1
        glColor3f(1.0f,0.0f,1.0f);
        glVertex3f(
-1.0f,-1.0f,1.0f);
        glVertex3f(
-1.0f,1.0f,1.0f);
        glVertex3f(
-1.0f,1.0f,-1.0f);
        glVertex3f(
-1.0f,-1.0f,-1.0f);

    glEnd();

    rtri
+=0.2f;
    rquad
-=0.15f;
    
return true;
}

使用4个三角形组成一个金字塔,采用6个正方形组成一个正方体。

阅读更多
文章标签: buffer 图形
个人分类: CG
想对作者说点什么? 我来说一句

西蒙iphone-OpenGL ES 教程-01

2016年01月06日 260KB 下载

opengl study

2012年11月04日 644KB 下载

opengl 很好的三维地形

2008年12月30日 1.22MB 下载

没有更多推荐了,返回首页

不良信息举报

OpenGL Study 3

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭