【问题标题】:texture mapping onto triangle mesh纹理映射到三角形网格
【发布时间】:2014-10-05 04:31:48
【问题描述】:
我想将图像映射到三角形网格上。对于每个三角形,我知道顶点在 UV 空间以及图像/纹理空间中的位置。
OpenGL 通过定义 UV 空间和图像/纹理空间中的顶点之间的对应关系来解决这个问题。
- OpenGL 是否只是定义了对应关系之间的线性变换以确定如何插入纹理?
- 为什么不需要定义单应性来进行映射?在什么情况下需要定义单应性? (这需要四个点对应而不是三个。)
【问题讨论】:
标签:
opengl
texture-mapping
homography
【解决方案1】:
回答你的第一个问题:
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
关于你的第二个问题,我不太确定,但我相信我的回答至少应该部分涵盖它。