Q92:怎么对PLY文件对应的图形进行仿射变换
我们在“Q81”中已经知道怎么用ray tracing的方式生成PLY文件对应的图形。
参考:http://blog.csdn.net/libing_zeng/article/details/61195502
其中采用的方式是:
char* file_name = ".\\PLYFiles\\hand.ply"; Grid* grid_ptr = new Grid(new Mesh); grid_ptr->read_flat_triangles(file_name);
// grid_ptr->read_smooth_triangles(file_name); grid_ptr->set_material(phong_ptr1); grid_ptr->setup_cells(); add_object(grid_ptr);
1,新建一个Mesh对象;
2,新建一个Grid对象,并将Mesh对象的指针传给Grid对象;
3,通过Grid的成员方法读入PLY文件;
4,给Grid对象设置材质;
5,建立Grid对象的小正方体(cell);
6,将Grid对象添加到World中
直接生成PLY文件对应的图形,存在一个问题:
原始图形可能很小、而且位置确定。
所以,我们在生成相应图形时,需要将相机的参数(eye, look_at, distance)调到某个固定(合适)的值,才能生成可以接受的(正常的)图形。
有时候,我们不希望改变相机的参数。
这种情况下,我们只有将PLY文件对应的图形进行仿射变换。
将原始图形进行放大,以便大小合适;将原始图形进行平移,以便位置合适。
之前在“Q84”中也有做过相应的事情:http://blog.csdn.net/libing_zeng/article/details/61916767
现在,我们将“对PLY文件对应的图形进行仿射变换”单独拿出来进行说明,以便加深印象。
相关代码如下:
char* fileName = ".\\PLYFiles\\Bunny4K.ply"; // 4000 trianglesGrid* bunny_ptr = new Grid(new Mesh);
// bunny_ptr->read_flat_triangles(fileName); // read PLY filebunny_ptr->read_smooth_triangles(fileName); // read PLY filebunny_ptr->set_material(dielectric_ptr);bunny_ptr->setup_cells();Instance* instance_ptr = new Instance;instance_ptr->set_object(bunny_ptr);instance_ptr->scale(16.0);
// instance_ptr->rotate_y(45.0);instance_ptr->translate(3.0, 2.0, 0.0);add_object(instance_ptr);
1,新建一个Mesh对象;
2,新建一个Grid对象,并将Mesh对象的指针传给Grid对象;
3,通过Grid的成员方法读入PLY文件;
4,给Grid对象设置材质;
5,建立Grid对象的小正方体(cell);
6,新建一个Instance对象;
7,将Instance对象对应的几何物体设置为之前的Grid对象;
8,进行仿射变换(先缩放,在平移);
9,将Instance对象添加到World中
接下来,在某固定相机参数的情况下,将Stanford Bunny进行放大和平移。
原始图形,平移到(3,3.5,0)
instance_ptr->scale(1.0);
instance_ptr->translate(3.0, 3.5, 0.0);
放大2倍,平移到(3,3.5,0)
instance_ptr->scale(2.0);
instance_ptr->translate(3.0, 3.5, 0.0);
放大4倍,平移到(3,3.5,0)
instance_ptr->scale(4.0);
instance_ptr->translate(3.0, 3.5, 0.0);
放大8倍,平移到(3,3.5,0)
instance_ptr->scale(8.0);
instance_ptr->translate(3.0, 3.5, 0.0);
放大16被,平移到(3,3.5,0)
instance_ptr->translate(3.0, 3.5, 0.0);
(如上所有图形中的bunny都为添加阴影,若要添加阴影,基于如下链接的code在Instance类中实现shadow_hit()方法即可)
http://download.csdn.net/detail/libing_zeng/9786258
Q92:怎么对PLY文件对应的图形进行仿射变换相关推荐
- Q83:怎么画多个PLY文件组合的图形[Multiple-Mesh Objects]
之前,我们都是将一个PLY文件对应的图形画出来. 那么,如果一个图形是由多个PLY文件组成的,这样的图形应该怎么画呢??? 其实,原理很简单: 1,先将单个PLY文件对应的图形放在一个Grid里面: ...
- 【修正】Q93:PLY文件对应图形法向量反向问题——以bunny10K为例
这里修正"Q93:PLY文件对应图形法向量反向问题--以bunny10K为例"(http://blog.csdn.net/libing_zeng/article/details/6 ...
- Q81:“三角形网格”之“PLY文件”
81.1 引入 在"Q79"和"Q80"中用三角形网格细分曲面时,都是将每一个三角形的三个顶点的坐标都保存在内存中.这句话有两个重点: 其一,每个三角形的三个顶 ...
- PLY文件读取与显示
用OpenGL写了一份读取PLY文件并显示的代码,支持以下关键字: ply/format/element vertex/property/element face/end_header 以及数据类型: ...
- PCL读取ply文件
PCL读取ply文件 PCL读取ply文件 PCL读取ply文件 以下是利用PCL库读取ply文件代码 int readcloud(pcl::PointCloud<pcl::PointXYZ&g ...
- Python将numpy(.npy文件)存储为.ply文件
Python将numpy(.npy文件)存储为.ply文件 安装Open3D From NumPy to Ply Open3D文档 安装Open3D pip install open3d From N ...
- graphics.h头文件_C语言图形(graphics.h头文件功能和示例)
graphics.h头文件 C中的颜色说明 (Color Description in C) setbkcolor sets the background to the color specified ...
- CloudCompare源码分析:读取ply文件
CloudCompare源码分析_读取ply文件 写这些博客的原因,是因为打算好好研究一下点云的各种库的源码,其中比较知名的是PCL(point cloud library)和CC(CloudComp ...
- 如何把 .wrl 文件转成 .ply 文件(python 一次性转换目录下所有文件)
一.概述 wrl :virtual reality world 最近在找一些大场景点云文件,找到了一些 .wrl 文件,但是这些文件需要专门的软件打开才能显示,而我一般用的都是meshlab,所以需要 ...
最新文章
- redhat7企业版linuxlinux基本操作
- SQL Server 动态生成数据库所有表Insert语句
- HP前女老板Dunn和Carly的琐碎事
- LeetCode MySQL 1075. 项目员工 I
- 台式电脑键盘按键错乱_收藏篇:电脑键盘上的每个按键的作用和命令你都会用么...
- 统一的Ajax提交封装,一劳永逸好工具(带跨域处理)
- a1在c语言里代指什么意思,A1考试宝典
- 数据结构与算法快慢指针
- ylb:SQL 系统函数
- python 平方根_数的Python平方根
- 敏捷个人A1组第三次练习讨论 你是如何管理你的精力的?
- Python使用freetype渲染显示阿拉伯语
- 网络舆情监测在教育行业的必要性
- wps打印错误未定义书签怎么解决_wps目录中错误未定义书签怎么解决?
- GitHub · 如何创建文件夹
- 深度信念网络_【文章推荐】应用于油中溶解气体分析的深度信念网络与典型神经网络对比研究...
- 语音识别-特征提取 (一)
- 北京东方国信??有谁去过啊。。公司怎么样?
- 类拼多多砍价业务总结
- Windows系统完全卸载删除 Node.js
热门文章
- 一套OA系统 破解中小企业4大管理难题
- fatal error C1853: 'Debug/***.pch' is not a precompiled header file created with this compil
- 南阳OJ 16 矩形嵌套
- myeclipse 快捷键(转载)
- jsp中把js变量赋给java变量,或者将java变量赋给js变量怎么做?
- cocos2d-x 3.0 使用Sax解析xml文档(解决中文显示问题)
- 《.NET框架程序设计》第5章 基元类型、引用类型与值类型
- 【动态规划】LeetCode 63. Unique Paths II
- Matlab之矩阵行列式、秩、迹的求解
- Python replace() 和 re.sub() 字符串字符替换