我想把一个均匀的棋盘纹理应用到高度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棋盘。现在我想要应用这个纹理来保持棋盘的均匀性(不加拉伸的方块),但是我只在曲面的较小的部分得到正确的高宽比,而在更弯曲的部分,瓷砖是拉伸的。
我想了解如何在不扭曲和拉伸纹理的情况下应用纹理,也许可以重复纹理,而不是拉伸纹理。


我也有一个奇怪的问题闪烁在纹理的边界上,在两个边界相交的地方,如何解决它(它可以在第二张图像中看到)?
发布于 2012-08-14 13:42:15
您可以修改纹理坐标,使其在对象上“缩小”一点。你不能做的是将纹理坐标参数化成非线性缩放。
因此,备选方案是:
至于边框上的闪烁,您必须为您的纹理生成mipmap。
如果你需要更多的信息,请告诉我。
https://stackoverflow.com/questions/11949745
复制相似问题