p; // 法线向上 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); // 纹理和四边形的右上 // 底面 glNormal3f(0.0, -1.0, 0.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); // 纹理和四边形的右下 // 右面 glNormal3f(1.0, 0.0, 0.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); // 纹理和四边形的左下 // 左面 glNormal3f(-1.0, 0.0, 0.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 + xspeed; // xrot 增加 xspeed 单位 yrot := Yrot + yspeed; // yrot 增加 yspeed 单位 End;
//现在转入WinMain()主函数。 //我们将在这里增加开关光源、旋转木箱、切换过滤方式以及将木箱移近移远的控制代码。 //在接近WinMain()函数结束的地方你会看到SwapBuffers(hDC)这行代码。 //然后就在这一行后面添加如下的代码。 //代码将检查L键是否按下过。 //如果L键已按下,但lp的值不是false的话,意味着L键还没有松开,这时什么都不会发生。 SwapBuffers(h_DC); // 交换缓存 (双缓存)
If (keys[ord(''''L'''')] And Not lp) Then Begin //如果lp的值是false的话, //意味着L键还没按下,或者已经松开了,接着lp将被设为TRUE。 //同时检查这两个条件的原因是为了防止L键被按住后, //这段代码被反复执行,并导致窗体不停闪烁。 //lp设为true之后,计算机就知道L键按过了, //我们则据此可以切换光源的开/关:布尔变量light控制光源的开关。 lp := true; // lp 设为 TRUE light := Not light; // 切换光源的 TRUE/FALSE If Not light Then // 如果没有光源 glDisable(GL_LIGHTING) //禁用光源 Else // Otherwis glEnable(GL_LIGHTING); //启用光源 End; If Not keys[ord(''''L'''')] Then //L键松开了么? lp := FALSE; // 若是,则将lp设为FALSE
//然后对"F"键作相似的检查。 //如果有按下"F"键并且"F"键没有处于按着的状态或者它就从没有按下过, //将变量fp设为true。这意味着这个键正被按着呢。 //接着将filter变量加一。如果filter变量大于2 //(因为这里我们的使用的数组是texture[3],大于2的纹理不存在), //我们重置filter变量为0。 If (keys[ord(''''F'''')] And Not fp) Then // F键按下了么? Begin fp := TRUE; // fp 设为 TRUE inc(filter); // filter的值加一 If filter > 2 Then // 大于2了么? filter := 0; // 若是重置为0 End; If Not keys[ord(''''F'''')] Then //F键放开了么? fp := FALSE; // 若是fp设为FALSE
//这四行检查是否按下了PageUp键。若是的话,减少z变量的值。这样DrawGLScene函数中包含的glTranslatef(0.0f,0.0f,z)调用将使木箱离观察者更远一点。 If keys[VK_PRIOR] Then //PageUp按下了? z := z - 0.02; // 若按下,将木箱移向屏幕内部。 //接着四行检查PageDown键是否按下,若是的话,增加z变量的值。这样DrawGLScene函数中包含的glTranslatef(0.0f,0.0f,z)调用将使木箱向着观察者移近一点。 If keys[VK_NEXT] Then // PageDown按下了么? z := z + 0.02; //若按下的话,将木箱移向观察者。
//现在检查方向键。按下左右方向键xspeed相应减少或增加。 //按下上下方向键yspeed相应减少或增加。 & 上一页 [1] [2] [3] [4] 下一页 [系统软件]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 问题的解决之道
|