Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ OpenGL中的复杂纹理映射?_C++_Opengl_Mapping_Textures - Fatal编程技术网

C++ OpenGL中的复杂纹理映射?

C++ OpenGL中的复杂纹理映射?,c++,opengl,mapping,textures,C++,Opengl,Mapping,Textures,在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

在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 texel将在y轴上重复。在这种情况下,我不知道如何映射纹理。会是向后的吗?我在互联网上似乎找不到任何类似的例子…

请记住,您的包裹模式是针对纹理坐标(s和t),而不是针对x轴和y轴。属性指定s坐标换行和t坐标夹紧

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

类似地,沿从P3到P2的边以及从P4到P1的边,t坐标从0.0到2.0。这些边在渲染坐标系中从右向左,并稍微向上移动。由于为t坐标指定了
钳制
,并且t坐标对应于纹理内的垂直方向,因此渲染四元体的右侧将从上到下(或从下到上,取决于纹理的存储方式)方向显示纹理,四边形的左侧将重复纹理的顶部/底部像素行


当在文本中解释时,这听起来有点复杂,但实际上并没有那么复杂。在白板上画几个草图会更容易解释。

首先,在本例中,您必须描绘顶点本身是如何连接的。因为S和T坐标只不过是从纹理中获取纹理的,其中。它们与任何一般空间轴无关(尽管它们可以用来创建自己的特殊轴),它们实际上只是沿多边形曲面插值的坐标

现在,由于您在这里处理的是一个四边形,因此讨论这些纹理坐标的插值比需要的要复杂一些。让我们来考虑一个好的三角形(P1,P2,P3)…沿着边缘P1、P2,
T
坐标是恒定的,
S
坐标范围从3.00.0(纹理沿着该边缘在
S
方向重复三次)

对所有边重复此操作,以获得沿边纹理行为的一般图片,然后查找重心坐标以了解如何在三角形的内部零件上插值坐标

下面是一个粗略的图表,说明了实现重心插值的数学方法:
(来源:)