|
el(GL_SMOOTH); // 启用阴影平滑 glClearDepth(1.0); // 设置深度缓存 glEnable(GL_DEPTH_TEST); // 启用深度测试 glDepthFunc(GL_LESS); // 所作深度测试的类型 glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); // 真正精细的透视修正
End;
{现在我们绘制贴图过的立方体。这段代码被狂注释了一把,应该很好懂。开始两行代码 glClear() 和 glLoadIdentity() 是第一课中就有的代码。 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) 清除屏幕并设为我们在 InitGL() 中选定的颜色,本例中是黑色。深度缓存也被清除。模型观察矩阵也使用glLoadIdentity()重置。}
Procedure glDraw(); Begin glClear(GL_COLOR_BUFFER_BIT Or GL_DEPTH_BUFFER_BIT); // 清除屏幕和深度缓存 glLoadIdentity(); // 重置当前的模型观察矩阵 glTranslatef(0.0, 0.0, -6.0); // 移入屏幕6个单位
//下面三行使立方体绕X、Y、Z轴旋转。 //旋转多少依赖于变量 xrot , yrot 和 zrot 的值。 glRotatef(xrot, 1.0, 0.0, 0.0); // 绕X轴旋转 glRotatef(yrot, 0.0, 1.0, 0.0); // 绕Y轴旋转 glRotatef(zrot, 0.0, 0.0, 1.0); // 绕Z轴旋转
//下一行代码选择我们使用的纹理。 //如果在场景中使用多个纹理,应该使用 //glBindTexture(GL_TEXTURE_2D, texture[ 所使用纹理对应的数字 ]) 来选择要绑定的纹理。 //当想改变纹理时,应该绑定新的纹理。 //有一点值得指出的是, //不能在 glBegin() 和 glEnd() 之间绑定纹理, //必须在 glBegin() 之前或 glEnd() 之后绑定。 //注意我们在后面是如何使用 glBindTexture 来指定和绑定纹理的。
glBindTexture(GL_TEXTURE_2D, texture[0]); // 选择纹理
//为了将纹理正确的映射到四边形上, //必须将纹理的右上角映射到四边形的右上角, //纹理的左上角映射到四边形的左上角, //纹理的右下角映射到四边形的右下角, //纹理的左下角映射到四边形的左下角。 //如果映射错误的话,图像显示时可能上下颠倒,侧向一边或者什么都不是。
//glTexCoord2f 的第一个参数是X坐标。 // 0.0是纹理的左侧。 0.5是纹理的中点, 1.0是纹理的右侧。 //glTexCoord2f 的第二个参数是Y坐标。 //0.0是纹理的底部。 0.5是纹理的中点, 1.0是纹理的顶部。 //所以纹理的左上坐标是 X:0.0f,Y:1.0f , //四边形的左上顶点是 X: -1.0f,Y:1.0f 。 //其余三点依此类推。
//试着玩玩 glTexCoord2f 的X,Y坐标参数。 //把1.0改为0.5将只显示纹理的左半部分, //把0.0改为0.5将只显示纹理的右半部分。 glBegin(GL_QUADS); // 前面 glTexCoord2f(0.0, 0.0); glVertex3f(-1.0, -1.0, 1.0); // 纹理和四边形的左下 glTexCoord2f(1.0, 0.0); glVertex3f(1.0, -1.0, 1.0); // 纹理和四边形的右下 glTexCoord2f(1.0, 1.0); glVertex3f(1.0, 1.0, 1.0); // 纹理和四边形的右上 glTexCoord2f(0.0, 1.0); glVertex3f(-1.0, 1.0, 1.0); // 纹理和四边形的左上 // 后面 glTexCoord2f(1.0, 0.0); glVertex3f(-1.0, -1.0, -1.0); // 纹理和四边形的右下 glTexCoord2f(1.0, 1.0); glVertex3f(-1.0, 1.0, -1.0); // 纹理和四边形的右上 glTexCoord2f(0.0, 1.0); glVertex3f(1.0, 1.0, -1.0); // 纹理和四边形的左上 glTexCoord2f(0.0, 0.0); glVertex3f(1.0, -1.0, -1.0); // 纹理和四边形的左下 // 顶面 glTexCoord2f(0.0, 1.0); glVertex3f(-1.0, 1.0, -1.0); // 纹理和四边形的左上 glTexCoord2f(0.0, 0.0); glVertex3f(-1.0, 1.0, 1.0); // 纹理和四边形的左下 glTexCoord2f(1.0, 0.0); glVertex3f(1.0, 1.0, 1.0); // 纹理和四边形的右下 glTexCoord2f(1.0, 1.0); glVertex3f(1.0, 1.0, -1.0); // 纹理和四边形的右上 // 底面 glTexCoord2f(1.0, 1.0); glVertex3f(-1.0, -1.0, -1.0); // 纹理和四边形的右上 glTexCoord2f(0.0, 1.0); glVertex3f(1.0, -1.0, -1.0); // 纹理和四边形的左上 glTexCoord2f(0.0, 0.0); glVertex3f(1.0, -1.0, 1.0); // 纹理和四边形的左下 glTexCoord2f(1.0, 0.0); glVertex3f(-1.0, -1.0, 1.0); // 纹理和四边形的右下 // 右面 glTexCoord2f(1.0, 0.0); glVertex3f(1.0, -1.0, -1.0); // 纹理和四边形的右下 glTexCoord2f(1.0, 1.0); glVertex3f(1.0, 1.0, -1.0); // 纹理和四边形的右上 glTexCoord2f(0.0, 1.0); glVertex3f(1.0, 1.0, 1.0); // 纹理和四边形的左上 glTexCoord2f(0.0, 0.0); glVertex3f(1.0, -1.0, 1.0); // 纹理和四边形的左下 // 左面 glTexCoord2f(0.0, 0.0); glVertex3f(-1.0, -1.0, -1.0); // 纹理和四边形的左下 glTexCoord2f(1.0, 0.0); glVertex3f(-1.0, -1.0, 1.0); // 纹理和四边形的右下 glTexCoord2f(1.0, 1.0); glVertex3f(-1.0, 1.0, 1.0); // 纹理和四边形的右上 glTexCoord2f(0.0, 1.0); glVertex3f(-1.0, 1.0, -1.0); // 纹理和四边形的左上 glEnd();
xrot := xrot + 0.3; // X 轴旋转 yrot := yrot + 0.2; // Y 轴旋转 zrot := zrot + 0.4; // Z 轴旋转 End;
{最后,关于用作纹理的图像我想有几点十分重要,并且您必须明白。此图像的宽和高必须是2的n次方;宽度和高度最小必须是64象素;并且出于兼容性的原因,图像的宽度和高度不应超过256象素。如果您的原始素材的宽度和高度不是64,128,256象素的话,使用图像处理软件重新改变图像的大小。可以肯定有办法能绕过这些限制,但现在我们只需要用标准的纹理尺寸。}
//OK!运行一下看看效果

上一页 [1] [2] [系统软件]InstallShield Express for delphi制作安装程序定… [常用软件]InstallShield Express制作Delphi数据库安装程序 [Delphi程序]为什么选择Delphi.Net ? [Delphi程序]《关于VisiBroker For Delphi的使用》(4) [Delphi程序]Delphi 程序员代码编写标准指南 [Delphi程序]转贴:Conversion to Delphi 6: Missing unit Pro… [Delphi程序]Borland Delphi 9 的新特性 [Delphi程序]Delphi 键盘码表 [Delphi程序]Chuck Jazdzewski的离开意味着Delphi的终结吗? [Delphi程序]Delphi Access violations 问题的解决之道
|