【发布时间】:2010-01-24 22:18:46
【问题描述】:
关注这个问题:Best approach for oldschool 2D zelda-like game
感谢之前的回复,并在http://insanitydesign.com/wp/projects/nehe-android-ports/ 的主要启发下,我开始为我的简单 2D 类似塞尔达的游戏项目构建一个简单的 Tile Generator。
我现在可以生成具有相同纹理图块的地图,使用 2 次 for(..) 叠瓦迭代来绘制水平和垂直图块,并让一些基本的 DPAD 键输入侦听器在 x 和 y 轴上滚动。
但现在我遇到了我的第一个性能问题,只有一个纹理和一个模型。
在尝试构建 10x10 地图时,滚动非常流畅。
尝试使用 50x50 时,情况会变得更糟,而使用 100x100 时,情况会变得不可接受。
有没有办法只告诉 OpenGL 渲染我的地图集的“可见”部分并忽略隐藏的图块?我对此完全陌生。
我正在使用
GLU.gluLookAt(gl, cameraPosX, cameraPosY, 10.0f,cameraPosX, cameraPosY, 0.0f, 0.0f, 1.0f, 0.0f);
设置相机和视角以获得 2D 风格的感觉。
有什么帮助吗? :)
for (int j = 0; j < 10; j++) {
for (int i = 0; i < 10; i++) {
gl.glPushMatrix(); // Sauvegarde la matrice sur le stack
//Bind the texture according to the set texture filter
gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[filter]);
//Set the face rotation
gl.glFrontFace(GL10.GL_CW);
//Enable texture state
gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
//Enable vertex state
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
//Point to our vertex buffer
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer);
//point to our texture buff
gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, textureBuffer);
//Draw the vertices as triangle strip
gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, vertices.length / 3);
//Disable the client state before leaving
gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
gl.glDisableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
gl.glTranslatef(1.0f, 0.0f, 0.0f); // on avance d'une tile
}
// on va commencer a dessiner la 2e ligne
gl.glPopMatrix(); // Rappelle la matrice sur le stack
gl.glTranslatef(0.0f, -1.0f, 0.0f);
}
【问题讨论】: