zoukankan      html  css  js  c++  java
  • 从0开发3D引擎(一):开篇

    介绍

    大家好,本系列带读者踏上Web 3D编程之旅~

    本系列是实战类型,从0开始带领读者写出“良好架构、良好扩展性、优秀的性能、最小功能集合(MVP)” 的3D引擎。

    本系列的素材来自我们的产品:Wonder-WebGL 3D引擎和编辑器 的整个开发过程。

    本系列是我正在写的书的预览版。详情请见:Wonder暂停开发,开始写书

    本系列与我的“用函数式编程,从0开发3D引擎和编辑器”系列博文的区别:

    • 本系列是它的重写版

    • 本系列是实战类型,而它是经验总结类型

    • 本系列只写引擎,而它既写引擎又写编辑器

    为什么本系列只写引擎?

    • 因为大部分人更关心引擎

    • 为了加快写作速度,省略需要较多篇幅的编辑器

    上一篇博文

    从0开发3D引擎:目录

    下一篇博文

    从0开发3D引擎(二):准备预备知识

    本系列特色

    1.完全从0开始,强调实战

    2.保持精简,只实现最小功能,重点强调架构扩展性能

    3.完全、彻底地使用函数式编程

    现在3D领域使用函数式编程的资料很少,主流还是使用面向对象。
    我以前也是用面向对象,不过自从我开始接触函数式编程,就拥抱了它。
    希望能通过本系列,向读者展示函数式编程的魅力,扩展读者的视野和思维。

    能给读者带来什么收益?

    1.手把手教读者如何从0开发3D引擎
    2.学习函数式编程及其在3D领域的应用
    3.学习3D编程中基础的功能实现,如纹理、光照、模型等
    4.学习引擎的设计和架构,如Data Oriented、多线程等

    读者如何学习本系列

    本系列从第三部分开始,会开始写程序,开发引擎。建议读者从这部分开始,不要按照文中给出的程序实现,自己再一行一行地重写一遍。因为这样效率低下,而且有可能会出错(虽然“程序实现”试图给出完整的代码,但仍然有可能遗漏了一些细节。这会导致读者如果自己照着写的话,自己写的程序可能会运行失败),所以建议读者阅读每篇文章,理解程序的实现,然后在文末查看该文的完整项目代码。

    本系列技术选型

    • 使用Reason语言(函数式编程语言,可编译为Javascript)

    Reason是在Ocaml语言的基础上修改而来,专门提供给前端开发者使用。

    Reason是函数式编程语言,使用Bucklescript编译器编译成javascript语言。

    在我看来,至少有两大优点:
    1.编译后的javascript优化得非常好,让我们能够高性能地使用函数式编程。
    2.强类型和类型推导,让我们既不用向Typescript那样定义很多类型(Reason会帮我们推导类型),又可以享受强类型约束的好处(编译时能检查更多的错误)。

    我们Wonder已经使用Reason两年的时间了,所有产品,包括前端后端,都用Reason语言写,非常好用。

    Reason的相关评价详见:
    如何评价 reasonml ? -> Wonder的回答
    如何评价 Facebook 推出的编程语言 Reason?

    • 使用WebGL 1.0作为底层API

    为了引擎能跑在移动端,我们选择WebGL 1.0而不是WebGL 2.0。

    引擎的特色

    • 函数式编程

    • 使用“函数式反应式编程”(FRP)实现异步

    • 多线程渲染

    • Data Oriented

    • 契约检查

    • 基于job的可扩展的渲染管道

    引擎支持的运行环境

    重点支持桌面端浏览器(引擎的多线程渲染等功能只能在桌面端开启):

    • Chrome
    • Firefox
    • 360 browser(v10.0及以上)
    • qq browser(v10.4及以上)

    也能够支持移动端浏览器:

    • 微信浏览器(安卓4.4及以上、ios 8及以上)

    内容规划

    本系列分成六个部分:

    第一部分:准备(已完成)

    主要内容:

    • 准备预备知识
    • 搭建开发环境
    • 搭建测试环境

    第二部分:基础(已完成)

    主要内容:

    • 学习函数式编程

    • 学习函数式反应式编程

    • 学习Reason

    第三部分:搭建雏形(已经开始写)

    主要内容:

    • 编写最小的3D程序

    • 从中提炼引擎

    • 改进引擎架构

    第四部分:增加功能(没有开始写)

    主要内容:

    • 增加基础功能

    • 加入Scene Graph

    第五部分:增强扩展性(没有开始写)

    主要内容:

    • 加入脚本组件

    • 加入自定义材质

    • 加入其它可能的扩展,如ui扩展等

    第六部分:应用(没有开始写)

    主要内容:

    • 通过引擎支持的扩展,加入实际应用需要的功能(如picking等)

    • 实现几个完整的3D应用

    推荐我发布的相关的精品资料

    如果读者想全面了解Web 3D的相关学习资料,推荐阅读分享收集的Web 3D学习资源

    本文中分享了我收集的Web 3D相关的博客、书籍、教程、demo等内容

    如果读者想要学习“敏捷开发+领域模型驱动+2D游戏开发”,推荐阅读炸弹人游戏开发系列

    本系列博文记录了炸弹人游戏迭代开发的过程。在开发的过程中,代码会不断重构,领域模型会不断演变,高层划分也会不断变化。

    如果读者想要学习“开发2D引擎”,推荐阅读提炼游戏引擎系列

    本系列记录了从炸弹人游戏中提炼2D游戏引擎YEngine2D雏形的实战过程,您可以通过本系列了解到引擎提炼的思想、引擎的设计以及引擎是如何从游戏中提炼的,学习引擎开发的知识。希望对您能有所帮助!

    如果读者想要学习“面向对象设计+前端架构”,推荐阅读前端的架构设计与演化实例

    本文介绍我在实际的前端项目中的架构设计,展示因为需求变化而导致架构变化的过程。
    全文分为三个阶段,分别对应三次需求的变化,给出了对应的架构设计。
    在第一个阶段中,我使用面向过程设计;在第二个阶段和在第三个阶段中,我使用面向对象设计。

    本文参考资料

    Wonder-WebGL 3D引擎和编辑器
    “用函数式编程,从0开发3D引擎和编辑器”系列博文

  • 相关阅读:
    D. Constructing the Array
    B. Navigation System
    B. Dreamoon Likes Sequences
    A. Linova and Kingdom
    G. Special Permutation
    B. Xenia and Colorful Gems
    Firetrucks Are Red
    java getInstance()的使用
    java 静态代理和动态代理
    java 类加载机制和反射机制
  • 原文地址:https://www.cnblogs.com/chaogex/p/12133853.html
Copyright © 2011-2022 走看看