19 勤奋happyfire

尚未进行身份认证

我要认证

在信息时代客观障碍已不复存在所谓障碍都是主观上的如果你想研发什么新的技术你不需要几百万美元的资金你只需要在冰箱里放满比萨和可乐再有一台便宜的计算机和与之献身的决心你即可拥有任何你想拥有的编程境界- John Carmack

等级
TA的排名 3k+

Gamma Correction & sRGB texture

文章目录显示器gamma值的由来gamma correctionsRGB texture参考资料显示器gamma值的由来gamma correctionsRGB texture参考资料Gamma-Correction

2020-06-10 20:55:24

法线贴图技术原理与实践

本文讲述了法线贴图技术的原理,切线空间的概念,切线空间和世界空间的转换,计算顶点切线的方法,并给出了在切线空间和世界空间使用法线贴图进行光照的shader例子。

2020-06-09 19:00:44

从零开始手撸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

从零开始手撸WebGL3D引擎9:Scene & Transform

文章目录引言将物体组织成场景一个场景是一棵N叉树场景不止是一棵树从简单开始SceneNode本地矩阵计算更新世界矩阵获取世界坐标和旋转对象-组件和ECS怀念一下C++下一篇引言相比于实现很多花哨的图形效果,写引擎需要很多很扎实的东西。比如说场景和变换就是其中之一,基础中的基础。实现场景和变换的最初的动机,是我们需要在世界中移动旋转和缩放物体,物体之间需要有层级关系,可以将A放到B的上面随着B一起运动。而在这背后是矩阵和四元数的数学。我们使用四元数保存物体的方位朝向,并且可以让物体绕任意轴旋转,可以让物体

2020-05-30 19:58:56

谈一谈3D编程中的矩阵

行主列主,右乘左乘,空间变换,法线变换,shader中矩阵的使用,打好基础才能写好shader

2020-05-22 20:53:33

Unity Cg/HLSL Shader中向量和矩阵的构造方式

目录向量的构造向量使用同类型的构造器构造CG(不是所有的HLSL版本)单值构造向量使用低维向量构造高维向量CG(不是所有的HLSL版本)高维向量转换到低维向量矩阵的构造使用数值构造float3x3可以从三个向量构造从float4x4截取出float3x3参考资料向量的构造向量使用同类型的构造器构造float2 a = float2(1.0, 2.0);float3 b = float3(-1.0, 0.0, 0.0);float4 c = float4(0.0, 0.0, 0.0, 1.0);

2020-05-13 19:06:42

从零开始手撸WebGL3D引擎8:里程碑3-一个多光源场景

目前状态暂停了一段时间后,本周又搞了几天,实现了基于多pass的多光源前向渲染,加上之前实现的基本的scene和transform,勉强可以打个分支了,暂且算作里程碑3:simple scene。虽然代码里面还有很多TODO,但勉强可以看些效果了。先上个视频: undefined 基本功能目前实现了一个简单的场景和基于组件的场景节点,支持Camera, Light 和 Mesh No

2020-05-10 16:11:27

引擎开发随笔之OpenGL Shader的封装思考

在进行mini3d.js这个开源小项目的过程中,越来越体会到一个引擎的复杂性,从技术DEMO到可以完成实际工作的引擎,完全不是一个数量级的复杂度。因为工作量太大,且想做的事情太多,mini3d.js的开发笔记一直是很滞后的,当然主要原因还是开发mini3d.js对我来说已经是一个很大的工程了。为了防止时间长了忘了很多东西,以及记录一些暂时没法去做的事情,特别用随笔的形式简单记录一下,想到哪儿记到哪...

2020-04-16 13:56:43

从零开始手撸WebGL3D引擎7:载入.obj模型以及顶点法线的计算

载入.obj格式模型.obj是文本格式的,相对比较好解析,而且可以查看,所以先暂时只支持这个格式。当然这个格式里面包含的东西不仅仅是模型数据,其实还有物体的概念,以及材质的关联。由于只是把它作为模型文件使用,所以忽略了材质的关联。材质会采用自己定义的材质,然后使用到模型上。其实这个地方没什么好说的,主要解决的问题是顶点法线的计算。顶点法线计算的时机载入.obj格式的模型时,发现有的模型没有提...

2020-02-24 14:38:36

从零开始手撸WebGL3D引擎6:里程碑2,目前状态和展望

最近做了很多零碎的工作,归拢了一下作为里程碑2。先上截图:这是一个脚本生成的example页面,以后所有的例子可以从这个页面进入,这样就可以查看之前的示例,也方便重构代码之后回溯。这个页面我也放到了github pages上:https://happyfire.github.io/mini3d.js/examples/(但是我这儿有时候打开不了)目前,mini3d.js仍然是一个很简单的框架...

2020-02-22 20:14:00

顶点法线计算的几种方式

首先,顶点法线都是从面法线加权平均计算得到。所以有两个维度,一是哪些面参与计算,二是权重如何计算。一 哪些面参与计算如果建模工具导出了光滑组,那么方案一是直接使用光滑组信息,属于同一个光滑组的面参与计算。方案二是同时使用光滑组信息以及面的夹角的阈值。方案三是只使用面的夹角阈值。二 权重如何计算方案一是用三角形面积作为权重方案二是用面的夹角作为权重方案三是同时使用面积和夹角作为权重...

2020-02-07 20:43:25

关于四元数的一些误解和问题

(先简单记录一下结论,有时间再完善)四元数可以避免gimbal lock理论上如果只使用四元数,不会有万向锁的问题。但实际上很多时候,还是在使用欧拉角,然后把欧拉角转成四元数,最后四元数再被转换成矩阵,合并到最终的Model2World变换矩阵中。这样并不能避免gimbal lock。因为你操作的旋转还是一系列绕独立轴的旋转的组合,你用欧拉角+矩阵会遇到gimbal lock (证明方法是...

2020-02-06 20:33:33

从零开始手撸WebGL3D引擎5:Shader的封装

上一篇之后停了好久没写,但其实mini3d.js一直在进展,目前的内容够写很多篇了,但这样欠下的债就太多了。我开始思考我写这些文章的初衷,是对这个过程的记录以及思考的总结,而不是写WebGL教程。教程的问题是如果讲得很细非常花篇章,而讲得很简略又没有用处。所以本篇开始减少代码细节的描述,只重点讨论技术原理和设计思路。并且每一组文章都要紧扣着当前讨论的里程碑目标。本篇对应代码请参考:mini3d....

2020-02-01 22:56:20

从零开始手撸WebGL3D引擎4:Mesh的封装

本篇讲述mini3d.js对静态模型的封装,目前支持三角形列,使用或不使用索引,暂不支持子模型。涉及到的类有Mesh, VertexBuffer, IndexBuffer, VertexFormat,以及预定义顶点语义VertexSemantic。总体结构一个Mesh由一个VertexBuffer和零或一个IndexBuffer构成。模型所有的顶点的属性数据采用交错数组的方式存放在Verte...

2020-01-12 15:03:41

从零开始手撸WebGL3D引擎3:基本渲染流程介绍

写在前面虽然一个渲染框架可能很复杂,但是如果我们一开始就把事情想的很复杂往往难以下手。另一方面,现在有很多开源引擎,你直接去看也会感觉难以入手。因为复杂性是由于需求而不断增加的,甚至有的复杂性是因为历史原因。本系列文章的初衷,是记录一个可用的,简单的WebGL渲染框架的发展过程,在这个过程中加深对WebGL和图形技术的理解,并且通过实践让对知识的理解不再浮于表面。也许mini3d.js以后会变的...

2020-01-10 21:04:06

从零开始手撸WebGL3D引擎2:WebGL和3D编程基础概念

我们在第一篇里面浏览了一下WebGL的参考卡片,也列出了一些WebGL的功能点,但是对于没有接触过3D编程的人来说,这些东西很难理解并形成一个统一的认识。所以这篇我就以WebGL为参考平台谈谈3D编程的一些基础概念。3D坐标系变换正常来说,人们学习新东西都会从已有的知识出发,对于3D编程,在屏幕上画出3D图形,如果有2D图形API使用的基础,就会想着从2D编程的经验出发。比如对于2D编程,都是...

2020-01-09 17:01:32

从零开始手撸WebGL3D引擎1: 搭建项目框架

如上文所说,我希望这个基于WebGL的框架是一个独立的库,可以像一个普通的js库那样被引用,但是开发的时候又需要根据需求拆分成很多js文件,那么就涉及到一个打包问题。且这一次我想使用ES6的模块系统和ES6的语法,那么rollup.js都可以做到,好吧就他吧。既然使用js,我们就用npm初始化了一个模块:mini3d.js,需要说明的是,目前暂时没有将mini3d.js注册到npm,也许以后会,...

2020-01-08 17:47:43

从零开始手撸WebGL3D引擎0:开始探险之旅

纸上得来终觉浅,绝知此事要躬行 ---- 陆游

2020-01-06 19:45:52

打包Javascript 游戏引擎更好的选择之rollup.js

国内的基于Javascript技术栈的H5游戏引擎一般都使用gulp+browseify构建,比如cocos creator和Laya,最后构建出一个或多个引擎js文件,由于引擎文件很大,他们一般都提供了引擎裁剪功能。之前我觉得做到这样也就可以了,直到我研究了一下three.js的构建系统。three.js使用的是rollup,大概了解一下:http://rollupjs.org/guide/...

2019-09-26 23:03:50

Mac系统移动npm的全局目录,解决安装权限问题

Mac系统安装node.js后自带的npm被安装到usr/local/下面,这样执行npm install时经常有权限问题。虽然使用sudo可以安装,但是当使用npx等工具时还是会有问题。所以最好还是将global目录移动。查看当前npm全局安装位置$ npm config get prefix/usr/local在用户目录下建立一个新的目录,并设置为npm全局的prefixmkdi...

2019-09-23 14:55:59

查看更多

CSDN身份
  • 博客专家
勋章 我的勋章
  • GitHub
    GitHub
    绑定GitHub第三方账户获取
  • 签到新秀
    签到新秀
    累计签到获取,不积跬步,无以至千里,继续坚持!
  • 技术圈认证(专家版)
    技术圈认证(专家版)
    博客专家完成年度认证,即可获得
  • 新人勋章
    新人勋章
    用户发布第一条blink获赞超过3个即可获得
  • 阅读者勋章Lv2
    阅读者勋章Lv2
    授予在CSDN APP累计阅读博文达到7天的你,是你的坚持与努力,使你超越了昨天的自己。
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv2
    勤写标兵Lv2
    授予每个自然周发布4篇到6篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。
  • 学习力
    学习力
    《原力计划【第二季】》第一期主题勋章 ,第一期活动已经结束啦,小伙伴们可以去参加第二期打卡挑战活动获取更多勋章哦。