我知道在每次调用glVertex之前,必须先执行以下任一操作:glTexCoord(0,0); glTexCoord(0,1); glTexCoord(1,1); glTexCoord(1,0); 但是我不知道它们是什么意思。但是,我知道,如果我将右侧(或除以?)乘以2(或除以?),则我的纹理会扩展;如果相反,我的纹理会重复两次。我设法通过应用操作来编码纹理集,直到它起作用为止。但是我对发生的事情有正确的认识。为什么将它们分开会影响图像,为什么将它们反转会镜像呢?纹理坐标如何工作?
3 回答
凤凰求蛊
TA贡献1825条经验 获得超4个赞
OpenGL使用逆纹理。它需要从世界空间(X,Y,Z)到纹理空间(X,Y)到离散空间(U,V)的坐标,其中离散空间位于[0,1]域中。
采取一个多边形,将其视为一张纸。有了这个:
glTexCoord(0,0);
glTexCoord(0,1);
glTexCoord(1,1);
glTexCoord(1,0);
您告诉OpenGL在整张纸上绘图。应用修改时,纹理空间将相应地修改为给定坐标。例如,这就是为什么当您将相同的纹理划分两次时,您告诉OpenGL映射一半的图纸,而不是整个图纸。
蛊毒传说
TA贡献1895条经验 获得超3个赞
对于2D图像纹理,纹理坐标中的0,0对应于图像的左下角,而纹理坐标中的1,1对应于图像的右上角。请注意,“图像的左下角”不在左下像素的中心,而是在像素的边缘。
上传图片时也很有趣:
8.5.3纹理图像结构
纹理图像本身(由数据引用)是一组值的序列。第一组是纹理图像的左下角。随后的组从左到右填写宽度width的行;高度行从底部到顶部堆叠,形成一个二维图像切片;和深度切片从后到前堆叠。
请注意,大多数图像格式的数据都从顶部开始,而不是从底部开始。
- 3 回答
- 0 关注
- 1165 浏览
添加回答
举报
0/150
提交
取消