研究了好几天基本的图形学,对于光栅化的大致过程有点了解了,很感谢网上的很多大牛的无私奉献,我就写一下这几天的总结,希望也能对网络上的知识做出一点点点的贡献。

屏幕有什么特点,无非是一排排的像素点,每个像素点只能用来显示一种颜色而已,所以可以理解为是一个表示颜色的二维数组。

如何在二维屏幕上显示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的更多相关文章

随机推荐

  1. 笔记——js 数组

    JS阅读笔记--数组[Array] 最近在看zepto源码,里面用到了很多基础知识,借此机会又把基础知识复习和整理了一遍,算是温故而知新吧.先从引用类型Array写起吧 1. length属性 代码: ...

  2. 【分割圆】Uva 10213 - How Many Pieces of Land ?

    一个椭圆上有N个点,将这n个点两两相连,问最多能将这个椭圆分成多少片. 理清思路,慢慢推. 首先我们要想到欧拉公式:V+E-F=2 其中V为图上的顶点数,E为边数,F为平面数. 计算时的可以枚举点,从 ...

  3. 【转】istringstream、ostringstream、stringstream 类介绍 .

    http://www.cnblogs.com/gamesky/archive/2013/01/09/2852356.html 好吧,懒死我算了

  4. PS基础学习 1---基本工具

    1,选框工具: 选择以后对选框中的内容进行修改 ① Shift + 选框 为正方形 ② 选中后鼠标放在选框中对选择范围进行拖动 ③ 移动工具可以拉着选框中的内容移动 ④ ctrl+D取消选框 ⑤单行选 ...

  5. Tomcat - 持久化 Session

    Session 是保存在内存中的,如果服务器重启.宕机的话,Session 就会丢失.有时候,我们需要对 Session 持久化以应对意外的情况发生.例如,客户端与服务器在交互过程中,可能因为 Ses ...

  6. HTTP - Session 机制

    HTTP 是种无状态的协议,即使用 HTTP 协议时,每次发送请求都会产生对应的新响应,协议本身不会保留之前一切的请求或响应报文的信息.这是为了更快地处理大量事务,确保协议的可伸缩性,而特意把 HTT ...

  7. SQL Server 2008下日志清理方法

    1.将数据库设置成 简单 模式 选择要收缩的数据库,点右键 属性->选项,选择 简单模式 2.选择任务->收缩->文件 3.选择日志

  8. Android 扫描蓝牙设备

    Android扫描蓝牙设备是个异步的过程,核心的步骤为:调用bluetoothAdapter的startDiscovery()进行设备扫描,扫描的结果通过广播接收处理!具体如下: 1.申请相关权限 & ...

  9. sqlserver中关于merge

    merge: 在2008后被引入,它能将insert,Update,delete 简单并为一句,根据与源表连接的结果,对目标表进行插入,更新和删除操作例如:Merge是关于对于两个表之间进行操作的 C ...

  10. 谷歌(Chrome)安装Advanced REST Client插件

    进入Extensions(工具——>扩展程序) 点击Get More extensions或新建标签页点击网上应用店 如果加载太慢,出现chrome网上应用店无法打开,显示暂时无法加载该应用的画 ...