我开始使用 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 个浮点顶点数组设置如下:[20.0, 0.0, 0.0, 60.0, 0.0, 0.0, 80.0, 34.641018, 0.0, 60.0, 69.282036, 0.0, 20.0, 69.282036, 0.0, 018,0, 34.641] Z始终为 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();