基本完成了自己的预定计划

这周都去忙我的那个入门级别的3d的东西了.最初的设想是想学习下图形学,用gdi做个可以支持透视投影,光照,材质,zbuffer的渲染engine.例子就做个有光照,材质的旋转的立方体.基本上实现完了.因为我的目的是为了学习图形学,所以代码尽量是写得简洁,练习下那些算法,所以基本上没什么错误处理(呵呵,学习得目的可以这么干,要是实际上就不能这么搞了).在学校里面没学过图形学.刚开始还是挺吃力得说,不过慢慢得就入门了.

先说说3d流水线:

物体(局部坐标系)->世界坐标系->相机坐标系->透视投影->投影到屏幕,刚开始比较迷惑得是投影面得选择.不知道应该取z=多少得平面,后来才弄明白了,找了篇论文讲opengl的那个矩阵是怎么推导的.觉得写的不错,有空翻译出来和大家共享.

后来就写了光照方面的代码.这里面有2个conecept光源类型和光的类型的差别.环境光,散射光,镜面反射光,发射光(物体本身就可以发光),是光的类型. 定向光源(无穷光源),点光源,聚光灯是光源类型.总的来说就是影响物体的颜色,实现的角度简单来说就是做rgb乘法.

材质就是线性插值了.是挺简单的概念.实现的时候就是根据纹理坐标,每个象素的取位图里面的数据,画到屏幕上.这个非常之慢,要算的东西太多了.不过我想最大的bottleneck应该是 逐象素的来设rgb值.实在是数据量大了点,所以实现出来的结果非常之慢,可能是没优化的原因.给添加了材质的物体实现光照基本上和不加材质的时候实现一样.不同的是需要先把物体的每个面看成是白色,然后进行光照处理,然后把处理后的结果和材质上每个象素的rgb做乘法,如果是gouraud模式的话,就还有个插值过程,计算量也是蛮大的.我看我还是要先优化下.不然这些肯定是做不了的.

zbuffer之类的就比较简单了.大意就是渲染的时候考虑下z的影响.是逐象素的画家算法.

后面还有一堆东西等着去看.不过我不打算再去用gdi来实现那些东西了.下一步看看mesa的代码吧.还有个人可以讨论.

 

放2张图作个记录.

画了4个立方体.

下面加四种灯光.全部打开,让它绕着y轴转.

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值