点云着色的原理可以参加这位大佬的文字.
需要注意的是, colormap-jet 的颜色变换是从灰度空间到彩色空间,灰度空间的范围是【0·255】。
那么我们需要把点云的高度从新映射到这个区域。
先求得点云的最低高度和最高高度。 minZ maxZ.
g = (z - minZ)/(maxZ-minZ) * 255.
上面的g 就成了一个范围在0~255之间的灰度值了。
下面贡献主要Shader 代码
uniform float minZ;
uniform float maxZ;
varying vec4 clr;
void main() {
gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
gl_PointSize = 1.0;
float z = position.z;
z = 255.0*(z - minZ)/(maxZ-minZ);
int zz = int(z);
if(zz >= 0 && zz < 32 )
{
clr=vec4(0.5 + 4.0 * float(zz) / 256.0, 0.0, 0.0, 1.0);
}
else if(zz == 32){
clr=vec4(1.0, 0.0, 0.0, 1.0);
}
else if(zz >= 33 && zz < 95 )
{
int x = 4 + 4*(zz-33);
clr=vec4(1.0, float(x) / 255.0, 0.0, 1.0);
}
else if(zz == 96){
clr=vec4(0.996, 1.0, 0.0, 0.0078);
}
else if(zz >= 97 && zz < 159 )
{
int x = 250 - 4*(zz-97);
int y = 6 + 4*(zz-97);
clr=vec4(float(x) / 255.0, 1.0, float(y) / 255.0, 1.0);
}
else if(zz == 159){
clr=vec4(0.0039, 1.0, 0.996,1.0);
}
else if(zz >= 160 && zz < 224 )
{
int x = 252 - 4*(zz-160);
clr=vec4(0.0, float(x) / 255.0, 1.0, 1.0);
}
else if(zz >= 224 && zz < 256 )
{
int x = 252 - 4*(zz-224);
clr=vec4(0.0, 0.0, float(x) / 255.0, 1.0);
}
else{
clr=vec4(0.0039,1.0,0.0,1.0);
}
}