图形API之前的3D理论?[关闭]


19

我是一名软件工程师,我希望将自己的职业转向游戏开发。我正在使用C ++ / DirectX在2D上读书。当我进入3D时,我知道我想正确地做。例如,我对3d空间一无所知。因此,如果我仅学习API,我可能会知道,但是我不知道是否可以使用它开发交互式的mini 3d世界。我不会拥有一个带有最新着色器等的旋转板条箱来称自己为成功。我的数学技能取决于三角/线性代数,并且还在上大学。我知道还会有更多的数学运算。在选择OpenGL / Direct3D之前,我应该先阅读3D理论书籍还是其他建议?我只知道API不会教授3D游戏开发,也不希望之后迷路。我非常注重书籍,因此也可以提供建议。欢迎思想。谢谢!

Answers:


11

在另一个网站上解散您之后,我觉得有义务回答:)

我自己不是专业人士,但是我确实在大学里修过3D计算机图形学课程,这确实帮助我了解了最终使用的API。

在我发现特别有用的东西中:

  1. 转换矩阵及其工作方式,不仅用于对象转换,还用于查看转换,透视投影等。这可能是最重要的。
  2. 闪电和阴影背后的整个理论,特别是在您开始涉足着色器时特别有用。
  3. 纹理采样,映射。
  4. 颜色理论和混合技术也很有用。

我绝对认为,只要您具有数学背景,就可以从阅读一本或两本有关该主题的书中选出这些主题。


谢谢。你听说过这本书吗?我听说它教授3D理论,但同时也专注于3D软件栅格化。我想它可能仍然有助于了解正在发生的事情。 amazon.com/...
菲尔

1
@Phil栅格化很重要,但我不知道我是否会从一本名为“技巧”的书着手并向“高级” 3D开发人员致敬...听起来像是以后再读的东西。
橡树

我现在正在阅读第1卷,这是第2卷。我猜它会合并您,但我从未看过。我知道他说“高级”,但大多数人说不是。我将其保留在列表中:)
Phil

1
光线追踪也是另一个有趣的话题,但是对于实时游戏来说太慢了
Bryan Denny

@Byran +1提及了它。虽然它用于预先计算照明。
乔纳森·费斯霍夫

9

开始做。这样,您将发现自己不知道的东西。

然后挑选一本有关3D数学的好书。

我建议使用“用于图形和游戏开发的3D数学入门”

Fletcher Dunn和Ian Parberry撰写。(Wordware)

到目前为止,非常清楚-与C ++代码和所有代码有关。

了解点,向量,变换等的基础知识非常重要。

但这并不意味着您应该在潜入之前进行全部研究。


3

我在大学(1-2年前)参加了计算机图形学入门课程,并且该课程的网站仍在运行中。许多PowerPoint幻灯片仍然存在,您可能会发现它们有用和有用。主题涵盖2D和3D图形理论。


2

我和您的情况相似(尽管从技术上讲,我是在大学里隐隐约约地学习一些东西),而我的解决方案是查看此处“ 好3D数学理论书籍 ”问题中提到的几本书。如果您是学习书籍的人,那么这可能是个不错的选择。特别是如果您的大学实际上没有一门好的3D图形课程(我没有)。


2

嗯,大约15年前我不得不制作自己的第一个3D游戏时(这是我的工作,这有助于坚持不懈),除了高中数学外,我没有3D知识。如果您喜欢解决难题和阅读书籍,则可以自己解决问题,并在互联网上提供一些帮助(comp.graphics.algorithms常见问题解答)。我确实读过openGL圣经和http://www.amazon.com/Computer-Graphics-Principles-Practice-2nd/dp/0201848406(警告oldskool),因为它们会提供有效的背景信息。如果以这种方式执行此操作,则可能会以错误的方式开始,但是到某个时候,您将梦想或遇到更好的解决方案。如果您对2d的把握很好,则大多数3d问题都可以解决。除了一般的三角函数,毕达哥拉斯,矩阵和逆/转置(用于投影),点与叉积以及您将em用于什么之外,四元数(不必了解em,只需知道如何使用它们-您可以不用它们而做)是当今基本词汇的一部分),您可以解决遇到的大多数问题。随着您的发展,您会遇到更好的方法,但是那少数方法可以解决任何问题。最好的方法是为自己设定目标,并强迫自己达到目标。您遇到的问题是您需要学习的,嘿,您



1

我建议您注册游戏学院,特别是DirectX 9的图形编程课程。

如果您只想自学,则不需要参加交互式课程。

顺便说一句,还有一种选择,也可以以非常低的额外金额获得印刷书籍。他们是值得的。

几年前,我做了很多他们的课程,尽管有点老派,但我对它们的推荐程度不够高-加里·西蒙斯是一个非常好的人。


1

最重要的是,尝试制造东西。首先也是最重要的一步。否则,您将成为理论专家,而不是实践专家。

如果您认为自己确实对图形充满热情,那么可以想象一下,您将在一生中继续学习新材料。它并不像您可以在开始之前学习所需的一切。就是那样行不通。

随着您对3D图形数学的了解越来越多,您将意识到没有计算机图形数学,只有数学。学习如何自己教数学。然后,您将能够消化文献中介绍的新技术。

随着图形技术的发展,我们将借鉴不同的数学技术。今天流行的东西明天可能不会流行。

这里有些事情将保持不变。

现在,我发现《计算机科学的几何代数》中的材料非常有趣,并认为从它们为计算机图形学布局的方法开始可能会更好。 http://www.amazon.com/Geometric-Algebra-Computer-Science-Oriented/dp/0123694655

这本书以简单得多的方式解释了诸如四元数之类的东西,根据您的数学背景和兴趣,这可能对您有所帮助。


1

不要去阅读“计算机图形学”书籍。从线性代数开始-它为您需要的一切奠定了基础。麻省理工学院有一个很好的视频课程:http : //ocw.mit.edu/courses/mathematics/18-06-linear-algebra-spring-2005/

从那里开始,应该直接选择计算机图形学上的介绍性文字。华盛顿大学在线上有课程(虽然没有视频):http : //www.cs.washington.edu/education/courses/457/06au/lectures/

如果您不耐烦,可以从没有线性代数的图形课程开始,但是当我说它会再次咬住您时请相信我:)


1

如果您想了解传统软件渲染管道的工作原理(即使引入了可编程硬件管道,情况也没有太大变化),我绝对会推荐的一本书是吉姆·布林的《图形管道之旅》。

与其他一些建议不同,它并不是特别全面,但是可读性很强,我认为如果您刚刚开始使用3D,那么它是一个很好的介绍。它是由计算机图形学的奠基人之一吉姆·布林(Jim Blinn)撰写的,因此是从真正发明/发现这些技术的人的角度编写的。


1

我曾在我的大学担任过图形学课程的助教。我设置了课程提纲,并涵盖了软件光栅化和着色,Java3D,OpenGL等内容。此后的一段时间,我决定自己写一本ray-tracer用于自己的教学。这是一次令人难以置信的体验-使用帧缓冲区和putpixel(x,y,color)例程,在500行中,我有代码生成带有球体,三角形,每像素阴影,阴影等的图像。如果我必须重做这些课程的练习,我会坚持要求学生做射线追踪仪。在构建光栅化器时,这是一种容易陷入扫描线算法细节的方法,或者让您感觉正在使用3D API穿越黑匣子。

为了快速,稳定地访问图形沙箱,建议您编写自己的光线跟踪器。显然,这与生产实时3D图形中常用的内容相去甚远,但这是一种非常直观,紧凑的查看和学习理论的方法。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.