登录
首页 >  Golang >  Go问答

OpenGL3 中纹理如何显示为彩色而不是灰度?

来源:stackoverflow

时间:2024-04-30 14:24:35 257浏览 收藏

本篇文章给大家分享《OpenGL3 中纹理如何显示为彩色而不是灰度?》,覆盖了Golang的常见基础知识,其实一个语言的全部知识点一篇文章是不可能说完的,但希望通过这些问题,让读者对自己的掌握程度有一定的认识(B 数),从而弥补自己的不足,更好的掌握它。

问题内容

我正在使用 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 值,即透明度/可见性。试试这个代码,它应该可以工作: Out_Color = 纹理(Texture, Frag_UV.st); 如果该代码不起作用,您也可以尝试以下操作: Out_Color = Frag_Color * 纹理(Texture, Frag_UV.st);

很抱歉格式化,当我在手机上书写时它效果不佳

文中关于的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《OpenGL3 中纹理如何显示为彩色而不是灰度?》文章吧,也可关注golang学习网公众号了解相关技术文章。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>