将纹理映射到双曲线三角形

时间:2016-02-29 19:15:20

标签: opengl-es textures webgl texture-mapping uv-mapping

我想将右下角欧几里德三角形形式的纹理映射到庞加莱磁盘上的双曲线三角形,如下所示:

Hyperbolic Triange

这里是纹理(纹理的左上角三角形是透明的和未使用的)。您可能会将此视为Escher Circle Limit I的一部分:

Texture

这就是我的多边形看起来的样子(它以原点为中心,这意味着两条边是直线,但一般来说,所有三条边都是曲线,如第一张图片所示):

Wireframe Polygon

多边形的中心是由其顶点形成的欧几里德三角形的incentre,并且我使用它来对纹理进行UV映射,将其划分为相同数量的面。多边形具有并将每个面映射到相应的多边形面上。但结果如下:

Textured Polygon

如果有人认为这是可以使用UV映射解决的,我很乐意提供一些示例代码,但是我开始认为这可能是不可能的,我将不得不自己编写代码着色器功能。

1 个答案:

答案 0 :(得分:0)

UV贴图是一种将纹理映射到OpenGL多边形的方法。始终使用范围为(0,1)的xy坐标在欧几里德空间中对纹理进行采样。

要将纹理叠加到庞加莱圆盘上的三角形上,请保持顶点中的欧几里德坐标,并使用它们对纹理进行采样。

以下代码适用于OpenGL 3.0 ES。

顶点着色器:

#version 300 es

//these should go from 0.0 to 1.0
in vec2 euclideanCoords;
in vec2 hyperbolicCoords;

out vec2 uv;

void main() {
   //set z = 0.0 and w = 1.0
   gl_Position = vec4(hyperbolicCoords, 0.0, 1.0);

   uv = euclideanCoords;
}

片段着色器:

#version 300 es

uniform sampler2D escherImage;

in vec2 uv;
out vec4 colour;

void main() {
   colour = texture(escherImage, uv);
}