【问题标题】:Multitexturing not working in LWJGL多纹理在 LWJGL 中不起作用
【发布时间】:2013-04-02 14:35:07
【问题描述】:

我遵循this 教程来尝试在 LWJGL 中实现多纹理。但是每当我运行我的代码时,第二个纹理都不会出现,或者第一个纹理会取而代之。这是我绑定纹理的方法:

ARBMultitexture.glActiveTextureARB(ARBMultitexture.GL_TEXTURE0_ARB);
bindTexture(myTex);
glEnable(GL_TEXTURE_2D);
glTexEnvf (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, EXTTextureEnvCombine.GL_COMBINE_EXT);
glTexEnvf (GL_TEXTURE_ENV,EXTTextureEnvCombine.GL_COMBINE_RGB_EXT, GL_REPLACE);
ARBMultitexture.glActiveTextureARB(ARBMultitexture.GL_TEXTURE1_ARB);
bindTexture(myTex2);
glEnable(GL_TEXTURE_2D);
glTexEnvf (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, EXTTextureEnvCombine.GL_COMBINE_EXT);
glTexEnvf (GL_TEXTURE_ENV, EXTTextureEnvCombine.GL_COMBINE_RGB_EXT, GL_INCR);

drawStuff();

myTex 和 myTex2 都 TexturesdrawStuff() 是我绘制所有内容的函数。 我使用 slick 来加载纹理等,这是我的 bindTexture 函数:

void bindTexture(Texture t) {
    glBindTexture(GL_TEXTURE_2D, t.getTextureID());
}

drawStuff() 我有一个自定义的“Face”类,这里是我在其中绘制所有内容的地方:

glBegin(GL_TRIANGLES);
    glNormal3f(getNormal().x, getNormal().y, getNormal().z);
    glNormal3f(norm1.x, norm1.y, norm1.z);
    ARBMultitexture.glMultiTexCoord2fARB(ARBMultitexture.GL_TEXTURE0_ARB, t1.x, t1.y);
    ARBMultitexture.glMultiTexCoord2fARB(ARBMultitexture.GL_TEXTURE1_ARB, t1.x, t1.y);
    glVertex3f(p1.x, p1.y, p1.z);
    glNormal3f(norm2.x, norm2.y, norm2.z);
    ARBMultitexture.glMultiTexCoord2fARB(ARBMultitexture.GL_TEXTURE0_ARB, t2.x, t2.y);
    ARBMultitexture.glMultiTexCoord2fARB(ARBMultitexture.GL_TEXTURE1_ARB, t2.x, t2.y);
    glVertex3f(p2.x, p2.y, p2.z);
    glNormal3f(norm3.x, norm3.y, norm3.z);
    ARBMultitexture.glMultiTexCoord2fARB(ARBMultitexture.GL_TEXTURE0_ARB, t3.x, t3.y);
    ARBMultitexture.glMultiTexCoord2fARB(ARBMultitexture.GL_TEXTURE1_ARB, t3.x, t3.y);
    glVertex3f(p3.x, p3.y, p3.z);
glEnd();

t1, t2, t3, norm1, norm2, norm3, p1, p2, p3 是我创建的 3D 矢量类的所有实例(我只是在 t1, t2t3 的 z 分量中保留一个 0)。顶点和片段着色器源与上述教程中的完全相同。 所有代码都可以正常使用普通的旧纹理。关于如何完成这项工作的任何想法?或者可能是使用 LWJGL 时易于遵循的更好的教程?

【问题讨论】:

  • 您为什么不考虑使用基于着色器的方法?
  • @MichaelIV 我没有在网上看到任何关于此的内容,我不知道该怎么做:/

标签: java opengl textures lwjgl multitexturing


【解决方案1】:

我强烈建议您向 these tutorials 学习如何将现代 OpenGL 与 LWJGL 一起使用。?如果您查看上述链接中的示例,您会找到自己的方法。我不知道它是如何工作的管道,但使用现代管道,只需将多个纹理插入片段着色器中的纹理目标,并根据需要对这些混合纹素进行采样。

【讨论】:

  • 谢谢!我可能应该停止在我的代码中使用固定的管道操作:P
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多