【问题标题】:How does texture display to color not grey scale in OpenGL3?纹理如何在OpenGL3中显示为颜色而不是灰度?
【发布时间】:2020-08-06 06:08:08
【问题描述】:

我正在使用 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)

【问题讨论】:

  • 我找到了一些显示颜色的方法。我试图将片段着色器代码更改为 `Out_Color = texture(Texture, Frag_UV); `。现在它确实显示颜色。但是其他图形的颜色很奇怪。我会找到分割片段着色器计算的方法。

标签: go opengl fragment-shader opengl-3 imgui


【解决方案1】:

我不知道Frag_Color 是什么,但您将其设置为Frag_Color.rgb 的输出颜色,这使得纹理的颜色取决于其值。您只将Texture 放在透明度/可见性的 alpha 值中。试试这个代码,它应该可以工作: Out_Color = texture(Texture, Frag_UV.st); 如果该代码不起作用,您也可以尝试以下操作: Out_Color = Frag_Color * texture(Texture, Frag_UV.st);

很抱歉格式化,我在手机上写的时候效果不好

【讨论】:

  • 我已经通过Out_Color = texture( Texture, Frag_UV)解决了。谢谢你:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-08-23
  • 1970-01-01
  • 1970-01-01
  • 2013-12-09
  • 1970-01-01
  • 2019-09-08
  • 2016-09-27
相关资源
最近更新 更多