如何包装像素数据以用于glDrawPixels()或纹理

时间:2013-09-15 15:46:15

标签: java opengl format pixels

我正在尝试使用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);

当我运行程序时,它只显示黑屏。

1 个答案:

答案 0 :(得分:0)

Eclipse正在谈论的缓冲区并不是OpenGL特有的(本身)。 OpenGL函数需要指向存储器位置的指针,以便在哪里找到数据。 Java没有指针,因此您需要一个Java缓冲区对象(不要与OpenGL缓冲区对象混淆),它提供了一些方法来提取可以传递给OpenGL的指针。例如,Java FloatBuffer。您可以将其实例作为数据参数传递给OpenGL gl…Pointer函数。