使用OpenGL创建平铺世界

时间:2010-02-06 00:10:06

标签: opengl 3d tiles textures quad

我打算用OpenGL创建一个平铺的世界,稍微旋转的瓷砖和房屋,世界上的建筑将由模型组成。 任何人都可以建议我应该使用什么投影(Orthogonal,Perspective),以及如何设置View矩阵(使用OpenGL)?

如果你无法想象我打算创造什么样的世界,请看看这个游戏: http://www.youtube.com/watch?v=i6eYtLjFu-Y&feature=PlayList&p=00E63EDCF757EADF&index=2

2 个答案:

答案 0 :(得分:2)

使用Orhtogonal vs Perspective投影完全是艺术风格的选择。你正在谈论的口袋妖怪认真是正交的 - 实际上,它是完全分层的2D精灵(不涉及3D)。

OpenGL没有VIEW矩阵。它有一个MODELVIEW矩阵和一个PROJECTION矩阵。对于口袋妖怪风格的关卡,我建议使用简单的glOrtho进行投影。

让我们假设您的世界处于XY空间(图块,相机和其他对象的坐标的形式为[x,y,0])。如果单个图块的大小为1,1,那么glOrtho(12,9,-10,10)之类的东西将是一个很好的投影矩阵(12宽,9高,Z = 0是地平面)。

对于MODELVIEW,您可以在绘制几何图形之前,先通过图块位置加载标识,glTranslate(),然后按照摄像机位置的负数加载glTranslate()。如果你想旋转相机,你可以通过两个Translate()s之间相机旋转的负(反向)来旋转()。最后,您最终得到以下矩阵链:

输出=投影×(CameraTranslation -1 ×CameraRotation -1 ×ModelLocation×ModelRotation)×输入

parens中的部分是MODELVIEW,“ -1 ”表示“反向”,它实际上对于平移是负的并且转置为旋转。

如果你想旋转你的模型,你通常首先要做的是(在第一个glTranslate()之前。

最后,我建议OpenGL论坛(www.opengl.org)或www.gamedev.net的OpenGL子论坛可能是提出这个问题的更好的地方: - )

答案 1 :(得分:0)

该视频游戏使用的投影对我来说是 Oblique 。有许多不同的预测,不仅仅是透视和正字法。请点击此处查看最常见的列表:http://en.wikipedia.org/wiki/File:Graphical_projection_comparison.png

你肯定想要透视,只围绕X轴固定旋转。大约45-60度或其他。如果您不关心自己设置投影代码,GLU库中的gluPerspective功能非常方便。 假设OpenGL 2.1:

glMatrixMode(GL_PROJECTION); //clip matrix
glLoadIdentity();
gluPerspective(90.0, width/height, 1.0, 20.0);
glMatrixMode(GL_MODELVIEW); //world/object matrix
glLoadIdentity();
glRotatef(45.0f, 1.0f, 0.0f, 0.0f);
/* render   */

gluPerspective的最后两个参数是到近和远剪裁平面的距离。它们的值取决于您用于环境的规模。