概要
前面几篇博客,已经从基本的绘图, 上色到旋转都已经讲完了, 但它们都只是限于平面图形,而对于立体图形并没有讲到。 本篇主要来讲opengl绘制立体图形。 我们在小学就知道, 线是由点构成, 点构成面, 面构成立体图形。 所以,立体图形的绘制,就是绘制多个有对应关系的平面。 而平面的绘制,就是由多个点的坐标组成。前面几篇博客已经讲过了。
效果图
主要代码
void OpenglWidget::paintGL()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glTranslatef( -1.5, 0.0, -6.0 );
glRotatef( m_rotateRectangle, 0.0, 1.0, 0.0 );
glBegin( GL_QUADS );
glColor3f(1, 0, 0);
glVertex3f(-1,1,1);
glVertex3f(-1,1,-1);
glVertex3f(-1,-1,-1);
glVertex3f(-1,-1,1);
glColor3f(0, 0, 1);
glVertex3f(-1,1,-1);
glVertex3f(-1,-1,-1);
glVertex3f(1,-1,-1);
glVertex3f(1,1,-1);
glColor3f(0, 1, 0);
glVertex3f(1,1,-1);
glVertex3f(1,-1,-1);
glVertex3f(1,-1,1);
glVertex3f(1,1,1);
glColor3f(0, 0, 1);
glVertex3f(1,-1,1);
glVertex3f(1,1,1);
glVertex3f(-1,1,1);
glVertex3f(-1,-1,1);
glColor3f(0, 1, 0);
glVertex3f(-1,1,1);
glVertex3f(1,1,1);
glVertex3f(1,1,-1);
glVertex3f(-1,1,-1);
glColor3f(0, 0, 1);
glVertex3f(-1,-1,1);
glVertex3f(-1,-1,-1);
glVertex3f(1,-1,-1);
glVertex3f(1,-1,1);
glEnd();
glLoadIdentity();
glTranslatef( 1.5, 0.0, -6.0 );
glRotatef( m_rotateTriangle, 0.0, 1.0, 0.0 );
glBegin( GL_TRIANGLES );
glColor3f( 1.0, 0.0, 0.0 );
glVertex3f( 0.0, 1.0, 0.0 );
glColor3f( 0.0, 0.0, 1.0 );
glVertex3f( -1.0, -1.0, -1.0 );
glColor3f( 0.0, 1.0, 0.0 );
glVertex3f( -1.0, -1.0, 1.0 );
glColor3f( 1.0, 0.0, 0.0 );
glVertex3f( 0.0, 1.0, 0.0 );
glColor3f( 0.0, 0.0, 1.0 );
glVertex3f( 1.0, -1.0, 1.0 );
glColor3f( 0.0, 1.0, 0.0 );
glVertex3f( 1.0, -1.0, -1.0 );
glColor3f( 1.0, 0.0, 0.0 );
glVertex3f( 0.0, 1.0, 0.0 );
glColor3f( 0.0, 1.0, 0.0 );
glVertex3f( -1.0, -1.0, 1.0 );
glColor3f( 0.0, 0.0, 1.0 );
glVertex3f( 1.0, -1.0, 1.0 );
glColor3f( 1.0, 0.0, 0.0 );
glVertex3f( 0.0, 1.0, 0.0 );
glColor3f( 0.0, 1.0, 0.0 );
glVertex3f( 1.0, -1.0, -1.0 );
glColor3f( 0.0, 0.0, 1.0 );
glVertex3f( -1.0, -1.0, -1.0 );
glEnd();
m_rotateRectangle += 20;
m_rotateTriangle += 20;
}
代码解析
在本实例中, 主要绘制了三棱柱和立方体。 总结的方法主要有:
1.在绘制立体图形时,在我们的思维空间里, 应该把这种规则的立体图形的中心为原点。以横向为X轴, 左为负,右为正, 以纵向为Y 轴, 上为正,下为负, 以我们面对的目光直射方面为Z轴, 胸前方向为正, 背后方向为负。 这样就容易形成一个容易理解的立体空间。
2.当我们以规则立体图形的中心为坐标原点时, 每个立体图形的各个顶点的x,y,z坐标,此时都不为0
3.对于有些面为三角形的立体图形,在绘制三角形面时, 点的顺序,和面的顺序不限定方向。
4.对于面为四边形或多边形的立体图形, 在绘制四边形,或多边形时,应该以逆时针方向绘制, 至于每个面的起点,不受限制, 从那个面开始不受限制。