opengl纹理坐标如何工作?

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

glTexCoord(0,0); glTexCoord(0,1); glTexCoord(1,1); glTexCoord(1,0); 

但我不知道他们的意思。 但是我知道,如果我把两个(或者是这个分裂?)右边(或者全是那个?)乘以二,我的纹理就会扩展,如果我做相反的话,我的纹理会重复两次。 我已经设法通过应用操作来编写纹理图集,直到它工作。 但是我对发生了什么事有正确的想法。 为什么划分这些影响形象,为什么扭转它们呢? 纹理坐标如何工作?

纹理坐标指定纹理图像中与您指定的顶点相对应的点。 想想一个长方形的橡胶板,并在其上印上你的纹理图像,每一边的长度被规范化到0-1的范围。 现在让我们假设你想用这个纹理绘制一个三angular形。 你需要3个针脚,并将其放置在每个所需纹理坐标的位置上。 (Say [0,0],[1,0]和[1,1]),然后将这些引脚移动到所需的顶点坐标(Say [0,0],[0.5,0]和[ 1,1]),使得橡胶片伸出,图像变形。 这基本上是纹理坐标的工作原理。

如果使用大于1的纹理坐标,并且纹理设置为重复,那么就好像橡胶片的大小是无限的,并且纹理是平铺的。 因此,如果两个顶点的纹理坐标分别为0,0和4,0,则图像必须在这些顶点之间重复4次。

在这里输入图像描述 @ b1nary.atr0phy所有你的视觉思想家的图像!

OpenGL使用反向纹理。 它从世界空间(X,Y,Z)到纹理空间(X,Y)到离散空间(U,V)的坐标,离散空间在[0,1]域。

拿一个多边形,把它想成一张纸。 有了这个:

 glTexCoord(0,0); glTexCoord(0,1); glTexCoord(1,1); glTexCoord(1,0); 

你告诉OpenGL在整张纸上绘图。 当你应用修改你的纹理空间相应地修改给定的坐标。 这就是为什么,例如当你分裂你得到相同的纹理两次,你告诉OpenGL映射你的表的一半,而不是整张纸。

“红皮书”第9章对此进行了详细解释,并可在网上免费下载。

http://www.glprogramming.com/red/chapter09.html

纹理坐标映射x,y到宽度和高度纹理空间的空间0-1。 然后在三angular形上像橡胶板一样拉伸。 最好用图片来解释,红皮书是这样做的。

对于2D图像纹理,纹理坐标中的0,0对应于图像的左下angular,纹理坐标中的1,1对应于图像的右上angular。 请注意,“图像的左下angular”不是左下angular像素的中心,而是像素的边缘。

上传图片时也很有趣:

8.5.3纹理图像结构

纹理图像本身(由数据引用)是一组值的序列。 第一组是纹理图像的左下angular。 后续组从左到右填充宽度宽度的行; 高度行从底部到顶部堆叠形成单个二维图像切片; 并且深度切片从后向前堆叠。

请注意,大多数图像格式的数据从顶部开始,而不是在底部。