3D软件渲染器入门
本系列中我们将使用C#、JavaScript、TypeScript三种语言进行编写,并配合Html5做在线演示。为了更好的了解现代3D图形学基础,我们使用CPU来完成3D渲染,让你对图形的认识更加深刻。
nivk
无业游民,快乐至上,开心为先,娱人娱己。
展开
-
[软件渲染器入门]一,编写相机、网格和设备对象的核心逻辑
我非常乐意通过一系列教程和大家分享如何建立所谓的”3D软件渲染引擎“。”软件渲染引擎“意味着我们将只使用CPU建立一个3D引擎,完全不使用GPU。(请不要忘记毁灭你的80386?)我将与你分享C#、TypeScript以及JavaScript三种版本的代码。翻译 2015-11-23 15:52:29 · 4223 阅读 · 1 评论 -
[软件渲染器入门]二,绘制线段和三角形来获得线框渲染效果
现在我们已经通过前面的教程编写相机、网格和设备对象的核心逻辑建立了3D引擎的核心,我们可以对渲染工作做一些增强了。下一步我们再连接点来绘制一些线条来组成一个线框渲染效果。翻译 2015-11-23 19:14:31 · 3204 阅读 · 0 评论 -
[软件渲染器入门]三,加载通过Blender扩展导出JSON格式的网格
3D建模有助于3D设计人员和开发人员之间的协作。设计人员可以利用其最喜欢的工具来构建场景或网格(3D Studio Max、Maya、Blender等……)。然后,他将作品导出为开发者可以加载的文件格式。开发者将最终将网格加载进实时3D引擎中。有很多种格式可以这么做。在我们的例子中,将使用Json格式。实际上,David Catuhe已经做了从Blender中导出.babylon后缀的Json格式文件导出器了。我们马上就可以看到如何解析该文件并显示在我们可爱的软件渲染引擎中了!翻译 2015-11-23 23:53:18 · 6219 阅读 · 2 评论 -
[软件渲染器入门]四,填充光栅化的三角形并使用深度缓冲
本章我们将讲解如何使用三角形光栅化算法来填充三角形。然后,我们将使用深度缓冲,以避免在后面的面跑到前面来的问题。翻译 2015-11-24 17:16:43 · 3458 阅读 · 0 评论 -
[软件渲染器入门]四-额外章节,使用技巧和并行处理来提高性能
由于我们的3D软件渲染引擎使用的是CPU运算,因此它将耗费大量的CPU处理时间。不过倒是有一个好消息,那就是CPU大多是多核心的。那么,我们可以想象一下使用并行处理来提高引擎性能。不过我们只能在C#中这么做,至于为什么Html5不可以,我将会稍后做出解释。我们在此篇章中可以学到一些简单的技巧,以此达到优化渲染性能的目的。而且实际上,我们也得到了从5 FPS提升到50 FPS的结果,这可是10倍的性能提升!翻译 2015-11-29 23:26:26 · 1903 阅读 · 0 评论 -
[软件渲染器入门]五-平面着色和高氏着色
这可能是整个系列中最棒的部分:如何处理光照!在之前,我们已经搞定了让每个面随机显示一种颜色。现在我们要进行改变,计算出光的角度,让每个面有更好的光照效果。第一种方法叫做平面着色。它使用面法线,用这个方法我们也会看到不同面的效果。但是高氏着色则会让我们更进一步,它使用顶点法线,然后每一个像素使用3个法线进行插值计算颜色。翻译 2016-02-28 17:40:05 · 3278 阅读 · 0 评论 -
[软件渲染器入门]六-应用纹理、背面剔除以及一些WebGL相关
下面是本系列的最后一个章节了。我们将看到如何从Blender中导出贴图和纹理坐标来使我们的网格应用纹理。如果你已经成功的了解了之前的教程,应用一些纹理对你来说应该是小菜一碟。主要概念依旧是在每个顶点间插补一些数据。在本章的第二部分中,我们将看到如何提高我们的渲染算法性能。为此,我们将使用背面剔除来使得只有我们能看到的部分被绘制。但是更进一步,我们会用最后的秘密武器:GPU。那么你将会明白为什么OpenGL/WebGL和DirectX这些技术对实时3D游戏非常重要。它们有助于利用GPU而不是CPU来渲染我们的翻译 2016-03-02 01:53:15 · 3610 阅读 · 0 评论