我正在尝试使用JOGL渲染一个简单的jpg图像。但是,我不知道如何包装像素数组数据,以便glDrawPixels接受它。这是我到目前为止的相关部分:
//In Main() Method
private static float[] pixels = {
0.f, 1.f, 0.f,
1.f, 0.f, 1.f,
0.f, 1.f, 0.f
};
//In Render() Method
gl.glRasterPos3f(12.0f, 12.0f, 5.0f);
gl.glDrawPixels(3, 3, GL.GL_RGBA, GL.GL_FLOAT, pixels);
Eclipse告诉我glDrawPixels接受缓冲区而不是float数组,所以我想我需要先将像素放入缓冲区并指定缓冲区,但我不知道如何做到这一点,或者哪个缓冲区使用。我需要使用glPixelStore *()吗?任何帮助将非常感激。谢谢!
- 编辑 -
我试图将信息抛入FloatBuffer并且方法接受了它,但屏幕上没有任何内容。我是否正确地将数组包装到缓冲区中,或者是我对gl函数的调用问题?这是更新后的代码:
private static float[] pixels = {
0.f, 1.f, 0.f,
1.f, 0.f, 1.f,
0.f, 1.f, 0.f
};
static FloatBuffer buf;
//In Main() Method
buf.wrap(pixels);
//In Render() method
gl.glRasterPos3f(0.0f, 0.0f, 0.0f);
gl.glPixelZoom(50.0f, 50.0f);
gl.glDrawPixels(3, 3, GL.GL_RGBA, GL.GL_FLOAT, buf);
当我运行程序时,它只显示黑屏。
答案 0 :(得分:0)
Eclipse正在谈论的缓冲区并不是OpenGL特有的(本身)。 OpenGL函数需要指向存储器位置的指针,以便在哪里找到数据。 Java没有指针,因此您需要一个Java缓冲区对象(不要与OpenGL缓冲区对象混淆),它提供了一些方法来提取可以传递给OpenGL的指针。例如,Java FloatBuffer
。您可以将其实例作为数据参数传递给OpenGL gl…Pointer
函数。