哪里可以找到有关3D算法的信息?

时间:2013-01-22 07:31:33

标签: algorithm 3d game-physics

我有兴趣了解3D视频游戏开发,但我不确定从哪里开始。 我不再仅限于制作可由各种游戏制作者完成的游戏,而是对它的完成方式更感兴趣。 理想情况下,我想知道存储一般3D模型等的格式(坐标格式等)以及如何从某些角度在屏幕上表示3D数据的信息,例如一般的免费漫游3D视频游戏像Devil May Cry。 我已经看到了一些关于3D矩阵的链接,但我真的不明白它们是如何被使用的。任何初学者的帮助将不胜感激。

由于

2 个答案:

答案 0 :(得分:1)

基本上,第一个决定是使用OpenGL或DirectX。 我建议你使用OpenGL,因为它独立于平台,也可以用于移动设备。

对于OpenGL,这里有一些很好的教程可以帮助您入门:

http://www.opengl-tutorial.org/

答案 1 :(得分:1)

视频游戏开发是一个需要游戏理论,计算机科学,数学,物理和艺术知识的庞大领域。根据您想要专注的内容,有不同的起点。但是因为这是一个编程问题的网站,所以这里有一些关于编程部分的见解:


文件格式

资产(模型,纹理,声音)是使用专用的第三方工具(想想Gimp,Photoshop,Blender,3ds Max等)创建的,它们提供各种不同的导出格式。这些格式通常有一个共同点:它们针对应用程序之间的简单通信进行了优化

视频游戏具有高性能要求,并且在游戏过程中必须始终加载和卸载资源。所以内容必须采用紧凑且加载速度的格式。通常,第三方格式不符合您在游戏项目中的特定要求。为获得最佳性能,您需要考虑开发自己的格式。

资产和常见第三方格式的示例:

  • 纹理:PNG,JPG,BMP,TGA
  • 3D模型:OBJ,3DS,COLLADA
  • 声音:WAV,MP3

其他例子

Direct3D中的纹理

在我的游戏项目中,我使用导入器将纹理从上述格式之一转换为DDS文件。这不是我自己开发的格式,但仍然是使用Direct3D(图形API)加载的最快格式之一。

静态3D模型

Wavefront OBJ文件格式是一种非常易于理解的基于文本的格式。大多数3D建模应用程序都支持它但由于它是基于文本的,因此文件比等效的二进制文件大得多。它们还需要大量昂贵的解析和处理。所以我开发了一个导入器,将OBJ模型转换为我的自定义高性能二进制格式。

Wave声音文件

WAV是一种非常常见的声音文件格式。此外,它非常适合在游戏中使用它。因此,在这种情况下不需要自定义格式。

3D图形

将3D场景每秒至少渲染30次至平均屏幕分辨率需要大量计算。为此目的GPU已经建成。虽然可以使用非常低级的语言为GPU编写任何类型的程序,但大多数开发人员使用Direct3DOpenGL之类的抽象。这些API在限制与GPU通信的方式的同时,大大简化了与图形相关的任务。

使用API​​渲染

到目前为止我只使用过Direct3D,但其中一些也适用于OpenGL。

正如我所说,GPU可以编程。 Direct3D和OpenGL都有自己的GPU编程语言,a.k.a。着色语言HLSL(Direct3D)和GLSL。用其中一种语言编写的程序称为 Shader

在渲染3D模型之前,必须为图形设备做好渲染准备。这是通过将着色器和其他效果状态绑定到设备来完成的。 (所有这些都是使用API​​完成的。)

3D模型通常表示为一组顶点。例如,矩形的4个顶点,立方体的8个顶点等。这些顶点由多个组件组成。在这种情况下,绝对最小值是位置组件(3个浮点数表示3D空间中的X,Y和Z偏移)。而且,一个位置只是一个无限小的点。因此,我们还需要定义点如何连接到曲面。

当定义顶点和三角形时,可以将它们写入GPU的内存。如果一切都设置正确,我们可以通过API发出Draw Call。然后GPU执行着色器处理所有输入数据。在最后一步中,渲染的三角形被写入定义的输出(例如,屏幕)。

3D图形中的矩阵

正如我之前所说,3D网格由顶点和3D空间中的位置组成。这些位置都嵌入在称为对象空间的坐标系中。

为了将物体放置在世界中,移动,旋转或缩放它,必须转换这些位置。换句话说,它们必须嵌入另一个坐标系中,在这种情况下称为世界空间

进行此转换的最简单,最有效的方法是矩阵乘法:从平移,旋转和缩放量开始构造4x4矩阵。然后将该矩阵与每个顶点相乘。 (背后的数学很有意思,但不在这个问题的范围内。)

除了对象和世界空间外,还有视图空间('摄像机'的坐标系),剪辑空间屏幕空间切线空间(在对象的表面上)。矢量必须在这些坐标系之间进行很多转换。所以你看,为什么矩阵在3D图形中如此重要。


如何从这里继续

找到您认为有趣的主题并开始使用Google搜索。我想我给了你很多关键词,我希望能让你对你提到的主题有所了解。

StackExchange框架中还有一个Game Development Site,可能更适合这类问题。 top voted questions始终是任何SE网站上的好读物。