This commit is contained in:
Kseninia Mikhaylova 2024-06-25 10:14:51 +03:00
parent c2f9ab8f36
commit bfed1bf6e5
1 changed files with 12 additions and 7 deletions

View File

@ -1,8 +1,10 @@
<script setup lang="ts"> <script setup lang="ts">
import { TresCanvas } from '@tresjs/core' import { TresCanvas } from '@tresjs/core'
import { OrbitControls, Environment, Html } from '@tresjs/cientos' import { OrbitControls } from '@tresjs/cientos'
import { Vector3 } from 'three';
const camera = ref() const camera = ref()
const controls = ref()
const controlsState = reactive({ const controlsState = reactive({
minDistance: 2, minDistance: 2,
maxDistance: 10, maxDistance: 10,
@ -43,9 +45,10 @@ const loadAll = async () => {
} }
const changeDistance = (v = 1) => { const changeDistance = (v = 1) => {
if(camera.value) { if (camera.value && controls.value) {
console.log(camera.value.position.normalize()) const distance = camera.value.position.distanceTo(new Vector3(0, 0, 0));
camera.value.position.z += v const r = distance + v
camera.value.position.normalize().multiplyScalar(r)
} }
} }
onMounted(() => { onMounted(() => {
@ -62,7 +65,7 @@ onMounted(() => {
</template> </template>
<TresCanvas height="600"> <TresCanvas height="600">
<TresPerspectiveCamera :position="[-7, 2, 4]" ref="camera" /> <TresPerspectiveCamera :position="[-7, 2, 4]" ref="camera" />
<OrbitControls v-bind="controlsState" make-default /> <OrbitControls v-bind="controlsState" ref="controls" make-default />
<Suspense> <Suspense>
<ModelDiagram /> <ModelDiagram />
</Suspense> </Suspense>
@ -81,10 +84,12 @@ onMounted(() => {
<Icon name="mdi:checkbox-outline" v-if="explosion_state" /> <Icon name="mdi:checkbox-outline" v-if="explosion_state" />
<Icon name="mdi:square-outline" v-else /> <Icon name="mdi:square-outline" v-else />
</a> </a>
<a @click="changeDistance(0.5)" :class="[{ 'disabled': camera ? camera.position.z >= 9.5 : null }]"> <a @click="changeDistance(-0.5)"
:class="[{ 'disabled': camera ? (camera.position.distanceTo(new Vector3(0, 0, 0)) <= controlsState.minDistance) : null }]">
<Icon name="mdi:plus-circle-outline" /> <Icon name="mdi:plus-circle-outline" />
</a> </a>
<a @click="changeDistance(-0.5)" :class="[{ 'disabled': camera ? camera.position.z <= -9.5 : null }]"> <a @click="changeDistance(0.5)"
:class="[{ 'disabled': camera ? (camera.position.distanceTo(new Vector3(0, 0, 0)) >= (controlsState.maxDistance)) : null }]">
<Icon name="mdi:minus-circle-outline" /> <Icon name="mdi:minus-circle-outline" />
</a> </a>
</div> </div>