双三角场景的 绘制程序代码如下:
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glEnable(GL_LIGHTING);glEnable(GL_DEPTH_TEST);
glEnable(GL_COLOR_MATERIAL);
glEnable(GL_LIGHT0);
glLoadIdentity();
glRotatef(rot,0,1,0);//全局变量rot即为旋转角度
glBegin(GL_TRIANGLES);
glNormal3f(0.0,0.0,1.0);//法向与光射线指向同侧
glColor3f(1.0,0.0,0.0);
glVertex3f(-1.0,0.0,-0.30);
glColor3f(0.0,1.0,0.0);
glVertex3f(0.0,1.0,-0.30);
glColor3f(0.0,0.0,1.0);
glVertex3f(1.0,0.0,-0.30);
glNormal3f(0.0,0.0,-1.0);//法向与光射线指向相反
glColor3f(1.0,0.0,0.0);
glVertex3f(-1.0,0.0,0.0);
glColor3f(0.0,1.0,0.0);
glVertex3f(0.0,1.0,0.0);
glColor3f(0.0,0.0,1.0);
glVertex3f(1.0,0.0,0.0);
glEnd();
使用OpenGL默认的光照(光源在0,0,1沿-Z轴方向的白色平行光)和默认的平行投影。为简化代码,打开了GL_COLOR_MATERIAL直接用glColor设定顶点材质。另外为便于阅读图片做了减肥。 以上图片是在PII266/FireGL 1000pro/Win2000环境下获取的。
这两段代码都放在TOpenGL Panel的OnPaint事件里执行。
检讨:右边代码的法向全反了,如果你运行它就会发现虽然看起来仍是一个立方体,但是前后左右上下全都反过来了。这是因为各面法向朝里,前面的后侧对着我们,它不可见,看到的前面实际是后面前侧,而正常情况下后面应该会被前面挡住。
|
立方体场景的 绘制程序代码如下: glBegin(GL_QUADS);
glNormal3f(0,0,-1);
glColor3f(1,0,0);
glVertex3f(0,0,0);
glVertex3f(1,0,0);
glVertex3f(1,1,0);
glVertex3f(0,1,0);
glNormal3f(-1,0,0);//右
glColor3f(0,1,0);
glVertex3f(1,0, 0);
glVertex3f(1,0,-1);
glVertex3f(1,1,-1);
glVertex3f(1,1, 0);
glNormal3f(0,-1,0);//上
glColor3f(0,0,1);
glVertex3f(0,1, 0);
glVertex3f(1,1, 0);
glVertex3f(1,1,-1);
glVertex3f(0,1,-1);
glNormal3f(0,0,1); //后
glColor3f(1,1,0);
glVertex3f(0,1,-1);
glVertex3f(1,1,-1);
glVertex3f(1,0,-1);
glVertex3f(0,0,-1);
glNormal3f(1,0,0);//左
glColor3f(0,1,1);
glVertex3f(0,1, 0);
glVertex3f(0,1,-1);
glVertex3f(0,0,-1);
glVertex3f(0,0, 0);
glNormal3f(0,1,0);//下
glColor3f(1,0,1);
glVertex3f(0,0,-1);
glVertex3f(1,0,-1);
glVertex3f(1,0, 0);
glVertex3f(0,0, 0);
glEnd(); |