Jac*_*ack 2 java android opengl-es error-code glreadpixels
这是我的选择代码
public static void pick(GL11 gl){
int[] viewport = new int[4];
ByteBuffer pixel = ByteBuffer.allocateDirect(3).order(ByteOrder.nativeOrder());
mColourR = BaseObject.getColourR();
mColourG = BaseObject.getColourG();
mColourB = BaseObject.getColourB();
x = MGLSurfaceView.X();
y = MGLSurfaceView.Y();
gl.glGetIntegerv(GL11.GL_VIEWPORT,viewport,0);
gl.glReadPixels((int)x, (int)(viewport[3] - y), 1, 1, GL11.GL_RGB, GL11.GL_UNSIGNED_BYTE, pixel);
Log.d(TAG, String.valueOf(gl.glGetError()));
R = pixel.get(0);
G = pixel.get(1);
B = pixel.get(2);
Log.d(TAG, "Colour:" + pixel.get(0) + " " + pixel.get(1) + " " + pixel.get(2));
if (R == mColourR && G == mColourG && B == mColourB){
match = true;
}else{
match = false;
}
Log.d(TAG, String.valueOf(match));
Log.d(TAG, String.valueOf(viewport[0]) + "," + String.valueOf(viewport[1]) + "," + String.valueOf(viewport[2]) + "," + String.valueOf(viewport[3]));
}
Run Code Online (Sandbox Code Playgroud)
抱歉这个烂摊子.无论如何,无论我在哪里点击,这段代码似乎总是返回(0,0,0).我有一个红色正方形,一个绿色,正方形和一个蓝色背景用于测试目的,每次绘制一个正方形并按下屏幕时,都会调用此方法
BaseObject.newColour();
mColourR = BaseObject.getColourR();
mColourG = BaseObject.getColourG();
mColourB = BaseObject.getColourB();
gl.glPushMatrix();
gl.glColor4f(mColourR, mColourG, mColourB, 0.0f);
gl.glTranslatef(x1, y1, 0);
square.draw(gl);
gl.glPopMatrix();
ColourPicking.pick((GL11)gl);
match = ColourPicking.getMatch();
if (match == true){
x1 = (float) Math.floor(Math.random()*9);
y1 = (float) Math.floor(Math.random()*7);
match = false;
}
Run Code Online (Sandbox Code Playgroud)
即使屏幕上没有黑色空间,我总是得到黑色值,所以我很确定它不仅仅是一个精度问题.我有一个日志标记,返回视口值,他们很好,我也检查了我的xy坐标,他们似乎合法我唯一要做的是1282错误代码.
有谁知道这可能是什么?
编辑:
我们知道问题是来自读取像素函数,因为我在函数之前和之后放了glGetError()并且它回来了
Before: 0
After: 1282
Run Code Online (Sandbox Code Playgroud)
摆脱缩放没有帮助,但这是一个很长的镜头
我已经将Buffer更改为FloatBuffer,现在我回来了(0.0,0.0,0.0)而不是(0,0,0),这不是我所知道的胜利.我还注意到错误现在是1280(GL_INVALID_ENUM).我不知道这是否是前进的一步.如果没有错误1282,是否有人知道如何修复此错误.
当您获得GL_INVALID_ENUM时,这可能是因为您将GL_RGB作为格式参数传递给glReadPixels.根据glReadPixels的Khronos文档,格式和类型只有两对可能的值:
我最近遇到了同样的问题,并使用GL_RGBA为我修复了它.
| 归档时间: |
|
| 查看次数: |
3073 次 |
| 最近记录: |