读书人

OpenGL里球体贴图旋转的有关问题

发布时间: 2012-04-23 13:17:38 作者: rapoo

OpenGL里球体贴图旋转的问题
新手第一问,大家来帮忙啊,哈哈哈!!

Q:
我用OpenGL做一个贴图的demo,画了一个球,用一张台球的图片贴在上面,到这全部OK,运行结果正常
但是,我后来加了个旋转功能,就发现只有球在动,贴图始终保持在那个位置上没有跟球体一起运动
请问这个问题是什么原因,何解?

部分代码如下:
Init()
{
...
glEnable(GL_TEXTURE_2D);
//指定像素的存储对齐方式,保持与BMP格式一致
glPixelStorei(GL_UNPACK_ALIGNMENT, 4);
glGenTextures(1, &texName);//创建纹理
glBindTexture(GL_TEXTURE_2D, texName);

-----get the bmp data-----------

//指定图片作为纹理,注意bmp像素为BGR序
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB,
BMP.bmWidth, BMP.bmHeight,
0, GL_BGR_EXT, GL_UNSIGNED_BYTE, BMP.bmBits);
DeleteObject(hBMP); // Delete The Object

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER,
GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,
GL_LINEAR);

//纹理函数,决定颜色如何组合
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP);
glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP);
...
}

display()
{
...glRotatef()...glutSolidSphere()...glFlush()...
}

[解决办法]
你列出的代码部分没问题的,应该是你贴图的代码部分的问题,纹理坐标的计算的问题
glTexCoord3f( ... );
glVertex3f( ...);这两个函数里面的坐标也要是随着变化的
[解决办法]
当球旋转时,纹理坐标也需要跟着旋转,检查下是不是这一步出了问题
[解决办法]
glTexGenf
是映射上去的,意味着不管球怎么转,纹理都是不动的,想要纹理随球运动,好像是只有逐三角画,逐三角贴图

读书人网 >VC/MFC

热点推荐