h
高さ、半半径の円柱面に均一なチェッカーボード テクスチャを適用したいと考えています(a,b)
。
このシェーダーを実装しました:
頂点シェーダー:
varying vec2 texture_coordinate;
float twopi = 6.283185307;
float pi=3.141592654;
float ra = 1.5;
float rb= 1.0;
void main()
{
// Transforming The Vertex
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
// -pi/2 < theta < pi/2
float theta = (atan2( rb*gl_Vertex.y , ra*gl_Vertex.x)+pi*0.5)/pi;
// Passing The Texture Coordinate Of Texture Unit 0 To The Fragment Shader
texture_coordinate = vec2( theta , -(-gl_Vertex.z+0.5) );
}
フラグメント シェーダー:
varying vec2 texture_coordinate;
uniform sampler2D my_color_texture;
void main()
{
// Sampling The Texture And Passing It To The Frame Buffer
gl_FragColor = texture2D(my_color_texture, texture_coordinate);
}
クライアント側では、次のオプションを指定しました。
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
私のテクスチャは 3768x1200 のチェッカーボードです。ここで、チェッカーボードを均一に保つためにテクスチャを適用したいと思います (ストレッチのない正方形) が、サーフェスの湾曲の少ない部分でのみ正しい縦横比を取得し、より湾曲した部分ではタイルが引き伸ばされます。
テクスチャを歪ませたり引き伸ばしたりせずにテクスチャを適用する方法を理解したいと思います。おそらく、テクスチャを引き伸ばす代わりに繰り返します。
また、2 つの境界が交差するテクスチャの境界で奇妙なちらつきの問題があります。それを解決するにはどうすればよいですか (2 番目の画像で確認できます)。