着色器 Java OpenGL 代码中没有错误,但窗口中没有呈现任何内容



我试图找出我在代码中做错了什么。我正在使用 JOGL。

我想在给定对象内制作两个 VCO,一个用于顶点,另一个用于索引。

函数内部没有错误init(GLAutoDrawable glAutoDrawable)但运行程序时display(GLAutoDrawable glAutoDrawable)不显示我的对象。

我哪里犯了错误?谢谢你的帮助。

我的代码:

public class Test1 implements GLEventListener {
    private int program;
    IntBuffer vao = IntBuffer.allocate(1);
    private IntBuffer buffers = IntBuffer.allocate(2);
    private float[] vertices = {
            -0.853250f, -0.136293f, -0.188932f,
             -0.129650f, 0.416492f, 0.336788f,
             -1.129635f, 0.416492f, 0.661708f,
             -1.747674f, 0.416492f, -0.188932f,
             -1.129635f, 0.416492f, -1.039572f,
             -0.129650f, 0.416492f, -0.714652f,
             -0.576865f, 1.310922f, 0.661708f,
             -1.576849f, 1.310922f, 0.336788f,
             -1.576849f, 1.310922f, -0.714652f,
             -0.576865f, 1.310922f, -1.039572f,
             0.041175f, 1.310922f, -0.188932f,
             -0.853250f, 1.863707f, -0.188932f
    };

有相当多的事情是错误的。

  • 您的顶点着色器非常清楚地是片段着色器的代码。我不知道你从哪里复制它,但你需要解决这个问题。
  • gluPerspective旨在与固定函数管道一起使用。当您使用可编程着色器时,它不起作用。您需要在顶点着色器中放置投影矩阵的制服,并将该矩阵手动传递给 GL。
  • 大多数 OpenGL 的 Java 包装器要求它们的缓冲区是"直接分配的",这意味着后备内存是本机分配的,而不是 Java 分配的。最简单的方法是使用 ByteBuffer.allocateDirect(sizeInBytes); ,它返回一个ByteBuffer,然后可以使用 asFloatBufferasIntBuffer 将其转换为IntBufferFloatBuffer

相关内容

最新更新