纹理如何在 OpenGL 3 中显示为彩色而不是灰度?
How does texture display to color not grey scale in OpenGL3?
我正在使用 Golang 开发一个 GUI 程序。
我正在为我的 GUI 使用 imgui-go 框架。
现在,我遇到了颜色纹理显示问题。
我从文件中加载了一个图像,并将图像制作为纹理,然后附加到 GUI 上。
图像肯定是彩色的,但它在 gui 上显示灰度。
这个问题有最好的解决方案吗?
谢谢。
OpenGL 片段着色器:
uniform int ImageType;
uniform sampler2D Texture;
uniform sampler2D Palette;
in vec2 Frag_UV;
in vec4 Frag_Color;
out vec4 Out_Color;
void main()
{
Out_Color = vec4(Frag_Color.rgb, Frag_Color.a * texture( Texture, Frag_UV.st).r);
}
图像纹理:
gl.BindTexture(gl.TEXTURE_2D, texture)
width := int32(bm.W)
height := int32(bm.H)
dataPtr := gl.Ptr(bm.Data)
gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR)
gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR)
gl.PixelStorei(gl.UNPACK_ROW_LENGTH, 0)
gl.TexImage2D(gl.TEXTURE_2D, 0, gl.RGBA, int32(width), int32(height),
0, gl.RGBA, gl.UNSIGNED_BYTE, dataPtr)
我不知道 Frag_Color
是什么,但您将其作为 Frag_Color.rgb
输出颜色,这使得纹理的颜色取决于它的值。您只将 Texture
放在 alpha 值中,即 transparency/visibility。试试这个代码,它应该工作:
Out_Color = texture(Texture, Frag_UV.st);
如果该代码不起作用,您也可以尝试以下操作:
Out_Color = Frag_Color * texture(Texture, Frag_UV.st);
抱歉格式化了,我在phone
上写的时候不太好用
我正在使用 Golang 开发一个 GUI 程序。
我正在为我的 GUI 使用 imgui-go 框架。
现在,我遇到了颜色纹理显示问题。
我从文件中加载了一个图像,并将图像制作为纹理,然后附加到 GUI 上。
图像肯定是彩色的,但它在 gui 上显示灰度。
这个问题有最好的解决方案吗?
谢谢。
OpenGL 片段着色器:
uniform int ImageType;
uniform sampler2D Texture;
uniform sampler2D Palette;
in vec2 Frag_UV;
in vec4 Frag_Color;
out vec4 Out_Color;
void main()
{
Out_Color = vec4(Frag_Color.rgb, Frag_Color.a * texture( Texture, Frag_UV.st).r);
}
图像纹理:
gl.BindTexture(gl.TEXTURE_2D, texture)
width := int32(bm.W)
height := int32(bm.H)
dataPtr := gl.Ptr(bm.Data)
gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR)
gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR)
gl.PixelStorei(gl.UNPACK_ROW_LENGTH, 0)
gl.TexImage2D(gl.TEXTURE_2D, 0, gl.RGBA, int32(width), int32(height),
0, gl.RGBA, gl.UNSIGNED_BYTE, dataPtr)
我不知道 Frag_Color
是什么,但您将其作为 Frag_Color.rgb
输出颜色,这使得纹理的颜色取决于它的值。您只将 Texture
放在 alpha 值中,即 transparency/visibility。试试这个代码,它应该工作:
Out_Color = texture(Texture, Frag_UV.st);
如果该代码不起作用,您也可以尝试以下操作:
Out_Color = Frag_Color * texture(Texture, Frag_UV.st);
抱歉格式化了,我在phone
上写的时候不太好用