你怎么能这样光线追踪的点云与three.js所定制的顶点着色器。 ,光线追踪点云用自定义的顶点着色器在three.js所
function testPoint(point, index) {
var rayPointDistanceSq = ray.distanceSqToPoint(point);
if (rayPointDistanceSq < localThresholdSq) {
var intersectPoint = ray.closestPointToPoint(point);
intersectPoint.applyMatrix4(matrixWorld);
var distance = raycaster.ray.origin.distanceTo(intersectPoint);
if (distance < raycaster.near || distance > raycaster.far) return;
intersects.push({
distance: distance,
distanceToRay: Math.sqrt(rayPointDistanceSq),
point: intersectPoint.clone(),
index: index,
face: null,
object: object
});
}
}
var vertices = geometry.vertices;
for (var i = 0, l = vertices.length; i < l; i ++) {
testPoint(vertices[ i ], i);
}
但是,由于我使用的是顶点着色器,该geometry.vertices:
这是我的顶点着色器
void main() {
vUvP = vec2(position.x/(width*2.0), position.y/(height*2.0)+0.5);
colorP = vec2(position.x/(width*2.0)+0.5 , position.y/(height*2.0) );
vec4 pos = vec4(0.0,0.0,0.0,0.0);
depthVariance = 0.0;
if ((vUvP.x<0.0)|| (vUvP.x>0.5) || (vUvP.y<0.5) || (vUvP.y>0.0)) {
vec2 smp = decodeDepth(vec2(position.x, position.y));
float depth = smp.x;
depthVariance = smp.y;
float z = -depth;
pos = vec4((position.x/width - 0.5) * z * (1000.0/focallength) * -1.0,(position.y/height - 0.5) * z * (1000.0/focallength),(- z + zOffset/1000.0) * 2.0,1.0);
vec2 maskP = vec2(position.x/(width*2.0), position.y/(height*2.0) );
vec4 maskColor = texture2D(map, maskP);
maskVal = (maskColor.r + maskColor.g + maskColor.b)/3.0 ;
}
gl_PointSize = pointSize;
gl_Position = projectionMatrix * modelViewMatrix * pos;
}
在积分类,光线追踪是这样实现的不匹配屏幕上防止射线痕迹工作的顶点。
我们可以得到点从顶点着色器回来?
谢谢!我会在未来为所有尝试这个的人添加。在顶点着色器中,您可以设置一个变化的,然后您可以在片段着色器中使用它来设置顶点的颜色 – cjds