我们在“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->scale(16.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文件对应的图形进行仿射变换相关推荐

  1. Q83:怎么画多个PLY文件组合的图形[Multiple-Mesh Objects]

    之前,我们都是将一个PLY文件对应的图形画出来. 那么,如果一个图形是由多个PLY文件组成的,这样的图形应该怎么画呢??? 其实,原理很简单: 1,先将单个PLY文件对应的图形放在一个Grid里面: ...

  2. 【修正】Q93:PLY文件对应图形法向量反向问题——以bunny10K为例

    这里修正"Q93:PLY文件对应图形法向量反向问题--以bunny10K为例"(http://blog.csdn.net/libing_zeng/article/details/6 ...

  3. Q81:“三角形网格”之“PLY文件”

    81.1 引入 在"Q79"和"Q80"中用三角形网格细分曲面时,都是将每一个三角形的三个顶点的坐标都保存在内存中.这句话有两个重点: 其一,每个三角形的三个顶 ...

  4. PLY文件读取与显示

    用OpenGL写了一份读取PLY文件并显示的代码,支持以下关键字: ply/format/element vertex/property/element face/end_header 以及数据类型: ...

  5. PCL读取ply文件

    PCL读取ply文件 PCL读取ply文件 PCL读取ply文件 以下是利用PCL库读取ply文件代码 int readcloud(pcl::PointCloud<pcl::PointXYZ&g ...

  6. Python将numpy(.npy文件)存储为.ply文件

    Python将numpy(.npy文件)存储为.ply文件 安装Open3D From NumPy to Ply Open3D文档 安装Open3D pip install open3d From N ...

  7. graphics.h头文件_C语言图形(graphics.h头文件功能和示例)

    graphics.h头文件 C中的颜色说明 (Color Description in C) setbkcolor sets the background to the color specified ...

  8. CloudCompare源码分析:读取ply文件

    CloudCompare源码分析_读取ply文件 写这些博客的原因,是因为打算好好研究一下点云的各种库的源码,其中比较知名的是PCL(point cloud library)和CC(CloudComp ...

  9. 如何把 .wrl 文件转成 .ply 文件(python 一次性转换目录下所有文件)

    一.概述 wrl :virtual reality world 最近在找一些大场景点云文件,找到了一些 .wrl 文件,但是这些文件需要专门的软件打开才能显示,而我一般用的都是meshlab,所以需要 ...

最新文章

  1. redhat7企业版linuxlinux基本操作
  2. SQL Server 动态生成数据库所有表Insert语句
  3. HP前女老板Dunn和Carly的琐碎事
  4. LeetCode MySQL 1075. 项目员工 I
  5. 台式电脑键盘按键错乱_收藏篇:电脑键盘上的每个按键的作用和命令你都会用么...
  6. 统一的Ajax提交封装,一劳永逸好工具(带跨域处理)
  7. a1在c语言里代指什么意思,A1考试宝典
  8. 数据结构与算法快慢指针
  9. ylb:SQL 系统函数
  10. python 平方根_数的Python平方根
  11. 敏捷个人A1组第三次练习讨论 你是如何管理你的精力的?
  12. Python使用freetype渲染显示阿拉伯语
  13. 网络舆情监测在教育行业的必要性
  14. wps打印错误未定义书签怎么解决_wps目录中错误未定义书签怎么解决?
  15. GitHub · 如何创建文件夹
  16. 深度信念网络_【文章推荐】应用于油中溶解气体分析的深度信念网络与典型神经网络对比研究...
  17. 语音识别-特征提取 (一)
  18. 北京东方国信??有谁去过啊。。公司怎么样?
  19. 类拼多多砍价业务总结
  20. Windows系统完全卸载删除 Node.js

热门文章

  1. 一套OA系统 破解中小企业4大管理难题
  2. fatal error C1853: 'Debug/***.pch' is not a precompiled header file created with this compil
  3. 南阳OJ 16 矩形嵌套
  4. myeclipse 快捷键(转载)
  5. jsp中把js变量赋给java变量,或者将java变量赋给js变量怎么做?
  6. cocos2d-x 3.0 使用Sax解析xml文档(解决中文显示问题)
  7. 《.NET框架程序设计》第5章 基元类型、引用类型与值类型
  8. 【动态规划】LeetCode 63. Unique Paths II
  9. Matlab之矩阵行列式、秩、迹的求解
  10. Python replace() 和 re.sub() 字符串字符替换