繁体   English   中英

更改三.js 线材运行时

[英]Change three.js Line material runtime

我有带有 THREE.LineBasicMaterial 的 Line 对象,然后我正在尝试更改材质:

material = new THREE.LineDashedMaterial({
    dashSize: 5,
    gapSize: 5,
  })

  line.material = material

  line.material.needsUpdate = true
  line.geometry.uvsNeedUpdate = true
  line.geometry.verticesNeedUpdate = true

  line.computeLineDistances()

但是没有任何反应,线仍然没有虚线,有什么想法吗?

按预期工作:

 var scene = new THREE.Scene(); var camera = new THREE.PerspectiveCamera(60, innerWidth / innerHeight, 1, 1000); camera.position.set(3, 5, 8); var renderer = new THREE.WebGLRenderer({ antialias: true }); renderer.setSize(innerWidth, innerHeight); document.body.appendChild(renderer.domElement); var controls = new THREE.OrbitControls(camera, renderer.domElement); scene.add(new THREE.GridHelper(10, 10)); var pts = []; var ptsCount = 10; for (let i = 0; i < ptsCount; i++) { pts.push(new THREE.Vector3( Math.random() - 0.5, Math.random() - 0.5, Math.random() - 0.5 ).multiplyScalar(10)) } var geom = new THREE.BufferGeometry().setFromPoints(pts); var mat = new THREE.LineBasicMaterial({ color: "yellow" }); var line = new THREE.Line(geom, mat); scene.add(line); btnDashed.addEventListener("click", event => { let mat = new THREE.LineDashedMaterial({ color: (Math.random() * 0x888888) + 0x888888, dashSize: 0.5 + Math.random() * 0.5, gapSize: Math.random() * 0.5 }); line.computeLineDistances(); line.material = mat; }) renderer.setAnimationLoop(() => { renderer.render(scene, camera) })
 body { overflow: hidden; margin: 0; }
 <script src="https://threejs.org/build/three.min.js"></script> <script src="https://threejs.org/examples/js/controls/OrbitControls.js"></script> <button id="btnDashed" style="position: absolute;"> Make dashed </button>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM