我有三個紋理應該顯示在 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 關注
- 163 瀏覽
添加回答
舉報
0/150
提交
取消