我正在尝试编写一个从网格创建点云的函数。我还想控制那个点云的每个顶点的颜色。到目前为止,我尝试分配几何颜色,但颜色没有更新。
InteractablePointCloud_simug=function(object, editor){
var signals=editor.signals;
var vertexSize=0.3;
var pointMat= new THREE.PointsMaterial({size:vertexSize , vertexColors:THREE.VertexColors});
var colors=[];
var colorStep=0.1;
for (var i = 0; i < object.geometry.vertices.length; i++) {
colors.push(new
THREE.Color(colorStep*i,colorStep*i,colorStep*i));
};
//get points from mesh of original object
var points=new THREE.Points(object.geometry,pointMat);
//Update colors
points.geometry.colors=colors;
points.geometry.colorsNeedUpdate=true;
updatePosition();
//Add points object to scene
editor.addNoneObjectMesh(points);
}
答案 0 :(得分:0)
我认为这可能在其他视频卡上可行,但我的似乎并不喜欢。
理论上..如果您的材料颜色是白色..它应该乘以顶点颜色(基本上就像使用顶点颜色),但是由于您没有将黑色指定为颜色,所以这不是问题。
如果您的代码无法在您的计算机上运行(也不能在我的计算机上运行),那么您将不得不使用核子...只需创建一个新的selectedPointsGeometry
和一个新的selectedPointsMesh
从原始顶点中获取几个顶点..复制它们..将它们放置在vertices
数组中..并运行一个update方法(您必须每次都重新创建geo和mesh。我的PC上,我尝试调用每种更新方法,不得不重新创建)
注意咖啡脚本。 @anchor
是容器
updateSelectedVertices: (vertices) ->
if @selectedParticles
@anchor.remove @selectedParticles
@pointGeometry = new THREE.Geometry()
@pointGeometry.vertices = vertices
@selectedParticles = new (THREE.PointCloud)(
@pointGeometry,
@selectedPointMaterial
)
@pointGeometry.verticesNeedUpdate = true
@pointGeometry.computeLineDistances()
@selectedParticles.scale.copy @particles.scale
@selectedParticles.sortParticles = true
@anchor.add @selectedParticles
selectedPointMaterial
在其他地方定义。只需使用与未选择的点云不同的颜色(和不同的大小)即可。
IE ..对未选择的点云使用黑色和5号,对选定的点云使用黄色和10号。
我的另一个网格称为@particles
..我只需要复制比例尺。 (这是未选择的点云)