3DSoftRenderer
研究了好几天基本的图形学,对于光栅化的大致过程有点了解了,很感谢网上的很多大牛的无私奉献,我就写一下这几天的总结,希望也能对网络上的知识做出一点点点的贡献。
屏幕有什么特点,无非是一排排的像素点,每个像素点只能用来显示一种颜色而已,所以可以理解为是一个表示颜色的二维数组。
如何在二维屏幕上显示3D世界,其实就是利用几何知识把3D坐标投影到2D坐标上。一个3D模型有很多顶点,把每个顶点投影到2D坐标上,保持原有的顶点连线,就是一个3D网格。具体的图形变换都是使用矩阵乘法来做的(有时也使用四元数表示旋转),具体的做法我就不说了。。
我们看到的3D世界也是通过颜色来辨别的,颜色就是纹理、材质、光照等叠加计算来的,不管怎么算,还是一个颜色而已。
所以我们要做的工作很明确了,就是修改一个初始化为背景色的二维颜色数组,使每个元素有各种颜色。
如何把这个二维颜色数组显示到我们的显示器上看一下呢,不同的平台有不同的做法,可以查看系统的API来了解。还可以把数组输出到一张图片(可以使用bmp、ppm等简单格式),使用图片浏览器打开查看。还可以使用html5的canvas绘制出来,使用浏览器查看。总之思路很简单。
我用js写了个html5的:https://github.com/Anti-Magic/3DSoftRenderer
其中的Device.js维护了一个二维颜色数组,Draw.js负责把颜色数组绘制到canvas上。除了Draw.js文件外,其他文件都是与html无关的,可以很容易的改写到其他平台上。
3DSoftRenderer的更多相关文章
随机推荐
- IIS错误500.21
操作系统:win7,有.net2.0,.net4.0 网站4.5, 错误原因:IIS未注册4.0框架. 解决办法: %windir%\Microsoft.NET\Framework\v4.0.3031 ...
- python(7)–类的多态实现
第一步: 先定义三个类: class Animal: def __init__(self, name): self.name = name #这个方法的意思是,如果继承该类,就得自己写talk方法,如 ...
- 打印W图案
一:规律 二维图形的展示都可以使用二维数组来解决,W图形x轴0,1,2,1,0,1,2.....在0到2直接来回的徘徊 y轴是在一直递增........ 二:代码 @Test /** * 测试打印w图 ...
- 24小时学通Linux内核之如何处理输入输出操作
真的是悲喜交加呀,本来这个寒假早上8点都去练车,两个小时之后再来实验室陪伴Linux内核,但是今天教练说没名额考试了,好纠结,不过想想就可以睡懒觉了,哈哈,自从大三寒假以来还没睡过懒觉呢,现在也有更多 ...
- 蓝牙 MultipeerConnectivity
在iOS7中,引入了一个全新的框架——Multipeer Connectivity(多点连接). 利用Multipeer Connectivity框架,即使在没有连接到WiFi(WLAN)或移动网络( ...
- Android Studio 快捷方式
Alt+回车 导入包,自动修正 Ctrl+N 查找类 Ctrl+Shift+N 查找文件 Ctrl+Alt+L 格式化代码 Ctrl+Alt+O 优化导入的类和包 Alt+Insert 生成代码(如g ...
- centos6.5下逻辑卷操作
1.将两块独立磁盘分别分区 2.创建物理卷-pvcreate 3.创建卷组 4.创建逻辑卷 5.格式化逻辑卷 6.扩展逻辑卷 7.缩小逻辑卷
- GPU总结(1)
目录 1.为什么要引入GPU 2.CUDA环境的搭建--CUDA全称Compute Unified Device Architecture统一计算设备架构,CUDA是以后总将GPU作为数据并行计算设备 ...
- 企业SAAS的春天,将以手机应用的形式,即将到来
派尔科技吴春福 *本文是派尔为什么要投身企业移动应用的内部分享文章: *我没有仔细核查资料,仅代表个人看法,思路也是在整理过程,逻辑未必很完整,看官将就着看. 企业SAAS,概念起源是N年前,先行者也 ...
- ios开发入门篇(二):Objective-C的简单语法介绍
一:面向对象的思想 objective-c与C语言的编程思想不同,C语言是面向过程的编程,而objective-c则是面向对象的编程,所谓面向对象,我个人的理解,就是抽象.将具有一定共同点的实物抽象成 ...