我有三个纹理应该显示在 opengl 控件上,而这三个纹理应该同样包含在其中。意味着 texture1 应该在 glcontrol 的 0 到 0.33 之间。并且texture2 应该在0.33 到0.66 和texture3 中保持原位。我已经完成了如下操作。但中间图像的右侧部分区域模糊。请帮忙改正 private void CreateShaders() { /***********Vert Shader********************/ vertShader = GL.CreateShader(ShaderType.VertexShader); GL.ShaderSource(vertShader, @"attribute vec3 a_position; varying vec2 vTexCoordIn; void main() { vTexCoordIn=( a_position.xy+1)/2 ; gl_Position = vec4(a_position,1); }"); GL.CompileShader(vertShader); /***********Frag Shader ****************/ fragShader = GL.CreateShader(ShaderType.FragmentShader); GL.ShaderSource(fragShader, @" uniform sampler2D sTexture1; uniform sampler2D sTexture2; uniform sampler2D sTexture3; varying vec2 vTexCoordIn; void main () { vec2 vTexCoord=vec2(vTexCoordIn.x,vTexCoordIn.y); if ( vTexCoord.x<0.3 ) gl_FragColor = texture2D (sTexture1, vec2(vTexCoord.x*2.0, vTexCoord.y)); else if ( vTexCoord.x>=0.3 && vTexCoord.x<=0.6 ) gl_FragColor = texture2D (sTexture2, vec2(vTexCoord.x*2.0, vTexCoord.y)); else gl_FragColor = texture2D (sTexture3, vec2(vTexCoord.x*2.0, vTexCoord.y)); }"); GL.CompileShader(fragShader); }
2 回答
鸿蒙传说
TA贡献1865条经验 获得超7个赞
意味着 texture1 应该在 glcontrol 的 0 到 0.33 之间。并且texture2 应该在0.33 到0.66 和texture3 中保持原位。
如果纹理坐标在 [0, 0.33] 范围内,则sTexture1
必须绘制并且纹理坐标必须从 [0, 0.33] 映射到 [0, 1]:
if ( vTexCoord.x < 1.0/3.0 ) gl_FragColor = texture2D(sTexture1, vec2(vTexCoord.x * 3.0, vTexCoord.y));
如果纹理坐标在 [0.33, 0.66] 范围内,则sTexture2
必须绘制并且纹理坐标必须从 [0.33, 0.66] 映射到 [0, 1]:
else if ( vTexCoord.x >= 1.0/3.0 && vTexCoord.x < 2.0/3.0 ) gl_FragColor = texture2D(sTexture2, vec2(vTexCoord.x * 3.0 - 1.0, vTexCoord.y));
f 纹理坐标在 [0.66, 1] 范围内,然后sTexture3
必须绘制并且纹理坐标必须从 [0.66, 1] 映射到 [0, 1]:
else if ( vTexCoord.x >= 2.0/3.0 ) gl_FragColor = texture2D(sTexture2, vec2(vTexCoord.x * 3.0 - 2.0, vTexCoord.y));
蛊毒传说
TA贡献1895条经验 获得超3个赞
gl_FragColor = texture2D (sTexture3, vec2(vTexCoord.x*2.0, vTexCoord.y)); ^^^^
如果 x >= 0.5,将 x 坐标乘以 2.0 会导致值超过 1.0。如果您的采样器设置为 CLAMP_TO_EDGE(似乎是这种情况),这会导致在纹理边缘重复采样相同的纹素(这将显示为您提到的拖尾/模糊)。
- 2 回答
- 0 关注
- 130 浏览
添加回答
举报
0/150
提交
取消