javascript 通过按钮在三个JS中移动3d对象[已关闭]

tzxcd3kk  于 2023-01-01  发布在  Java
关注(0)|答案(1)|浏览(185)

编辑问题以包含desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem。这将有助于其他人回答问题。
8小时前关门了。
Improve this question
我是一个初学者在三JS和需要一些帮助我的代码。请,你能帮我一秒钟吗?
1|按钮1**"增加+1",点击按钮1后,房间1移动到房间2位置,依此类推,房间8移动到房间1位置。
2|按钮2**"增加+2",点击按钮2后,房间1移动到房间3位置,依此类推,房间8移动到房间2**位置。
这里有一个例子可以说明我的意思:

这是我在沙盒中的代码。
https://codesandbox.io/s/threejs-code-3rlk8b?file=/src/components/PartOne.js
请帮帮我。
非常感谢您宝贵的时间
我期待的解决方案是,我如何使用一个点击按钮,并移动我的3d对象(房间)

wlzqhblo

wlzqhblo1#

使用React状态变化,我做了这个解决方案。
首先,你已经将每个房间定位在一个固定的点上。你需要旋转房间,这意味着你需要改变它们的位置。
为此,我改变了房间组件中的固定点,以从 prop 中获取。
例如:对于8号房间,

export function Room8({position,...props}) {
  const { nodes, materials } = useGLTF('./models/room8.glb')
  return (
    <group castShadow receiveShadow {...props} dispose={null}>
      <group castShadow receiveShadow position={position} rotation={[Math.PI, 0, Math.PI]}>
    ...your code
    </group>
  </group>
  )
}

对所有房间执行此操作。
然后将这些位置作为数组添加到PartOne.js

const positions= useMemo(()=>[
    [0,0,0],
    [-4, -2.7, 0],
    [-0.5, -2.7, 3.6],
    [-7.6, -5.5, 0],
    [-4.5, -5.5, 3.6],
    [-0.4, -5.5, 7.2],
    [-7.6, -8.3, 3.55],
    [-4, -8.3, 7.2]
]);

单位:PartOne.js
添加一个状态以使您的房间井然有序。

const [rooms,setRooms]=useState(
    [RoomOne,Room2,Room3,Room4,Room5,Room6,Room7,Room8]
);

添加按钮并旋转房间阵列,

<button onClick={()=>{
   let arr=[...rooms];
   arr.unshift(arr.pop())
   console.log("arr::",arr)
   setRooms(arr)
}}>Rotate +1</button>

在画布内呈现状态rooms

<Canvas shadows camera={{ fov:70, position: [0,0,30] }} >
    <Suspense fallback={null}  >
       <ambientLight intensity={0.3} />
       <directionalLight castShadow receiveShadow intensity={2} position={[80,80,80]} />
     {rooms.map((room,roomIndex)=>room({position:positions[roomIndex]}))}
       <ContactShadows />
    </Suspense>
    <OrbitControls enablePan={true} enableZoom={true} enableRotate={true} />
 </Canvas>

添加以上变更的沙盒供您参考,
Code Sandbox

相关问题