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

时间:2017-11-17 19:15:28

标签: java opengl jogl

我试图找到我在代码中出错的地方。我正在使用JOGL。

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

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
    };

1 个答案:

答案 0 :(得分:1)

有很多错误。

  • 您的Vertex Shader非常清楚片段着色器的代码。我不知道你从哪里复制它,但你需要解决它。
  • gluPerspective旨在与Fixed-Function-Pipeline一起使用。使用可编程着色器时无效。您需要在顶点着色器中为投影矩阵放置一个制服,并手动将该矩阵传递给GL。
  • OpenGL的大多数Java Wrappers要求其Buffers为“Directly Allocated”,这意味着后备内存是本机分配的,而不是Java-Allocated。最简单的方法是使用ByteBuffer.allocateDirect(sizeInBytes);,其返回ByteBuffer,然后可以使用IntBuffer和{{1}转换为FloatBufferasFloatBuffer }}。