Java 使用glReadPixels读取纹理图像的像素数据
可以使用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的代码是:
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 );