glRotatef(rquad, 1.0, 1.0, 1.0); // 绕X轴旋转四边形 ( 新增 )
{
接下来开始画立方体。他由六个四边形组成。所有的四边形都以逆时针次序绘制。就是说先画右上角,然后左上角、左下角、最后右下角。您也许认为画立方体的背面的时候这个次序看起来好像顺时针,但别忘了我们从立方体的背后看背面的时候,与您现在所想的正好相反。(译者注:您是从立方体的外面来观察立方体的)。
注意到这次我们将立方体移地更远离屏幕了。因为立方体的大小要比金字塔大,同样移入6个单位时,立方体看起来要大的多。这是透视的缘故。越远的对象看起来越小 :)
}
glBegin(GL_QUADS); // 绘制正方形
{
先画立方体的顶面。从中心上移一单位,注意Y坐标始终为一单位,表示这个四边形与Z轴平行。先画右上顶点,向右一单位,再屏幕向里一单位。然后左上顶点,向左一单位,再屏幕向里一单位。然后是靠近观察者的左下和右下顶点。就是屏幕往外一单位。
}
glColor3f(0.0, 1.0, 0.0); // 颜色改为蓝色
glVertex3f(1.0, 1.0, -1.0); // 四边形的右上顶点 (顶面)
glVertex3f(-1.0, 1.0, -1.0); // 四边形的左上顶点 (顶面)
glVertex3f(-1.0, 1.0, 1.0); // 四边形的左下顶点 (顶面)
glVertex3f(1.0, 1.0, 1.0); // 四边形的右下顶点 (顶面)
{
底面的画法和顶面十分类似。只是Y坐标变成了-1。如果我们从立方体的下面来看立方体的话,您会注意到右上角离观察者最近,因此我们先画离观察者最近的顶点。然后是左上顶点最后才是屏幕里面的左下和右下顶点。
如果您真的不在乎绘制多边形的次序(顺时针或者逆时针)的话,您可以直接拷贝顶面的代码,将Y坐标从1改成 -1,也能够工作。但一旦您进入象纹理映射这样的领域时,忽略绘制次序会导致十分怪异的结果。
}
glColor3f(1.0, 0.5, 0.0); // 颜色改成橙色
glVertex3f(1.0, -1.0, 1.0); // 四边形的右上顶点(底面)
glVertex3f(-1.0, -1.0, 1.0); // 四边形的左上顶点(底面)
glVertex3f(-1.0, -1.0, -1.0); // 四边形的左下顶点(底面)
glVertex3f(1.0, -1.0, -1.0); // 四边形的右下顶点(底面)
{
接着画立方体的前面。保持Z坐标为一单位,前面正对着我们。
}
glColor3f(1.0, 0.0, 0.0); // 颜色改成红色
glVertex3f(1.0, 1.0, 1.0); // 四边形的右上顶点(前面)
glVertex3f(-1.0, 1.0, 1.0); // 四边形的左上顶点(前面)
glVertex3f(-1.0, -1.0, 1.0); // 四边形的左下顶点(前面)
glVertex3f(1.0, -1.0, 1.0); // 四边形的右下顶点(前面)
{
立方体后面的绘制方法与前面类似。只是位于屏幕的里面。注意Z坐标现在保持 -1 不变。
}
glColor3f(1.0, 1.0, 0.0); // 颜色改成黄色
glVertex3f(1.0, -1.0, -1.0); // 四边形的右上顶点(后面)
glVertex3f(-1.0, -1.0, -1.0); // 四边形的左上顶点(后面)
glVertex3f(-1.0, 1.0, -1.0); // 四边形的左下顶点(后面)
glVertex3f(1.0, 1.0, -1.0); // 四边形的右下顶点(后面)
{
还剩两个面就完成了。您会注意到总有一个坐标保持不变。这一次换成了X坐标。因为我们在画左侧面。
}
glColor3f(0.0, 0.0, 1.0); // 颜色改成蓝色
glVertex3f(-1.0, 1.0, 1.0); // 四边形的右上顶点(左面)
glVertex3f(-1.0, 1.0, -1.0); // 四边形的左上顶点(左面)
glVertex3f(-1.0, -1.0, -1.0); // 四边形的左下顶点(左面)
glVertex3f(-1.0, -1.0, 1.0); // 四边形的右下顶点(左面)
{
立方体的最后一个面了。X坐标保持为一单位。逆时针绘制。您愿意的话,留着这个面不画也可以,这样就是一个盒子:)
或者您要是有兴趣可以改变立方体所有顶点的色彩值,象金字塔那样混合颜色。您会看见一个非常漂亮的彩色立方体,各种颜色在它的各个表面流淌。
}
glColor3f(1.0, 0.0, 1.0); // 颜色改成紫罗兰色
glVertex3f(1.0, 1.0, -1.0); // 四边形的右上顶点(右面)
glVertex3f(1.0, 1.0, 1.0); // 四边形的左上顶点(右面)
glVertex3f(1.0, -1.0, 1.0); // 四边形的左下顶点(右面)
glVertex3f(1.0, -1.0, -1.0); // 四边形的右下顶点(右面)
glEnd(); // 正方形绘制结束
rtri := rtri 0.2; // 增加三角形的旋转变量
rquad := rquad - 0.15; // 减少四边形的旋转变量
End;
运行一下看看效果

文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!




