以下代码尝试绘制GLSurfaceView的框架和对角线,但结果是黑色大屏幕。我尝试设置正交投影,将视口大小与视图大小对齐,使用glDrawArrays()绘制框架线,使用glDrawElements()绘制对角线。我找不到问题的根源。
public class MapView extends GLSurfaceView implements Renderer {
private int w, h;
private FloatBuffer frameVertices;
private ByteBuffer diagIndices;
public MapView(Context ctx) { this(ctx, null); }
public MapView(Context context, AttributeSet attrs) {
super(context, attrs);
setRenderer(this);
}
@Override
public void onDrawFrame(GL10 gl) {
gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
gl.glVertexPointer(2, GL10.GL_FLOAT, 0, frameVertices);
gl.glColor4f(0f, 0f, 1f, 0.5f);
gl.glDrawArrays(GL10.GL_LINE_LOOP, 0, 4);
gl.glDrawElements(GL10.GL_LINES, 1, GL10.GL_UNSIGNED_BYTE, diagIndices);
gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
}
@Override
public void onSurfaceChanged(GL10 gl, int width, int height) {
// TODO Auto-generated method stub
}
@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
w = getWidth(); h = getHeight();
TRC.debug("w = " + w + ", h = " + h);
gl.glClearColor(0, 0, 0, 1);
gl.glViewport(0, 0, w, h);
gl.glDepthRangex(1, -1); // TODO remove
gl.glMatrixMode(GL10.GL_PROJECTION);
gl.glLoadIdentity();
gl.glOrthox(0, w, 0, h, 1, -1);
float[] frame = {
0, 0,
w-1, 0,
w-1, h-1,
0, h-1 };
ByteBuffer byteBuffer = ByteBuffer.allocateDirect(frame.length * 4);
byteBuffer.order(ByteOrder.nativeOrder());
frameVertices = byteBuffer.asFloatBuffer();
frameVertices.put(frame);
frameVertices.flip();
frameVertices.position(0);
gl.glLineWidthx(10);
gl.glMatrixMode(GL10.GL_MODELVIEW);
gl.glLoadIdentity();
gl.glDisable(GL10.GL_DEPTH_TEST);
diagIndices = ByteBuffer.allocateDirect(2);
diagIndices.order(ByteOrder.nativeOrder());
diagIndices.put(new byte[] {0, 2});
diagIndices.flip();
}
}
可能是什么事?
答案 0 :(得分:2)
我弄明白了这个问题。我使用glOrthox()
,我认为x
只是意味着整数值。但这并不完全是,在中间用二进制点处理。 16bit.16bit
。我的顶点超出了屏幕范围...我的解决方案是将glOrthox()
更改为glOrthof()
。谢谢你的帮助!
答案 1 :(得分:0)
您不需要gl.glDepthRangex()
方法调用,并且您的近和远剪裁平面会在gl.glOrthox()
中切换。除此之外,我没有看到任何错误。尝试使用gl.glClearColor()
设置不同的清晰颜色,但我认为它不会产生太大的影响。
第二个想法,近夹片平面可能会更好,为0,试试这个:gl.glOrthox(0, w, 0, h, 0, 1);