调整了架构, 尝试实现了一个光源模块, 发现比我想象的复杂很多. Orz...
是时候弃坑, 再挖一个坑往里跳了. Orz...
如果只看片面, 看着还有模有样的. 2333...
我有一个疑问: 我把光源着色直接放在片段着色之后, 也就是说, 凡是经过片段着色的像素都会进入光源着色, 对于点光源/聚光灯这种光照有死角的光源, 怎么处理遮挡问题呢? 难不成每个像素都要光线追踪? 这个问题似乎跟环境光遮蔽有几分相似?...
-------------------------分割线------------------------- |
---|
. 四年前接触到《DOOM启示录》这本书,当时看得热血沸腾,主角约翰.卡马克凭一己之力,把PC游戏行业从2D时代推进到3D时代,比尔盖茨都被迫为他的游戏拍摄广告视频.
在那个年代,没有游戏引擎,没有3D图形接口,甚至连独立显卡都没有.
那么问题来了,3D游戏是怎么渲染出来的?
现在来回答这个问题很简单,3D游戏由3D游戏引擎制作,3D游戏图形引擎由3D图形接口实现(OpenGL,DirectX3D,Vulan等等).
那这些图形接口是怎么被实现的?
这个问题也很容易回答,用显卡驱动提供的接口.
但是,在那个没有独立显卡,没有显卡驱动,OpenGL/DX通通都没有的年代,你能操控的就只有2D屏幕上的像素,3D游戏到底是怎么被渲染的呢?
在当时,我记住了一句不知道从哪里看到的文字——"只要给我一个像素,我就可以写出3D引擎"
我似懂非懂的思考这句话,感觉很厉害的样子,然后就没有然后了...
. 一直到两年前,我看到一位大神用GDI实现了一个3D光栅化渲染器,我突然明白了那句话的意思——只要能操控屏幕像素的颜色,就可以写出3D引擎.虽然话有吹牛逼的成分,但并不影响合理的理解它.当时内心就只有无尽的崇拜和看不到尽头的技术难点.
. 直到今天,我耗费了两个周末尝试了一次,虽然实现细节惨不忍睹,功能还有些Bug,但凑合着看还行.
说了这么多,我只想说拖延症害死人呐.
渲染效果
目前只能固定90°视野,等宽高分辨率,透视校正有空再补上.