随笔-38  评论-23  文章-0  trackbacks-0


学习如何使用纹理贴图,纹理贴图的一般步骤,纹理坐标的初体验.,设定步骤如下

glGenTextures(1,&texnum);   //创建一个纹理
glBindTexture(GL_TEXTURE_2D,texnum); //指定一个纹理
//设置纹理的一些数据等...
.....
...
glEnable(GL_TEXTURE_2D); //启用纹理功能

选择一个纹理,提供纹理坐标
glBindTexture(GL_TEXTURE_2D,texnum);
glTexCoord2f(x,y)    //设定每个点的纹理坐标

一张二维纹理贴图,相当于一个矩形数据..
最左边对应 x-->0.0,最右边对应  x-->1.0
最下边对应  y->0.0  最上边对应 y-->1.0

其次对于一张bmp图片,应为glut中并不提供读取图像数据的方法.而纹理贴图中图像的数据必须得自己
创建函数从文件中读取出来 最后绑定在纹理上..

这里我将使用的是win API 的方法读取一张bmp文件

WINUSERAPI HANDLE WINAPI  LoadImage( HINSTANCE,    LPCWSTR,    UINT,int,    int,    UINT);
参数分别表示如下:
HINSTANCE---------包含所需要图片的实例的句柄。
LPCSTR--------------图片所在路径及文件名。
UINT-------------------图片类型。
int-----------------------图片宽度。
int-----------------------图片高度。
UINT-------------------load flags

HINSTANCE ---将使用GetModuleHandle(NULL) 获得..就是获得一个应用程序的句柄,NULL代表当前这个程序

获得了位图的句柄之后 使用以下函数获得图像数据
int GetObject(HGDIOBJ hgdiobj, int cbBuffer, LPVOID lpvObject);


使用以下代码时候,需要在lesson_1中的openglglut.h 添加一个函数声明: void InitTexture(void);

code

最终结果显示为:



末尾总结:

使用纹理的步骤 应当如下:
1.创建纹理对象,并为它指定一个纹理
2. 确定纹理是如何应用到每个像素上
3.启用纹理贴图功能
4.绘制场景,提供纹理和几何坐标

其次,如何使用winapi读取bmp图像数据.在以后的学习中可能还会遇到各种图像贴图的读取.
对于各种格式的文件很有可能都将要创建一种方法去读取数据,才能最终应用到纹理上?

posted on 2009-07-17 20:46 米游 阅读(961) 评论(3)  编辑 收藏 引用 所属分类: OpenGL/OSG

评论:
# re: opengl学习 nehe opengl lesson_6 2009-07-23 21:54 | 李海威
我刚看到第6课,不知道怎么载入texture,还好lz已经做到第6课了。多谢。期待下面的课程。呵呵  回复  更多评论
  
# re: opengl学习 nehe opengl lesson_6 2009-07-23 22:03 | 李海威
我想lz一定是c++高手了。 我是初学。还望lz的教程能够做完。  回复  更多评论
  
# re: opengl学习 nehe opengl lesson_6 2009-07-26 01:01 | 米游
@李海威
我是写到第10节了。暂时还没空发上来...  回复  更多评论
  

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理