多纹理不适用于LWJGL

时间:2013-04-02 14:35:08

标签: java opengl textures lwjgl multitexturing

我遵循了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()是我绘制所有内容的函数。 我使用光滑加载纹理等,这是我的bindTexture函数:

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

drawStuff()我有一个自定义的“面部”课程,这里是我在那里绘制所有内容的地方:

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时很容易理解?

1 个答案:

答案 0 :(得分:0)

我强烈建议你向these tutorials学习如何在LWJGL中使用现代OpenGL。如果你看看前面提到的链接中的例子,你会发现你的方法。我不知道它是如何工作的在固定管道中,但使用现代管道,只需将几个纹理插入片段着色器中的纹理目标,然后根据需要对纹理像素进行采样。