java - OpenGL 只渲染纹理,而不是线条(可能很简单)

标签 java opengl lwjgl

我已经实现了我的“引擎”,它曾经很好地画线。但是现在,在我实现了简单的 sprite 之后,线条不再渲染(但 sprite 可以)。当我将 glEnable(GL_TEXTURE_2D) 放入我的初始化代码中时,一切都出错了。

glClearColor(0.0f,0.0f,0.0f,0.0f);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_TEXTURE_2D);
glEnable( GL_BLEND );
glMatrixMode(GL_PROJECTION);
glLoadIdentity(); 
glOrtho(0, width, 0, height, 1, -1);

我的线条是这样画的:

    glLineWidth(lineWidth);
    glColor4f(color.getR(), color.getG(), color.getB(), color.getA());
    if(transformToViewport) {
        Point a = vp.transformCoords(begin);
        Point b = vp.transformCoords(end);
        glVertex3f(a.coords[0], a.coords[1], 0);
        glVertex3f(b.coords[0], b.coords[1], 0);
    }
    else {
        glVertex3f(begin.coords[0], begin.coords[1], 0);
        glVertex3f(end.coords[0], end.coords[1], 0);
    }

和 Sprite :

    float transformedH = vp.transformLength(height);
    float transformedW = vp.transformLength(width);
    Point transformedCenter = vp.transformCoords(center);
    glBindTexture(GL_TEXTURE_2D, texture.getTextureID());

    glTexCoord2f(0f, 1f);
    glVertex2f(transformedCenter.coords[0] - transformedW / 2, transformedCenter.coords[1] - transformedH / 2);

    glTexCoord2f(1f, 1f);
    glVertex2f(transformedCenter.coords[0] + transformedW / 2, transformedCenter.coords[1] - transformedH / 2);

    glTexCoord2f(0f, 0f);
    glVertex2f(transformedCenter.coords[0] - transformedW / 2, transformedCenter.coords[1] + transformedH / 2);


    glTexCoord2f(1f, 1f);
    glVertex2f(transformedCenter.coords[0] + transformedW / 2, transformedCenter.coords[1] - transformedH / 2);

    glTexCoord2f(1f, 0f);
    glVertex2f(transformedCenter.coords[0] + transformedW / 2, transformedCenter.coords[1] + transformedH / 2);

    glTexCoord2f(0f, 0f);
    glVertex2f(transformedCenter.coords[0] - transformedW / 2, transformedCenter.coords[1] + transformedH / 2);


    glBindTexture(GL_TEXTURE_2D, 0);

最佳答案

在绘制纹理之前(例如在方法中)使用 glEnable(GL_TEXTURE_2D);,然后在之后立即使用 glDisable(GL_TEXTURE_2D);

对于初学者(有时对于更复杂的系统),最好将 glEnableglDisable 调用配对在一起,以防止不必要的功能被用于事物(在某些情况下会导致问题,例如)您不需要它们。

关于java - OpenGL 只渲染纹理,而不是线条(可能很简单),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20429127/

相关文章:

java - Java 中 BlockingQueue 上的并发 put 调用

java - 当您单击 HTML 中的 <button>/&lt;input&gt; 时,到底会发生什么?

java - OpenAL 加载两个声音导致 Java 卡住

java - Java中的final变量什么时候不能再被修改?

java - 如何在webview(javaFX)中使用javascript(桥)调用的executeScript

C++ Opengl 三角形正在绘制或根本不可见

opengl - 结构数组或数组结构性能

java - 为什么我的 uniform 没有在 openGL 中初始化?

Java - 似乎无法按照方程的路径在屏幕上绘制文本

java - VBO和VAO不绘制opengl和LWJGL3