Path オブジェクトを使用して、キャンバスに六角形のグリッドを描き始めました。六角形のサイズに応じて、特定のディスプレイに表示される六角形の数をすべて計算しました。
キャンバスに応じてすべての六角形座標を計算しています。しかし今、深刻なパフォーマンスの問題があり、これを OpenGL に移植する必要があります。
アルゴリズムはキャンバスで機能するため、GLU.gluUnProject を使用して、これらの「キャンバス」の六角形座標を OpenGL 座標系に変換しようとしています。
「for ループ」
float near[] = { 0.0f, 0.0f, 0.0f, 0.0f };
GLU.gluUnProject(b.hexes[ii][jj].points[ii].x,
b.hexes[ii][jj].points[ii].y, 0, mg.mModelView, 0,
mg.mProjection, 0, viewport, 0, near, 0);
vertices[zz] = (float) ((near[0])/near[3]);
zz++;
vertices[zz] = (float) ((near[1])/near[3]);
zz++;
vertices[zz] = 0;
私はopenglの知識が不足しているため、glViewport、gluPerspective、glTranslatefをキャンバスと「同じ」2Dワールドに設定する方法がわかりません。
だから私の質問は:
私の最初の六角形(キャンバス上では、最初の六角形は左上)がopenGL描画面の世界で等しくなるように設定するにはどうすればよいですか?
アップデート
私の問題を解決することに関心を持っていただき、ありがとうございます。しかし:
18 個の float vertices 配列を次のように設定します 。常に 0 です。
ByteBuffer vertexByteBuffer = ByteBuffer
.allocateDirect(vertices.length * 4);
vertexByteBuffer.order(ByteOrder.nativeOrder());
vertexBuffer = vertexByteBuffer.asFloatBuffer();
vertexBuffer.put(vertices);
vertexBuffer.position(0);
そして描く:
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
gl.glColor4f(0.0f, 1.0f, 0.0f, 0.5f);
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer);
gl.glDrawArrays(GL10.GL_TRIANGLE_FAN, 0, vertices.length/3);
gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
描画する前に設定: onDrawFrame()
gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
gl.glLoadIdentity();
gl.glTranslatef(0.0f, 0.0f, -5.0f);
onSurfaceChanged()
gl.glViewport(0, 0, width, height);
gl.glMatrixMode(GL10.GL_PROJECTION);
gl.glLoadIdentity();
gl.glOrthof(0, width, height, 0, -1, 1);
gl.glMatrixMode(GL10.GL_MODELVIEW);
gl.glLoadIdentity();