opengl纹理坐标如何工作?

我知道在每次调用glVertex之前,必须先执行以下任一操作:


glTexCoord(0,0); 

glTexCoord(0,1); 

glTexCoord(1,1); 

glTexCoord(1,0); 

但是我不知道它们是什么意思。但是,我知道,如果我将右侧(或除以?)乘以2(或除以?),则我的纹理会扩展;如果相反,我的纹理会重复两次。我设法通过应用操作来编码纹理集,直到它起作用为止。但是我对发生的事情有正确的认识。为什么将它们分开会影响图像,为什么将它们反转会镜像呢?纹理坐标如何工作?


达令说
浏览 1167回答 3
3回答

凤凰求蛊

OpenGL使用逆纹理。它需要从世界空间(X,Y,Z)到纹理空间(X,Y)到离散空间(U,V)的坐标,其中离散空间位于[0,1]域中。采取一个多边形,将其视为一张纸。有了这个:glTexCoord(0,0); glTexCoord(0,1); glTexCoord(1,1); glTexCoord(1,0); 您告诉OpenGL在整张纸上绘图。应用修改时,纹理空间将相应地修改为给定坐标。例如,这就是为什么当您将相同的纹理划分两次时,您告诉OpenGL映射一半的图纸,而不是整个图纸。

蛊毒传说

对于2D图像纹理,纹理坐标中的0,0对应于图像的左下角,而纹理坐标中的1,1对应于图像的右上角。请注意,“图像的左下角”不在左下像素的中心,而是在像素的边缘。上传图片时也很有趣:8.5.3纹理图像结构纹理图像本身(由数据引用)是一组值的序列。第一组是纹理图像的左下角。随后的组从左到右填写宽度width的行;高度行从底部到顶部堆叠,形成一个二维图像切片;和深度切片从后到前堆叠。请注意,大多数图像格式的数据都从顶部开始,而不是从底部开始。
打开App,查看更多内容
随时随地看视频慕课网APP