我是3D游戏编程的新手,现在正在Windows上研究DirectX和OpenGL。 但我想出了一个地形编辑器,但我无法在网上获得任何开放的教程或想法。
是否有一个很好的教程或开源代码来学习这个?
简单的一个很好,我只是想知道如何提升或降低地形,或者在地图上放一棵树,就像下面的视频一样。
答案 0 :(得分:6)
首先我想说的是,如果你没有在OpenGL和DirectX之间选择,那么这样做是个好主意。 我选择使用OpenGL,因为OpenGL是跨平台的,适用于Windows,Linux,Solaris,Mac,智能手机等.DirectX仅支持Windows机器。
我不能给你一个教程或开源代码,因为这有点大,即使只是一个“简单的地形编辑器”,这仍然是一个非常复杂的事情。 虽然,我能给你的是你需要了解和阅读的一些要点,如果你知道这些,那么你就可以创建一个“地形编辑器”。
您需要能够做的事。
A VBO or Vertex Buffer Object是一种将顶点数据(位置,法线,纹理坐标,颜色等)上传到GPU本身的方法,这样可以实现真正快速的渲染,这也是目前渲染的最佳方式。 请注意,这是一个OpenGL功能,但DirectX也可能具有这样的功能。
Shaders用于着色/着色所有基元的顶点和片段。 OpenGL使用GLSL,其中DirectX使用HLSL,它们都非常相似。
多纹理基本上是绑定多个纹理的位置,然后通过着色器计算用于当前顶点/片段的纹理。 通过这种方式,您将能够实现您在视频中看到的内容。
拾取是从相机(3D空间)或鼠标(2D屏幕空间)“拍摄”光线的过程,然后每次光线撞击/碰撞某些东西将被返回给用户。在这种情况下,您可以使用鼠标(2D屏幕空间)创建拾取光线,然后在光线撞击的地形上,即我们想要更改地形的点。
如果您对Picking一无所知然后尝试谷歌搜索,我发现很难找到与3D相关的好结果,所以如果你想要你可以阅读我前一段时间在Stack上发布的问题溢出(click here to see the post),帖子涵盖3D相机拣选和2D屏幕空间拣选,还有代码,我也将我的最终代码添加到帖子本身。
如果你结合所有这些东西,你将能够创建一个“地形编辑器”。
我解释过的一些事情可能与OpenGL有关,但DirectX确实可以执行相同类型的事情。