dev #84
|
@ -46,7 +46,7 @@ watch(fence_section, () => {
|
||||||
<TresPerspectiveCamera v-bind="cameraStat" ref="camera" />
|
<TresPerspectiveCamera v-bind="cameraStat" ref="camera" />
|
||||||
<OrbitControls v-bind="controlsState" make-default />
|
<OrbitControls v-bind="controlsState" make-default />
|
||||||
<Suspense>
|
<Suspense>
|
||||||
<ModelCamera />
|
<ModelSmoothCamera />
|
||||||
</Suspense>
|
</Suspense>
|
||||||
<Suspense>
|
<Suspense>
|
||||||
<ModelEnv />
|
<ModelEnv />
|
||||||
|
|
|
@ -1,12 +1,16 @@
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { Mesh, Object3D } from 'three';
|
import { Mesh, Object3D, Vector3 } from 'three';
|
||||||
//@ts-ignore
|
//@ts-ignore
|
||||||
import { useGLTF, } from '@tresjs/cientos'
|
import { OrbitControls, useGLTF, } from '@tresjs/cientos'
|
||||||
|
import type { OrbitControlsProps } from '@tresjs/cientos/dist/core/controls/OrbitControls.vue.js';
|
||||||
|
|
||||||
const section_count = use_section_count()
|
const section_count = use_section_count()
|
||||||
const extra_section = use_extra_section()
|
const extra_section = use_extra_section()
|
||||||
|
const lamelles_count = use_lamelles_count()
|
||||||
|
const lamelle_height = use_lamelle_height()
|
||||||
|
const fence_section = use_fence_section()
|
||||||
|
|
||||||
const { scene } = useTresContext()
|
const { scene, controls, camera } = useTresContext()
|
||||||
const { seek, seekAll } = useSeek()
|
const { seek, seekAll } = useSeek()
|
||||||
|
|
||||||
const { scene: top_model } = await useGLTF('/models_one/verh_100.glb', { draco: true })
|
const { scene: top_model } = await useGLTF('/models_one/verh_100.glb', { draco: true })
|
||||||
|
@ -17,14 +21,6 @@ const { scene: model_fence_inner } = await useGLTF('/fence_one/inner.glb')
|
||||||
const { scene: fastening_model } = await useGLTF('/models_one/krepleniye_planok.glb', { draco: true });
|
const { scene: fastening_model } = await useGLTF('/models_one/krepleniye_planok.glb', { draco: true });
|
||||||
const { scene: lamelle_model } = await useGLTF('/models_one/lamel_100.glb', { draco: true });
|
const { scene: lamelle_model } = await useGLTF('/models_one/lamel_100.glb', { draco: true });
|
||||||
|
|
||||||
[model_fence_top, model_fence_bottom].map((sc: Object3D) =>
|
|
||||||
sc.traverse((child: Object3D) => {
|
|
||||||
if (child instanceof Mesh) {
|
|
||||||
child.position.z = 0
|
|
||||||
}
|
|
||||||
})
|
|
||||||
)
|
|
||||||
|
|
||||||
const top = ref(top_model)
|
const top = ref(top_model)
|
||||||
const fence = ref(model_fence_center)
|
const fence = ref(model_fence_center)
|
||||||
const fence_top = ref(model_fence_top)
|
const fence_top = ref(model_fence_top)
|
||||||
|
@ -66,6 +62,14 @@ watch(() => [section_count.value, extra_section.value], () => {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
})
|
})
|
||||||
|
const setTarget = () => {
|
||||||
|
const f = fence_section.value * 0.5
|
||||||
|
const target = new Vector3(0, lamelles_count.value * lamelle_height.value * 0.5, 0);
|
||||||
|
(controls.value as OrbitControlsProps).target = target
|
||||||
|
camera.value?.position.set(f, f, f)
|
||||||
|
}
|
||||||
|
setTarget()
|
||||||
|
watch(lamelles_count, setTarget)
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
<template>
|
<template>
|
||||||
|
|
|
@ -19,12 +19,9 @@ if (!pillar_color.value) {
|
||||||
lamelle_color.value = predefLamelleColors[r] as ralTypes
|
lamelle_color.value = predefLamelleColors[r] as ralTypes
|
||||||
}
|
}
|
||||||
|
|
||||||
set_material(lamelle.value, getColorHexFromRal(lamelle_color.value));
|
|
||||||
[lamelle].map(
|
[lamelle].map(
|
||||||
(el: Object3D) => set_material(el, getColorHexFromRal(lamelle_color.value)));
|
(el: Object3D) => set_material(el, getColorHexFromRal(lamelle_color.value)));
|
||||||
[top, fastening, fence, fence_bottom, fence_top].map(
|
[top, fastening, fence, fence_bottom, fence_top, fence_inner].map(
|
||||||
(el: Object3D) => { set_material(el, getColorHexFromRal(pillar_color.value)) });
|
|
||||||
[fence_inner].map(
|
|
||||||
(el: Object3D) => { set_material(el, getColorHexFromRal(pillar_color.value)) });
|
(el: Object3D) => { set_material(el, getColorHexFromRal(pillar_color.value)) });
|
||||||
|
|
||||||
watch(lamelle_color, () => {
|
watch(lamelle_color, () => {
|
||||||
|
@ -44,7 +41,7 @@ watch(pillar_color, () => {
|
||||||
].map((el: Object3D) => { set_material(el, getColorHexFromRal(pillar_color.value)) });
|
].map((el: Object3D) => { set_material(el, getColorHexFromRal(pillar_color.value)) });
|
||||||
|
|
||||||
})
|
})
|
||||||
watch([pillar_color, pillar_pattern, lamelle_count], () => {
|
watch([pillar_pattern, lamelle_count], () => {
|
||||||
[fence_inner].map(
|
[fence_inner].map(
|
||||||
(el: Object3D) => {
|
(el: Object3D) => {
|
||||||
set_material(el, getColorHexFromRal(pillar_color.value), {
|
set_material(el, getColorHexFromRal(pillar_color.value), {
|
||||||
|
|
|
@ -52,5 +52,6 @@ onBeforeLoop(() => {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
<template></template>
|
<template></template>
|
Loading…
Reference in New Issue