使用OpenGL创建平铺世界

问题描述 投票:2回答:2

我计划用OpenGL创建一个平铺的世界,其中稍微旋转的瓷砖和房屋以及世界上的建筑物将由模型构成。有人可以建议我应该使用哪种投影方式(正交,透视),以及如何设置视图矩阵(使用OpenGL)?

[如果您不知道我打算创造什么样的世界,请看以下游戏:http://www.youtube.com/watch?v=i6eYtLjFu-Y&feature=PlayList&p=00E63EDCF757EADF&index=2

opengl 3d textures tiles
2个回答
2
投票

使用“正交与透视”投影完全是一种艺术风格的选择。您正在谈论的Pokemon严重问题是正交的-实际上,它是完全分层的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()之间的相机旋转的负值(反向)来glRotate()。最后,您将获得以下矩阵链:

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

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

如果您也想旋转模型,通常首先要这样做(在第一个glTranslate()之前。

最后,我建议使用OpenGL论坛(www.opengl.org)或www.gamedev.net的OpenGL子论坛可能是一个更好的问题:-)


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的最后两个参数是到近和远剪切平面的距离。它们的值取决于您使用的环境规模。

© www.soinside.com 2019 - 2024. All rights reserved.