gluCylinder()和纹理坐标偏移/乘数?

时间:2011-08-26 23:51:14

标签: c++ opengl glu

如何设置gluCylinder()和gluDisk()等函数的纹理坐标偏移和乘数?

因此,如果纹理通常从0点开始,我想通过乘数设置它从点0.6或3.2等开始,我的意思是纹理会变大或变小。

解决方案不能是glScalef(),因为1)我使用法线,2)我也想调整纹理开始位置。

2 个答案:

答案 0 :(得分:1)

解决方案与GLU函数无关,并且确实glScalef(和glTranslatef用于偏移调整),但将其应用于纹理矩阵(假设您不使用着色器) 。通过使用glMatrixMode调用GL_TEXTURE选择的纹理矩阵在顶点和用于访问纹理之前转换顶点的纹理坐标(无论这些纹理坐标如何计算,在本例中为GLU ,它只是在CPU上计算它们并调用glTexCoord2f)。

所以让纹理从(0.1,0.2)开始(当然在纹理空间中)并使其大2倍,你只需要调用:

glMatrixMode(GL_TEXTURE);
glTranslatef(0.1f, 0.2f, 0.0f);
glScalef(0.5f, 0.5f, 1.0f);

在致电gluCylinder之前。但请务必在之后恢复这些更改(可能将其包含在glPush/PopMatrix之间)。

但是如果你想根据世界空间坐标改变纹理坐标,这可能需要更多的计算。当然,您也可以使用顶点着色器完全控制纹理坐标的生成。

答案 1 :(得分:0)

尝试使用texture matrix stack

glMatrixMode(GL_TEXTURE);
glLoadIdentity();
glTranslatef(0.6f, 3.2f, 0.0f);
glScalef(2.0f, 2.0f, 1.0f);
glMatrixMode(GL_MODELVIEW);
drawObject();