gpt4 book ai didi

c++ - OpenGL 中的复杂纹理映射?

转载 作者:行者123 更新时间:2023-11-28 02:50:45 28 4
gpt4 key购买 nike

在具有以下参数的 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 坐标对应于纹理中的垂直方向,因此渲染四边形的右侧将显示从上到下(或从下到下)的纹理顶部,取决于您的纹理的存储方式)方向,四边形的左侧将重复纹理的顶部/底部像素行。

这在文字解释时听起来有点令人费解,但实际上并没有那么复杂。用白板上的几张草图来解释会容易得多。

关于c++ - OpenGL 中的复杂纹理映射?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23123639/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com