【问题标题】:OpenGL named textures not workingOpenGL命名纹理不起作用
【发布时间】:2010-06-11 20:01:42
【问题描述】:
glBindTexture(GL_TEXTURE_2D, texidx);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 512, 512, 0, GL_RGBA, GL_FLOAT, texdata);

如果texidx == 0 一切正常,但如果texidx != 0 或使用glGenTexture(&texidx,1) 生成,则最终渲染只显示纯色(最后一个glColor)而不是纹理。我已经调试了一天多(glGetError 显示没有问题)并且已经没有想法了。有什么想法吗?我可以根据需要发布更多代码。

设置代码:

glEnable (GL_BLEND); 
glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

glEnable(GL_TEXTURE_2D);
glShadeModel(GL_SMOOTH);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); 

glDisable(GL_LIGHTING);  

glClearColor(0.5,0.5,0.5,0);
glClearDepth(1);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);  
glDisable(GL_COLOR_MATERIAL);

glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);

【问题讨论】:

    标签: opengl textures


    【解决方案1】:

    TexID 不能为零,这是默认纹理或表示没有纹理。

    问题是默认的 OpenGL 缩小过滤器使用 mipmap,但一个常见的错误是未提供它们,将 MIN/MAG 过滤器更改为可用的东西,如 GL_LINEAR 或 GL_NEAREST,您的纹理将起作用。

    更多信息(和其他常见错误)在http://www.opengl.org/wiki/Common_Mistakes#Creating_a_Texture中讨论

    【讨论】:

    • 嘿马蒂亚斯,这是一个很好的观点,但在这种情况下不是问题,因为我使用的是 GL_NEAREST。我在上面添加了我的设置代码以帮助澄清。如前所述,奇怪的是 TexId=0 是唯一适合我的情况。
    • 啊哈,但是我需要为每个纹理设置过滤器(duh)。确保运行 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); 后问题得到解决glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);在绑定纹理之后和 glTexImage2D() 之前立即。 ::sigh:: 如果openGL在这种情况下有一些合理的行为,或者至少引发错误,那不是很好吗?!
    • 查看更多具体内容:opengl.org/wiki/…
    猜你喜欢
    • 1970-01-01
    • 2012-03-13
    • 1970-01-01
    • 2013-04-21
    • 2017-11-26
    • 2020-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多