|
|
今天尝试着往简单几何体上贴图,但无论我是对照教程书籍的做法还是别的,都无法实现贴图,后来我干脆只绘制一个面,就让纹理只往这个面上贴,但都不行,我还尝试着旋转角度,看是否把纹理贴在了这个面的背后 —— 没有!!
我把代码翻来覆去地看了N遍也找不出错漏处......呀~~真是烦死了.....跪请大侠帮我一把,解决问题所在吧...
我把主要的两段代码列写在这里.另外还把程序提交上来(因为文件容量达1.2M我分包压缩了).
为节省大侠们检阅我这些垃圾代码的时间,我对这两段代码作一下简要说明:
第一段 是窗口创建并显示后对OpenGL视口的设置函数,里面直接包含了载入贴图文件的代码。
第二段 就是在绘出那个平面四边形并进行贴图操作的代码。
GLuint vein[1]; //存储纹理(全局)
//第一段代码:
void GL_Viewport(int Width, int Height) //设置OpenGL的视口
{
glViewport(0,0,Width,Height); //设置GL的视口大小
glMatrixMode(GL_PROJECTION); //设置当前矩阵为投影矩阵
glLoadIdentity(); //重置当前指定的矩阵为单位矩阵
gluPerspective(45.0f,Width/Height,1.0f,1000.0f);
glMatrixMode(GL_MODELVIEW); //设置当前矩阵为模型视图矩阵
glLoadIdentity(); //重置当前指定的矩阵为单位矩阵
AUX_RGBImageRec *m[1]; //创建纹理的存储空间
m[0] = auxDIBImageLoad("/Yellobrk.bmp");
if(m[0]==NULL)MessageBox(NULL,"位图无法装入","错误",MB_ICONERROR);
glGenTextures(1,&vein[0]); //生成1个贴图(纹理)
glBindTexture(GL_TEXTURE_2D,vein[0]); //使数据与XXXXXXXXX绑定
glTexImage2D(
GL_TEXTURE_2D,
0,
3,
m[1]->sizeX,
m[1]->sizeY,
0,
GL_RGB,
GL_UNSIGNED_BYTE,
m[0]->data
);
free(m[0]->data);//释放纹理空间的内存资源
free(m[0]);
//第二段代码: OpenGL绘图的过程了....
void Render()
{
glClearColor(0.0f,0.0f,0.0f,0.0f); //设置刷新背景色
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);//刷新背景
glLoadIdentity(); //重置当前视图
glBindTexture(GL_TEXTURE_2D,vein[0]); //选择纹理
glRotatef(r,0,1,1);
glPushMatrix();
glEnable(GL_TEXTURE_2D);
glBegin(GL_QUADS);
glTexCoord2f(0.0f,0.0f); glVertex3f(0.0f,0.0f,-0.0f);
glTexCoord2f(1.0f,0.0f); glVertex3f(0.5f,0.0f,-0.0f);
glTexCoord2f(1.0f,1.0f); glVertex3f(0.5f,0.5f,-0.0f);
glTexCoord2f(0.0f,1.0f); glVertex3f(0.0f,0.5f,-0.0f);
glEnd();
glDisable(GL_TEXTURE_2D);
glPopMatrix();
glFlush();//更新窗口
SwapBuffers(hdc);//切换缓冲区
}
==========================
先多谢热心的大侠!! [em5]
|
-
|