java - 着色器 Java OpenGL 代码内没有错误,但窗口内没有渲染任何内容

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

最佳答案

有很多错误。

  • 您的顶点着色器非常明显是片段着色器的代码。我不知道你从哪里复制的,但你需要修复它。
  • gluPerspective旨在与固定功能管道一起使用。当您使用可编程着色器时它没有任何效果。您需要在顶点着色器中放置一个统一的投影矩阵,并手动将该矩阵传递给 GL。
  • 大多数 OpenGL 的 Java 包装器要求其缓冲区是“直接分配”的,这意味着后备内存是 native 分配的,而不是 Java 分配的。最简单的方法是使用 ByteBuffer.allocateDirect(sizeInBytes); ,它返回 ByteBuffer然后可以转换为 IntBufferFloatBuffer使用asFloatBufferasIntBuffer .

关于java - 着色器 Java OpenGL 代码内没有错误,但窗口内没有渲染任何内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47357759/

相关文章:

c - 如何使用 OpenGL 按特定顺序绘制贴花?

Java OpenGL保存深度缓冲区

java - Java 中的图形密集型应用

java - 从 mysql 数据库中选择一个带撇号的列名

java - java中的序列点

java - 如何淡化 GWT FlexTable 中单元格的颜色

java - 登录后在类之间使用 session 变量 - 空对象引用

c++ - GLSL着色器即使没有明显的错误也不会编译

multithreading - 如何同步多线程 OpenGL 缓冲区访问?

java - JOGL 动画问题