我想在iOS上用OpenGL ES 1.1呈現地球儀(球體上有地圖)。用OpenGL ES繪製地球儀
我可以繪製球體,並映射邊界,但有一個問題:在我看來並不面向前方的線條也正在屏幕上繪製。就像這樣:
在圖片中,你可以看到,美國呈現就好了,但你可以看到澳大利亞呈現在後面。它不應該顯示,因爲它位於地球的後面,全球的黑色和紫色條紋不透明。
有關我應該調整哪些參數以獲得合適的地球儀的任何想法?
如果有幫助,我可以發佈相關部分的代碼。只要問問我哪一部分會更新這個問題。
非常感謝提前。
更新:這是我在用的球渲染:
glEnableClientState(GL_VERTEX_ARRAY);
glPolygonOffset(-1.0f, -1.0f);
glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE);
int x, y;
GLfloat curR, curG, curB;
curR = curG = curB = 0.15f;
for (y=0; y<EARTH_LAT_RES; y++) {
if (y%10 == 0) {
glColor4f(curR, curG, curB, 1.0f);
curR = curR == 0.15f ? 0.6f : 0.15f;
curB = curB == 0.15f ? 0.6f : 0.15f;
}
for (x=0; x<EARTH_LON_RES; x++) {
Vertex3D vs[4];
vs[1] = vertices[x][y];
vs[0] = vertices[x][y+1];
vs[3] = vertices[x+1][y];
vs[2] = vertices[x+1][y+1];
glVertexPointer(3, GL_FLOAT, 0, vs);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
}
}
glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
glDisable(GL_POLYGON_OFFSET_FILL);
glDisableClientState(GL_VERTEX_ARRAY);
這是我使用的渲染邊界線是什麼:
// vxp is a data structure with vertex arrays that represent
// border lines
int i;
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnableClientState(GL_VERTEX_ARRAY);
for (i=0; i<vxp->nFeatures; i++)
{
glVertexPointer(3, GL_FLOAT, 0, vxp->pFeatures[i].pVerts);
glDrawArrays(GL_LINE_STRIP, 0, vxp->pFeatures[i].nVerts);
}
glDisableClientState(GL_VERTEX_ARRAY);
glDisable(GL_BLEND);
這些都是我使用的設置在之前渲染任何對象:
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glEnable(GL_DEPTH_TEST); /* enable depth testing; required for z-buffer */
glEnable(GL_CULL_FACE); /* enable polygon face culling */
glCullFace(GL_BACK);
glOrthof(-1.0f, 1.0f, -1.5f, 1.5f, -1.0f, 1.0f);
glFrustumf (-1.0, 1.0, -1.5, 1.5, -1.0, 1.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
因此,您已將各種邊界定義爲幾何,您正在做一些數學將其座標映射到地球表面,然後繪製爲GL_LINES(或線循環或其他線基元)?你有什麼鑲嵌的東西嗎? – Tommy 2011-05-13 11:13:29
@Tommy:是的。究竟。我將座標映射到地球表面並使用GL_LINE_STRIP繪製它們。我甚至不知道如何做鑲嵌... :-) – 2011-05-13 11:15:27
你能分享你的vxp數據嗎?我正在處理類似的問題,但對於Android平臺... – 2014-02-03 12:07:06