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 使用glReadPixels读取纹理图像的像素数据_Java_Opengl_Jogl - Fatal编程技术网

Java 使用glReadPixels读取纹理图像的像素数据

Java 使用glReadPixels读取纹理图像的像素数据,java,opengl,jogl,Java,Opengl,Jogl,可以使用glReadPixels从纹理图像读取像素数据吗 我生成纹理图像的代码是: gl.glTexImage2D( GL2.GL_TEXTURE_2D, 0, GL2.GL_RGBA, width, height, 0, GL2.GL_RGBA, GL2.GL_UNSIGNED_BYTE, ByteBuffer.wrap( pixels ) ); 可变像素包含图像的像素值。然后我使用glReadPixels尝试读取刚刚创建的纹理图像的像素数据。 我使用glReadPixels的代码是:

可以使用glReadPixels从纹理图像读取像素数据吗

我生成纹理图像的代码是:

gl.glTexImage2D( GL2.GL_TEXTURE_2D, 0, GL2.GL_RGBA, width, height, 0, GL2.GL_RGBA, GL2.GL_UNSIGNED_BYTE, ByteBuffer.wrap( pixels ) );
可变像素包含图像的像素值。然后我使用glReadPixels尝试读取刚刚创建的纹理图像的像素数据。 我使用glReadPixels的代码是:

    FloatBuffer buffer = FloatBuffer.allocate( 4 );
    for ( int row = 0, col; row < height; row++ ) {
        for ( col = 0; col < width; col++ ) {
            gl.glReadPixels( col, row, 0, 0, GL2.GL_RGBA, GL2.GL_FLOAT, buffer );
            System.out.print( buffer.get( 0 ) );
        }
        System.out.println();
    }
FloatBuffer=FloatBuffer.allocate(4);
for(int row=0,col;row
问题是我一直得到一个0.0的值,
我想知道纹理图像是否存储在帧缓冲区中,因为glReadPixels从帧缓冲区读取数据?

glReadPixels从默认帧缓冲区读取(GL_BACK用于dbl缓冲),是的。 若要读取纹理,可能需要使用FBO w/附加纹理颜色缓冲区。 然后将FBO设置为活动状态,可以使用glReadPixels。 因为FBO的驯服非常复杂,而你使用的是慢跑, 我将您链接到使用GLFBODrawable/FBObject的 内部,并使用glReadPixels执行快照。
Ofc。。您需要仔细阅读一下代码,它是新的API。

我认为这一行中的错误

gl.glReadPixels( col, row, 0, 0, GL2.GL_RGBA, GL2.GL_FLOAT, buffer );
请尝试以下方法

gl.glReadPixels( col, row, 1, 1, GL2.GL_RGBA, GL2.GL_FLOAT, buffer );
而且最好同时阅读整个图像。不要忘记分配所需的缓冲区大小

gl.glReadPixels( col, row, width, height, GL2.GL_RGBA, GL2.GL_FLOAT, buffer );