PerspectiveCamera.vue 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. <script setup lang="ts">
  2. import { TresCanvas } from '@tresjs/core'
  3. import type { PerspectiveCamera } from 'three'
  4. import { Vector3 } from 'three'
  5. import { TresLeches, useControls } from '@tresjs/leches'
  6. const { position, lookAt, fov, near, far, zoom } = useControls({
  7. position: new Vector3(8, 8, 8),
  8. lookAt: new Vector3(0, 0, 0),
  9. // TODO: For some reason, the PerspectiveCamera's fov prop is not updating when the value is changed.
  10. fov: {
  11. value: 45,
  12. min: 1,
  13. max: 180,
  14. step: 1,
  15. },
  16. near: {
  17. value: 0.1,
  18. min: 0.01,
  19. max: 100,
  20. step: 0.01,
  21. },
  22. far: {
  23. value: 1000,
  24. min: 0.01,
  25. max: 1000,
  26. step: 0.01,
  27. },
  28. zoom: {
  29. value: 1,
  30. min: 0.01,
  31. max: 10,
  32. step: 0.01,
  33. },
  34. })
  35. const cameraRef = ref<PerspectiveCamera>()
  36. const computedFov = computed(() => {
  37. return Number(fov.value)
  38. })
  39. </script>
  40. <template>
  41. <TresLeches />
  42. <TresCanvas clear-color="#82DBC5">
  43. <TresPerspectiveCamera
  44. ref="cameraRef"
  45. :position="[position.x, position.y, position.z]"
  46. :look-at="[lookAt.x, lookAt.y, lookAt.z]"
  47. :fov="computedFov"
  48. :near="near"
  49. :far="far"
  50. :zoom="zoom"
  51. />
  52. <TresGridHelper />
  53. <TresMesh position-y="1">
  54. <TresBoxGeometry />
  55. <TresMeshNormalMaterial />
  56. </TresMesh>
  57. <TresAmbientLight :intensity="1" />
  58. </TresCanvas>
  59. </template>