JS_three.js禁用拖拽和缩放

106 篇文章 7 订阅
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要实现线路流动和建筑物纹理流动,需要使用Three.js中的ShaderMaterial和自定义的着色器代码。下面是一个简单的示例代码: HTML: ``` <div id="container"></div> ``` JavaScript: ```javascript // 创建场景和渲染器 var scene = new THREE.Scene(); var camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000); var renderer = new THREE.WebGLRenderer({ antialias: true }); renderer.setSize(window.innerWidth, window.innerHeight); document.getElementById('container').appendChild(renderer.domElement); // 添加灯光 var ambientLight = new THREE.AmbientLight(0xffffff, 0.5); scene.add(ambientLight); var pointLight = new THREE.PointLight(0xffffff, 0.5); pointLight.position.set(10, 10, 10); scene.add(pointLight); // 创建建筑物和线路材质 var buildingGeometry = new THREE.BoxGeometry(1, 1, 1); var buildingMaterial = new THREE.MeshPhongMaterial({ color: 0xCCCCCC, shininess: 10 }); var lineMaterial = new THREE.LineBasicMaterial({ color: 0x00FF00 }); var time = 0; // 自定义着色器代码 var vertexShader = ` uniform float time; varying vec2 vUv; void main() { vUv = uv; vec3 position = position; position.x += sin(position.z * 10.0 + time) * 0.1; position.y += sin(position.z * 20.0 + time) * 0.1; gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0); } `; var fragmentShader = ` uniform float time; uniform sampler2D texture; varying vec2 vUv; void main() { vec2 uv = vUv; uv.x += sin(uv.y * 10.0 + time) * 0.1; uv.y += sin(uv.x * 20.0 + time) * 0.1; gl_FragColor = texture2D(texture, uv); } `; // 创建着色器材质 var shaderMaterial = new THREE.ShaderMaterial({ uniforms: { time: { value: 0 }, texture: { value: new THREE.TextureLoader().load('https://threejs.org/examples/textures/uv_grid_opengl.jpg') } }, vertexShader: vertexShader, fragmentShader: fragmentShader }); // 添加建筑物和线路 for (var i = 0; i < 10; i++) { var building = new THREE.Mesh(buildingGeometry, buildingMaterial); building.position.set(i - 5, 0, 0); scene.add(building); var lineGeometry = new THREE.Geometry(); lineGeometry.vertices.push(new THREE.Vector3(i - 5, -0.5, 0), new THREE.Vector3(i - 5, -0.5, -5)); var line = new THREE.Line(lineGeometry, lineMaterial); scene.add(line); } // 渲染循环 function render() { requestAnimationFrame(render); time += 0.1; shaderMaterial.uniforms.time.value = time; renderer.render(scene, camera); } render(); ``` 这个示例代码中,我们创建了一个包含10个方块和10条线路的场景。我们使用了一个自定义的着色器代码来实现建筑物和线路的流动效果。建筑物使用了Phong材质,线路使用了LineBasicMaterial。 在自定义的着色器代码中,我们使用了一个uniform变量time来控制时间流逝。在顶点着色器中,我们根据时间调整建筑物的位置。在片元着色器中,我们根据时间调整纹理的UV坐标来实现纹理的流动效果。 如果你需要进一步了解ShaderMaterial和自定义着色器代码的使用,可以参考Three.js的官方文档。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值