- draw instance的大致原理
通过阅读OpenSceneGraph.3.Cookbook中的Rendering point cloud data with draw instancing章节,个人觉得draw instance渲染海量点云就是通过纹理映射的途径去完成的。
先来简单说说我所理解的纹理映射,所谓纹理映射就是在一个实体或者自定义实体上贴上一张图,再说细一点就是实体的颜色是由图片上与其对应的像素的颜色所确定的,与其对应像素的颜色是多少,就将此实体的对应位置的颜色设为多少,这样,就可以使得可以呈现出实体上被贴上图片的效果。大致流程是(以一个由很多个正方形所组成的一个平面实体为例):a.创建一个正方形几何体;b.根据自己要创建的实体和图片的关系确定每一个正方形与图片中像素的对应关系;c.根据对应关系去图片中提取像素的rgba信息,并赋值给着色器的gl_FrontColor变量,并根据每一个正方形的位置将位置坐标赋值给着色器的gl_Position变量。
而draw instance绘制海量点云则不再是去读取一张图片,而是自己创建一张图片,同时在图片的像素的RGBA信息中存储的也不再是RGBA信息,而是XYZ和brightness信息,然后再利用这张图片按照纹理映射的途径去完成在着色器中提取图片中的XYZ信息,并将此信息赋值给着色器的gl_Position变量即可。 - 代码
说明,此代码是直接照抄的OpenSceneGraph.3.Cookbook中的代码,使用此代码后会发现结果并不理想
#include <osg/Point>
#include <osg/Group>
#include <osgDB/ReadFil