软件渲染笔记 03 模型线框
2018-02-16 18:38
204 查看
软件渲染笔记 03 模型线框
在上篇文章中,我们已经掌握了如何画线. 这次我们将基于画线函数来画模型线框.伪代码
不同格式的模型文件,数据多多少少都有些不同.我们这里不考虑模型的存储方式,先以直观感受来写伪代码.for face in facesOfModel: for i to numOfVerticesInFace: draw(vertexi,(vertexi+1)%numOfVerticesInFace)
简单解释下上述伪码的含义:我们首先遍历模型中所有的面.然后遍历模型中的点,把相邻的点都连成线.
waveobj格式
完整的waveobj格式描述可以看waveobj wiki.由于我们只绘制线框,所以只看对我们有用的信息.
关于面:
有三种表达面的方式:1. f v/vt
2. f v//vn
3. f v/vt/vn
其中,f是面的意思.v是顶点坐标索引.vt是纹理坐标索引.vn是顶点法向量索引.
关于顶点:
顶点的表示方式为:v x y z (w)
其中,w可以省略.
到此为止,需要画模型线框的数据格式我们已经掌握.
源码分析
首先,按照上述wavefront obj的格式说明来解析文件读入内存.然后,直接翻译伪码即可. 代码如下:Model *model= new Model("model/african_head.obj"); for(int i=0;i<model->nfaces();i++) { vector<int>face=model->face(i); for(int j=0;j<face.size();j++) { Vec3f vertexFrom= model->vert(face[j]); Vec3f vertexTo=model->vert(face[(j+1)%face.size()]); line(image,green, (1+vertexFrom.x)*0.5*CANVAS_WIDTH, (1+vertexFrom.y)*0.5*CANVAS_HEIGHT, (1+vertexTo.x)*0.5*CANVAS_WIDTH, (1+vertexTo.y)*0.5*CANVAS_HEIGHT); } }
需要额外注意的是,代码里的顶点坐标范围为[-1,1].所以乘以了CANVAS尺寸的一半.默认原点为左下角,所以加上了半屏的偏移值.忽略z值.
效果图如下:
点击这里下载完整代码
相关文章推荐
- 软件需求模式阅读笔记03
- 面对软件错误构建可靠的分布式系统_笔记03
- webots自学笔记(一)软件界面和简单模型仿真
- 软件模型分析_笔记
- webots自学笔记(一)软件界面和简单模型仿真
- 软件渲染笔记 01 概述与环境搭建
- [软件渲染器入门]二,绘制线段和三角形来获得线框渲染效果
- 软件构架实践_阅读笔记03(7-9)
- webots自学笔记(一)软件界面和简单模型仿真
- 软件测试学习笔记之一V模型
- 需求工程——软件需求建模与分析阅读笔记03
- 03_ARM汇编自学笔记模型之处理器模式
- DirectX 10 学习笔记6:渲染3D模型
- 软件构架实践——阅读笔记03
- 软件测试学习笔记4-软件测试模型
- 软件开发模型(笔记)
- 软件工程基础学习笔记--软件开发模型
- 物理渲染学习笔记(三)——Cook-Torrance微表面模型
- 分类不平衡对软件缺陷预测模型性能的影响研究(笔记)