Q79:怎么用三角形网格(Triangle Mesh)细分曲面
来源:互联网 发布:达真堪布淘宝 编辑:程序博客网 时间:2024/05/02 06:46
79.1 思路分析
我们先以球心在原点的单位球面为例来说明细分过程。
79.2 C++代码实现
79.2.1 tessellate_flat_sphere()的实现
其实,实现起来还挺简单。只需要根据参数方程计算小三角形的顶点,然后新建三角形对象,然后将三角形对象添加到Grid即可。(画Grid的过程在“Q78”中已经实现)。
我们在Grid.cpp中添加一个函数tessellate_flat_sphere()来完成所需的事宜。
该函数的相关代码如下放截图:
79.2.2 World::build()
79.3 测试图形
tessellate_flat_sphere(8,4),耗时315s
tessellate_flat_sphere(16,8),耗时299s
tessellate_flat_sphere(160,80),耗时269s
tessellate_flat_sphere(1600,800),耗时438s
79.4 用三角形网格细分牛角面
用三角形网格细分曲面,其实很简单:
根据参数方程求出所有三角形的顶点,然后将所有三角形添加到一个Grid中,然后ray trace这个Grid即可。
所以,只要直到曲面的参数方程即可。
79.4.1 参数方程
79.4.2 将牛角面分割成三角形网格(tessellate_flat_horn())
79.4.3 World::build()
和细分球面时不同的地方只是“相机的位置”:
pinhole_ptr->set_eye(0,-2, 100);
pinhole_ptr->set_lookat(0,-2, 0);
79.4.4 测试图形
tessellate_flat_horn(8,4),耗时371s
tessellate_flat_horn(16,8),耗时434s
tessellate_flat_horn(160,80),耗时288s
tessellate_flat_horn(1600,800),耗时453s
79.5 其他说明
像这样以三角形网格的方式来ray trace参数形式的曲面,思路简单,速度较快。
回想“问题五十三:怎么用ray tracing画参数方程表示的曲面(1)”当时ray trace参数形式的球面和牛角面时,联立参数方程和光线方程,然后求个各种一阶微分、二阶微分。各种纠结,生成图形的过程是特别耗时,重点是生成的图形对不起观众。参考链接:
http://blog.csdn.net/libing_zeng/article/details/54565070
完整的代码,参考:http://download.csdn.net/detail/libing_zeng/9772259
Referrance
[1]. Kevin Suffern, Ray Tracing from theGround Up, A K Peters Ltd, 2007.
- Q79:怎么用三角形网格(Triangle Mesh)细分曲面
- Q80:平坦着色(Flat Shading)和平滑着色(Smooth Shading)——“Q79:怎么用三角形网格(Triangle Mesh)细分曲面”(补充)
- Q97:怎么用三角形网格细分Bezier曲面——以Utah Teapot为例
- Q100:怎么用三角形网格细分回旋体(rotational sweeping / revolution)
- Q98:三角形网格细分Bezier曲面时,注意三角形顶点的顺序(确保其对应的法向量向外)
- 三角网格(Triangle Mesh)
- Q82:三角形网格[Triangle Mesh]图形的平滑着色[Smooth Shading]
- 网格(mesh)简化
- DOO-SABIN 细分曲面(编辑中)
- 细分曲面简介(subdivision surface)
- Tessellation Shader(细分曲面着色器)
- opengles中的Tessellation(曲面细分)
- Zoj 3598 Spherical Triangle 【计算几何】【曲面三角形】
- Direct2D + 曲面细分(渐进)
- Direct2D渐进曲面细分
- DirectX11 曲面细分阶段
- Tessellation(曲面细分技术)
- Triangle mesh
- java中单个字符输入输出
- BAT指令汇总
- Spring整合Ehcache管理缓存
- 蓝桥杯第四届 振兴中华(dp)
- 第35天(就业班) hibernate查询、连接池、二级缓存资料
- Q79:怎么用三角形网格(Triangle Mesh)细分曲面
- ubuntu12.04向MATLAB/R2014b/toolbox里添加工具箱
- 常用性能分析工具
- 基于Java语言的安卓编程之十图像按键及按键图像切换
- 3月6日,Login,每日20行。
- C++ primer 3.2.3节练习
- 深度学习(12):Vision
- Tensorboard学习
- Socket写的Web服务器——带详细图解