我知道在每次调用glVertex之前我必须调用以下其中一个:
glTexCoord(0,0);
glTexCoord(0,1);
glTexCoord(1,1);
glTexCoord(1,0);
Run Code Online (Sandbox Code Playgroud)
但我不知道他们的意思.但是,我知道,如果我乘以(或者是那个除法?)右侧(或者它是所有的?)两个,我的纹理会扩展,如果我相反,我的纹理会重复两次.我已经设法通过应用操作来编码纹理图集,直到它工作.但我对正在发生的事情有充分的了解.为什么划分它们会影响图像,为什么反转它们会反映它?纹理坐标如何工作?
geo*_*tnz 124
纹理坐标指定纹理图像中与您为其指定的顶点对应的点.想象一下印有纹理图像的矩形橡皮布,每边的长度标准化为0-1.现在让我们假设您想使用该纹理绘制三角形.你需要3针并将它们放在橡胶板上每个所需纹理坐标的位置.(说[0,0],[1,0]和[1,1])然后将这些引脚(不带它们)移动到你想要的顶点坐标(Say [0,0],[0.5,0]和[ 1,1],使橡胶板伸展,图像变形.这基本上是纹理坐标的工作原理.
如果您使用大于1的纹理坐标并且您的纹理设置为重复,那么就好像橡胶板的大小无限并且纹理在其上平铺.因此,如果两个顶点的纹理坐标分别为0,0和4,0,那么图像必须在这些顶点之间重复4次.
OpenGL使用反向纹理.它采用从世界空间(X,Y,Z)到纹理空间(X,Y)到离散空间(U,V)的坐标,其中离散空间在[0,1]域中.
拿一个多边形,把它想象成一张纸.有了这个:
glTexCoord(0,0);
glTexCoord(0,1);
glTexCoord(1,1);
glTexCoord(1,0);
Run Code Online (Sandbox Code Playgroud)
你告诉OpenGL在整张纸上画画.应用修改时,纹理空间会相应地修改为给定坐标.这就是为什么例如当你划分两次得到相同的纹理时,你告诉OpenGL映射一半的纸张,而不是整张纸.
小智 6
红皮书的第9章详细解释了这一点,可在线免费获取.
http://www.glprogramming.com/red/chapter09.html
纹理坐标将x,y映射到宽度和高度纹理空间中的空间0-1.然后将其拉伸成三角形上的橡胶板.最好用图片解释,红皮书就是这样做的.
对于 2D 图像纹理,纹理坐标中的 0,0 对应于图像的左下角,纹理坐标中的 1,1 对应于图像的右上角。注意,“图像的左下角”并不是位于左下像素的中心,而是位于该像素的边缘。
上传图片时也很有趣:
8.5.3 纹理图像结构
纹理图像本身(由数据引用)是一组值的序列。第一组是纹理图像的左下角。后续组从左到右填写宽度width的行;高度行从下到上堆叠形成单个二维图像切片;深度切片从后向前堆叠。
请注意,大多数图像格式的数据从顶部开始,而不是从底行开始。
| 归档时间: |
|
| 查看次数: |
82931 次 |
| 最近记录: |