
从零开始手撸webGL3D引擎
文章平均质量分 86
如何掌握WebGL/OpenGL的使用,如何弄懂游戏引擎背后的图形学概念和原理,让我们从手撸一个引擎开始
n5
在信息时代客观障碍已不复存在所谓障碍都是主观上的如果你想研发什么新的技术你不需要几百万美元的资金你只需要在冰箱里放满比萨和可乐再有一台便宜的计算机和与之献身的决心你即可拥有任何你想拥有的编程境界- John Carmack
展开
-
引擎开发随笔之资源导入
曾在十多年前看到一个大佬说,游戏引擎的核心就是资源管理。确实,游戏引擎必须要能管理好各种资源,而且不论是运行时资源还是项目工作流中的资源。今天来聊一聊资源导入,这个经常被忽略的一个引擎功能。以前我们用自研引擎做游戏几乎都会用到自定义的一些资源格式,比如模型文件格式什么的。这种自定义格式的好处是匹配自己的需求,可以根据需求优化,这是通用格式无法做到的。这种自定义资源,一般会开发专用的转换工具,将通用格式的资源转换成自定义格式的资源,并且保存在项目中。除此之外,游戏还需要对一些资源进行某种处理,比如图片如果原创 2020-12-26 15:04:05 · 561 阅读 · 2 评论 -
从零开始手撸WebGL3D引擎11: PostProcessing框架(里程碑5了)
文章目录项目状态PostProcessing基本原理框架设计目标框架结构PostProcessingChain的主要成员PostProcessing材质多pass后期效果举例:PostEffectBloom需要完善的地方下期预告项目状态本系列文章停更了好几个月了,这期间也是有很多事情,不过这个项目(mini3d.js)肯定是不会放弃的,只会不断的进化。最近几个月主要在深度研究Unity,以渲染系统为主,后期可能会出一系列文章,Unity自身一直在进化,但是底层的那些技术并没有发展特别快,结合Unity的原创 2020-10-19 14:26:00 · 1485 阅读 · 0 评论 -
从零开始手撸WebGL3D引擎10: 材质,前向渲染以及里程碑4
文章目录前言材质封装多个Pass创建Shader创建pass并添加到材质shader代码写在哪儿System UniformsCustom Uniforms渲染pass引擎提供的材质前向渲染scene.render()renderer.render()传入参数计算system uniform灯光规则如何叠加多个pass的光照非光照pass里程碑4Next前言本篇总结一下里程碑3到4阶段的材质和前向渲染的实现。本部分仍然处于早期,为了看到效果,很多地方只有思路没有实现,代码里有很多TODO。尽管很不完善,原创 2020-06-04 00:57:49 · 1076 阅读 · 2 评论 -
从零开始手撸WebGL3D引擎9:Scene & Transform
文章目录引言将物体组织成场景一个场景是一棵N叉树场景不止是一棵树从简单开始SceneNode本地矩阵计算更新世界矩阵获取世界坐标和旋转对象-组件和ECS怀念一下C++下一篇引言相比于实现很多花哨的图形效果,写引擎需要很多很扎实的东西。比如说场景和变换就是其中之一,基础中的基础。实现场景和变换的最初的动机,是我们需要在世界中移动旋转和缩放物体,物体之间需要有层级关系,可以将A放到B的上面随着B一起运动。而在这背后是矩阵和四元数的数学。我们使用四元数保存物体的方位朝向,并且可以让物体绕任意轴旋转,可以让物体原创 2020-05-30 19:58:56 · 743 阅读 · 0 评论 -
从零开始手撸WebGL3D引擎8:里程碑3-一个多光源场景
目前状态暂停了一段时间后,本周又搞了几天,实现了基于多pass的多光源前向渲染,加上之前实现的基本的scene和transform,勉强可以打个分支了,暂且算作里程碑3:simple scene。虽然代码里面还有很多TODO,但勉强可以看些效果了。先上个视频: undefined 基本功能目前实现了一个简单的场景和基于组件的场景节点,支持Camera, Light 和 Mesh No原创 2020-05-10 16:11:27 · 901 阅读 · 2 评论 -
引擎开发随笔之OpenGL Shader的封装思考
在进行mini3d.js这个开源小项目的过程中,越来越体会到一个引擎的复杂性,从技术DEMO到可以完成实际工作的引擎,完全不是一个数量级的复杂度。因为工作量太大,且想做的事情太多,mini3d.js的开发笔记一直是很滞后的,当然主要原因还是开发mini3d.js对我来说已经是一个很大的工程了。为了防止时间长了忘了很多东西,以及记录一些暂时没法去做的事情,特别用随笔的形式简单记录一下,想到哪儿记到哪...原创 2020-04-16 13:56:43 · 557 阅读 · 0 评论 -
从零开始手撸WebGL3D引擎7:载入.obj模型以及顶点法线的计算
载入.obj格式模型.obj是文本格式的,相对比较好解析,而且可以查看,所以先暂时只支持这个格式。当然这个格式里面包含的东西不仅仅是模型数据,其实还有物体的概念,以及材质的关联。由于只是把它作为模型文件使用,所以忽略了材质的关联。材质会采用自己定义的材质,然后使用到模型上。其实这个地方没什么好说的,主要解决的问题是顶点法线的计算。顶点法线计算的时机载入.obj格式的模型时,发现有的模型没有提...原创 2020-02-24 14:38:36 · 2012 阅读 · 0 评论 -
从零开始手撸WebGL3D引擎6:里程碑2,目前状态和展望
最近做了很多零碎的工作,归拢了一下作为里程碑2。先上截图:这是一个脚本生成的example页面,以后所有的例子可以从这个页面进入,这样就可以查看之前的示例,也方便重构代码之后回溯。这个页面我也放到了github pages上:https://happyfire.github.io/mini3d.js/examples/(但是我这儿有时候打开不了)目前,mini3d.js仍然是一个很简单的框架...原创 2020-02-22 20:14:00 · 850 阅读 · 0 评论 -
从零开始手撸WebGL3D引擎5:Shader的封装
上一篇之后停了好久没写,但其实mini3d.js一直在进展,目前的内容够写很多篇了,但这样欠下的债就太多了。我开始思考我写这些文章的初衷,是对这个过程的记录以及思考的总结,而不是写WebGL教程。教程的问题是如果讲得很细非常花篇章,而讲得很简略又没有用处。所以本篇开始减少代码细节的描述,只重点讨论技术原理和设计思路。并且每一组文章都要紧扣着当前讨论的里程碑目标。本篇对应代码请参考:mini3d....原创 2020-02-01 22:56:20 · 978 阅读 · 0 评论 -
从零开始手撸WebGL3D引擎4:Mesh的封装
本篇讲述mini3d.js对静态模型的封装,目前支持三角形列,使用或不使用索引,暂不支持子模型。涉及到的类有Mesh, VertexBuffer, IndexBuffer, VertexFormat,以及预定义顶点语义VertexSemantic。总体结构一个Mesh由一个VertexBuffer和零或一个IndexBuffer构成。模型所有的顶点的属性数据采用交错数组的方式存放在Verte...原创 2020-01-12 15:03:41 · 1268 阅读 · 0 评论 -
从零开始手撸WebGL3D引擎3:基本渲染流程介绍
写在前面虽然一个渲染框架可能很复杂,但是如果我们一开始就把事情想的很复杂往往难以下手。另一方面,现在有很多开源引擎,你直接去看也会感觉难以入手。因为复杂性是由于需求而不断增加的,甚至有的复杂性是因为历史原因。本系列文章的初衷,是记录一个可用的,简单的WebGL渲染框架的发展过程,在这个过程中加深对WebGL和图形技术的理解,并且通过实践让对知识的理解不再浮于表面。也许mini3d.js以后会变的...原创 2020-01-10 21:04:06 · 3017 阅读 · 0 评论 -
从零开始手撸WebGL3D引擎2:WebGL和3D编程基础概念
我们在第一篇里面浏览了一下WebGL的参考卡片,也列出了一些WebGL的功能点,但是对于没有接触过3D编程的人来说,这些东西很难理解并形成一个统一的认识。所以这篇我就以WebGL为参考平台谈谈3D编程的一些基础概念。3D坐标系变换正常来说,人们学习新东西都会从已有的知识出发,对于3D编程,在屏幕上画出3D图形,如果有2D图形API使用的基础,就会想着从2D编程的经验出发。比如对于2D编程,都是...原创 2020-01-09 17:01:32 · 3328 阅读 · 1 评论 -
从零开始手撸WebGL3D引擎1: 搭建项目框架
如上文所说,我希望这个基于WebGL的框架是一个独立的库,可以像一个普通的js库那样被引用,但是开发的时候又需要根据需求拆分成很多js文件,那么就涉及到一个打包问题。且这一次我想使用ES6的模块系统和ES6的语法,那么rollup.js都可以做到,好吧就他吧。既然使用js,我们就用npm初始化了一个模块:mini3d.js,需要说明的是,目前暂时没有将mini3d.js注册到npm,也许以后会,...原创 2020-01-08 17:47:43 · 1783 阅读 · 0 评论 -
从零开始手撸WebGL3D引擎0:开始探险之旅
纸上得来终觉浅,绝知此事要躬行 ---- 陆游原创 2020-01-06 19:45:52 · 1759 阅读 · 1 评论