我想将图像映射到三角形网格上。对于每个三角形,我知道顶点在UV空间以及图像/纹理空间中的位置。
OpenGL通过定义UV空间中的顶点与图像/纹理空间之间的对应关系来解决此问题。
答案 0 :(得分:2)
回答你的第一个问题:
OpenGL将为您的纹理指定UV坐标,其中(0,0)是左下角,(1,1)是右上角。然后,在光栅化期间,每个顶点的UV坐标(纹理坐标)将在其相应的三角形上进行(线性)插值。然后,三角形的每个片段将获得内插纹理坐标,该坐标可用于从纹理中获取相应的值。如何完成纹理上的插值取决于创建纹理时发送的参数:
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
分别用于放大和缩小。 GL_LINEAR
参数将导致纹素之间的线性插值,例如,GL_NEAREST
为您提供最近邻居。如果使用mip-mapping,也可以传递一些其他参数。更多关于文档中的内容:
https://www.khronos.org/opengles/sdk/docs/man/xhtml/glTexParameter.xml
关于你的第二个问题我不太确定,但我相信我的答案应该至少部分涵盖它。