繁体   English   中英

OpenGL中复杂的纹理映射?

[英]Complex texture mapping in OpenGL?

在OpenGL中使用具有以下参数的纹理

glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP );

并像这样映射它:

glBegin( GL_QUADS );
glTexCoord2f( 3.0, 2.0 ); glVertex2f( -2.0, 2.0 ); // P1
glTexCoord2f( 0.0, 2.0 ); glVertex2f( -2.0, -1.0 ); // P2
glTexCoord2f( 0.0, 0.0 ); glVertex2f( 2.0, -2.0 ); // P3
glTexCoord2f( 3.0, 0.0 ); glVertex2f( 2.0, 1.0 ); // P4
glEnd( );

我不确定最终结果会如何。 我知道glTexCoord中大于1的值将如何使纹理在x轴上重复,而0和1纹素将在y轴上重复。 我对在这种情况下如何映射纹理感到困惑。 会倒退吗? 我似乎在互联网上找不到任何类似的例子...

请记住,环绕模式适用于纹理坐标 (s和t),而不适用于x轴和y轴。 您的属性指定s坐标换行和t坐标钳位。

将其应用于您的坐标(基于纸面草图),您的s坐标沿着从P3到P4的边缘,从P2到P1的边缘从0.0到3.0。 这些边缘在y轴方向上。 由于您为s坐标指定了REPEAT ,并且s坐标对应于纹理中的水平方向,因此纹理的原始左右方向将与渲染中的y轴对齐。朝这个方向重复3次。

同样,您的t坐标沿着从P3到P2的边缘,从P4到P1的边缘从0.0到2.0。 在渲染坐标系中,这些边缘从右到左,稍微向上。 由于您为t坐标指定了CLAMP ,并且t坐标对应于纹理内的垂直方向,因此渲染四边形的右侧将在顶部到底部(或从底部到顶部)显示纹理,具体取决于纹理的方式方向),则四边形的左侧将重复纹理的顶部/底部像素行。

用文字解释时,这听起来有些令人费解,但实际上并不那么复杂。 用白板上的一些草图进行解释会容易得多。

首先,您必须说明在此示例中顶点本身是如何连接的。 由于S和T坐标只不过是其中的纹理,你从你获取更多的纹理像素。 它们与任何一般的空间轴都没有关系(尽管它们可用于创建自己的特殊轴),它们实际上只是沿多边形表面插值的坐标。

现在,由于您要在此处处理四边形,因此对这些纹理坐标的插值的讨论要复杂得多。 让我们考虑一个漂亮的三角形(P1,P2,P3)...沿着边P1,P2, T坐标是恒定的, S坐标的范围是3.00.0 (纹理在S方向上重复3次,沿此边缘)。

对所有边缘重复此操作,以大致了解纹理沿边缘的行为,然后查找重心坐标以了解如何在三角形的内部部分上插入坐标。

这是一个粗略的图,说明了实现重心插值的数学公式:

重
(来源: docstoccdn.com

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM