Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
着色器Java OpenGL代码内没有错误,但窗口内没有渲染任何内容_Java_Opengl_Jogl - Fatal编程技术网

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

着色器Java OpenGL代码内没有错误,但窗口内没有渲染任何内容,java,opengl,jogl,Java,Opengl,Jogl,我试图找出我在代码中做错了什么。我正在使用JOGL 我想在给定对象内创建两个VBO,一个用于顶点,另一个用于索引 init(GLAutoDrawable GLAutoDrawable)函数内部没有错误,但是display(GLAutoDrawable GLAutoDrawable)在运行程序时不显示我的对象 我哪里出错了?谢谢你的帮助 我的代码: public class Test1 implements GLEventListener { private int program;

我试图找出我在代码中做错了什么。我正在使用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包装器要求其缓冲区“直接分配”,这意味着支持内存是本机分配的,而不是Java分配的。最简单的方法是使用
    ByteBuffer.allocateDirect(sizeInBytes)
    ,它返回一个
    字节缓冲
    ,然后可以使用
    asFloatBuffer
    asIntBuffer
    将其转换为
    IntBuffer
    FloatBuffer

您可以使用com.jogamp.common.nio.Buffers.newDirectIntBuffer(int)为JOGL创建直接nio缓冲区,“new GLU()”应替换为“GLU.createGLU(gl)”。顺便说一句,回答得很好,值得投一票:)