首页 > 其他分享 >three.js 小车模型的基本结构

three.js 小车模型的基本结构

时间:2022-10-30 15:12:54浏览次数:47  
标签:position const 小车 THREE three add car new js

基本结构

image

代码

import * as THREE from 'three'
import Stat from 'three/examples/jsm/libs/stats.module'
import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls'

const w = window.innerWidth
const h = window.innerHeight
const stat = new Stat()

//Scene
const scene = new THREE.Scene()

//材质
const material = new THREE.MeshNormalMaterial()

//Objects
//整个汽车 car - group
const car = new THREE.Group()

//车身 body - group
const body = new THREE.Group()

// 车底盘
const bodyCube1 = new THREE.Mesh(
    new THREE.BoxGeometry(1, 2, 0.5),
    material
)
// 红色物块,代替人类
const bodyCube2 = new THREE.Mesh(
    new THREE.BoxGeometry(0.5, 0.5, 0.5),
    new THREE.MeshBasicMaterial({ color: 0xff0000 })
)
bodyCube2.position.z = 0.5
//车体部分
body.add(bodyCube1)
body.add(bodyCube2)

car.add(body)

//轮子1 - group
const wheelGroup1 = new THREE.Group()
const wheel1 = new THREE.Mesh(
    new THREE.BoxGeometry(0.1, 0.7, 0.7),
    material
)
wheelGroup1.position.set(-0.7, 0.6, 0)
wheelGroup1.add(wheel1)
car.add(wheelGroup1)
//轮子2 - group
const wheelGroup2 = new THREE.Group()
const wheel2 = new THREE.Mesh(
    new THREE.BoxGeometry(0.1, 0.7, 0.7),
    material
)
wheelGroup2.position.set(0.7, 0.6, 0)
wheelGroup2.add(wheel2)
car.add(wheelGroup2)
//轮子3 - group
const wheelGroup3 = wheelGroup1.clone()
wheelGroup3.position.y = -0.6
car.add(wheelGroup3)
//轮子4 - group
const wheelGroup4 = wheelGroup2.clone()
wheelGroup4.position.y = -0.6
car.add(wheelGroup4)

//轮胎 - group
const circle = new THREE.Group()

let n = 20
for (let i = 0; i < n; i++) {
    let r = 0.5
    const geometry = new THREE.BoxGeometry(0.1, 0.1, 0.2)
    const mesh = new THREE.Mesh(geometry, material)
    mesh.position.x = r * Math.cos(Math.PI * 2 / n * i)
    mesh.position.y = r * Math.sin(Math.PI * 2 / n * i)
    circle.add(mesh)
}
circle.rotation.y = -0.5 * Math.PI

wheelGroup1.add(circle)
wheelGroup2.add(circle.clone())
wheelGroup3.add(circle.clone())
wheelGroup4.add(circle.clone())

scene.add(car)

//Camera
const camera = new THREE.PerspectiveCamera(75, w / h, 0.1, 100)
camera.position.set(0, 0, 5)
camera.lookAt(0, 0, 0)

//Renderer
const renderer = new THREE.WebGLRenderer()
renderer.setSize(w, h)
document.body.append(renderer.domElement)
document.body.append(stat.dom)

const orbitControls = new OrbitControls(camera, renderer.domElement)

const clock = new THREE.Clock()
tick()
function tick() {
    const time = clock.getElapsedTime()

    car.position.y = time % 4 - 2
    wheelGroup1.rotation.x = -time
    wheelGroup2.rotation.x = -time
    wheelGroup3.rotation.x = -time
    wheelGroup4.rotation.x = -time

    requestAnimationFrame(tick)
    renderer.render(scene, camera)
    stat.update()
    orbitControls.update()
}

标签:position,const,小车,THREE,three,add,car,new,js
From: https://www.cnblogs.com/zhuoss/p/16841336.html

相关文章

  • 图解JS事件对象screenX、clientX、pageX, offsetX区别
    screenX、clientX、pageX和offsetX的区别1、screenX和screenY参照点:电脑屏幕左上角screenX:鼠标点击位置相对于电脑屏幕左上角的水平偏移量screenY:鼠标点击位置相对......
  • Vue学习笔记之vue.js 两个等号 == 和三个等号===的区别 数字0和空字符串
    vuejavascript等号=====数字0空字符串/**==用于比较两者是否相等,忽略数据类型===用于更严谨的比较,值和值的数据类型都需要同时比较*/<!DOCT......
  • JS之循环发送请求代码优化
    需求:将数组中的值作为参数,循环调用新增接口实现批量导入功能。因为接口调用有时间间隔限制,避免误操作,所以需要设置接口请求的间隔时间。原代码如下:constrecursive=(arr,......
  • js数据处理4
    <template><ModuleBox2title="数据趋势图"bgType="2":cityShow="true"moduleType="sjqs":styleObj="styleObj"><divclass="echarts-box">......
  • js获取当前日期的前七天
    //获取当前日期的前7天getDays(){letoneDay=24*60*60*1000letendTime=newDate(Date.now()-oneDay)endTime=this.formatterDate(en......
  • js一键切换dark模式
    js一键切换dark模式//初始化$(function(){lettheme=$.cookie('theme');if(theme=="dark"){$("body").addClass('dark');$("#theme").addClass('......
  • 使用Three.js 心得系列一 如何创建三维网格三、使用Three.js 心得系列三 Three.js 如
    一、使用Three.js心得系列一如何创建三维网格二、使用Three.js心得系列二如何改变三维场景的GlTF模型的位置三、使用Three.js心得系列三Three.js如何加载GlTF文件 ......
  • 什么是Json,如何使用?
    JavaScriptObjectNotation:javascript的对象表示法。这是一种能传递对象的语法,可以是键值对,数组,以及其他对象。轻量级的数据传输方法。json格式:{key:{key:[{......
  • FastJson序列化和反序列化问题记录
    序列化与反序列化问题调用外部接口,http://100.111.55.67:9999/cmdb/v0.2.0/departments?page_size=1000,返回数据格式如下:{"code":0,"content":[{......
  • JS 删除数组中某个元素
    1、首先查找出元素在数组中的位置即索引(数组中本来就有indexOf()方法,方便学习给出代码):Array.prototype.indexOf=function(val){for(vari=0;i<this.len......