-1
Androidデバイス上でOpenGL ESを使って好きなように図形を表示したいと思います。問題は、私のコードが矩形のような簡単な図形に対しても機能しないことです(これは私が以下で使用する予定です)。Android OpenGL ESはTRIANGLESを使用して私の三角形を表示していません
私はglTranslatef
で何かが間違っていると思います。私はすべての値を調整しましたが、私はそれが何であるか把握できません。
矩形は点P(0,0,0), P(0,1,0), P(1,1,0), P(1,0,0)
によって定義されます。私はあなたがどこかに射影行列が必要だと思う
private static FloatBuffer getVertexCoords() {
float coords[] = {
0f, 0f, 0f, // first triangle first point
0f, 1f, 0f, // first triangle second point
1f, 1f, 0f, // first triangle third point
1f, 1f, 0f, // second triangle first point
1f, 0f, 0f, // second triangle second point
0f, 0f, 0f, // second triangle third point
}
ByteBuffer vbb = ByteBuffer.allocateDirect(coords.length * 4); // n coords * 4 bytes per float
vbb.order(ByteOrder.nativeOrder());
FloatBuffer trianglesVB = vbb.asFloatBuffer();
trianglesVB.put(coords);
trianglesVB.position(0);
return trianglesVB;
}
@Override
public void onDrawFrame(GL10 gl) {
gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
gl.glMatrixMode(GL10.GL_MODELVIEW);
gl.glLoadIdentity();
gl.glTranslatef(0f, 0f, -4f);
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY); // glBegin
gl.glColor4f(1.0f, 0.0f, 0.0f, 1.0f);
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, getVertexCoords());
gl.glDrawArrays(GL10.GL_TRIANGLES, 0, 2 * 3 * 3); // triangles * points * coords
gl.glDisableClientState(GL10.GL_VERTEX_ARRAY); // glEnd
int error = gl.glGetError();
if (error != GL10.GL_NO_ERROR) {
Log.e(TAG, "OpenGL ES Error: " + error);
}
}
@Override
public void onSurfaceChanged(GL10 gl, int width, int height) {
// think this one doesn't matter
}
@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
gl.glClearColor(1.0f, 1.0f, 1.0f, 1.0f); // white background
gl.glFrontFace(GL10.GL_CW); // front face is clockwise
}
(三角形の色が、それでも:
onSurfaceCreated単純な射影行列を追加してみてください私は座標を変更したので混乱し、同じ位置に留まります)。そして活力の瞬間の後、それは数分の1秒で消えます。そう? – mcxme