如何设置gluCylinder()和gluDisk()等函数的纹理坐标偏移和乘数?
因此,如果纹理通常从0点开始,我想通过乘数设置它从点0.6或3.2等开始,我的意思是纹理会变大或变小。
解决方案不能是glScalef(),因为1)我使用法线,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();