转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> Delphi程序 >> 正文
NeHe的opengl教程delphi版(6)----纹理映射(贴图)         ★★★★

NeHe的opengl教程delphi版(6)----纹理映射(贴图)

作者:闵涛 文章来源:闵涛的学习笔记 点击数:1823 更新时间:2009/4/23 18:37:48
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 问题的解决之道
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台