我对opengl并不熟悉,但我试图在屏幕上绘制一个简单的三角形。每个角落都以不同的颜色着色。有些想法就像一个基础教程......问题是,1。三角形只是白色。 2.三角形仅在仿真器中可见,而不在我的HTC Desire上。
我的GLView课程:
public class GLView extends GLSurfaceView implements GLSurfaceView.Renderer {
private FloatBuffer vertexBuff;
private FloatBuffer colorBuff;
public static FloatBuffer makeFloatBuffer(float[] arr)
{
ByteBuffer bb = ByteBuffer.allocateDirect(arr.length * 4);
bb.order(ByteOrder.nativeOrder());
FloatBuffer fb = bb.asFloatBuffer();
fb.put(arr);
fb.position(0);
return fb;
}
public GLView(Context context) {
super(context);
setRenderer(this);
}
@Override
public void onDrawFrame(GL10 gl) {
gl.glClearColor(0, 0, 0, 0);
gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
gl.glEnableClientState(GL10.GL_COLOR_ARRAY);
gl.glColorPointer(3, GL10.GL_FLOAT, 0, makeFloatBuffer(new float[] { 1, 0, 0,
0, 1, 0,
0, 0, 1 }));
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, makeFloatBuffer(new float[] { 0, 0, 0,
0, 1, 0,
1, 1, 0}));
gl.glDrawArrays(GL10.GL_TRIANGLES, 0, 3);
}
@Override
public void onSurfaceChanged(GL10 gl, int width, int height) {
gl.glViewport(0, 0, width, height);
}
@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
}
}
有什么建议吗?
答案 0 :(得分:3)
我猜测OpenGL状态可能有些未指定,因为您不提供投影或模型视图矩阵。但我估计主要是因为我不熟悉OpenGL。无论如何,我通过向颜色数组
添加alpha值来使代码工作 gl.glColorPointer(4, GL10.GL_FLOAT, 0, makeFloatBuffer(new float[] { 1, 0, 0, 1,
0, 1, 0, 1,
0, 0, 1, 1 }));
提供所提到的转换矩阵可能会在设备上发挥作用。
@Override
public void onSurfaceChanged(GL10 gl, int width, int height) {
gl.glViewport(0, 0, width, height);
gl.glMatrixMode(GL10.GL_PROJECTION);
gl.glLoadIdentity();
GLU.gluOrtho2D(gl, -1.0f, 1.0f, -1.0f, 1.0f);
gl.glMatrixMode(GL10.GL_MODELVIEW);
gl.glLoadIdentity();
}