dev #84
|
@ -178,10 +178,17 @@ a[href^="#"] {
|
|||
}
|
||||
|
||||
&_calc {
|
||||
@apply py-0;
|
||||
@apply py-0 relative;
|
||||
|
||||
> .container:first-child {
|
||||
@apply relative h-[50vh] min-h-[600px] justify-between;
|
||||
> * {
|
||||
@apply z-10
|
||||
}
|
||||
}
|
||||
|
||||
&-canvas {
|
||||
@apply relative h-[50vh] min-h-[600px];
|
||||
@apply absolute top-0 bottom-0;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -301,10 +308,10 @@ button {
|
|||
}
|
||||
|
||||
&-item {
|
||||
@apply flex flex-row gap-4 items-center justify-start xl:justify-center flex-wrap xl:flex-nowrap;
|
||||
@apply flex flex-row items-center justify-start flex-wrap;
|
||||
|
||||
label {
|
||||
@apply w-full xl:w-auto;
|
||||
@apply w-full;
|
||||
}
|
||||
|
||||
.icon {
|
||||
|
@ -316,7 +323,7 @@ button {
|
|||
}
|
||||
|
||||
&_checkbox {
|
||||
@apply w-full xl:w-auto flex-row xl:flex-initial flex-nowrap
|
||||
@apply w-full xl:w-auto flex-row xl:flex-initial flex-nowrap gap-4
|
||||
}
|
||||
|
||||
input[type=range] {
|
||||
|
|
|
@ -1,59 +1,37 @@
|
|||
<script setup lang="ts">
|
||||
import { TresCanvas } from '@tresjs/core'
|
||||
import { OrbitControls } from '@tresjs/cientos'
|
||||
//@ts-ignore
|
||||
import { useGLTF } from '@tresjs/cientos'
|
||||
import { degToRad, radToDeg } from 'three/src/math/MathUtils.js';
|
||||
import { Stats, OrbitControls } from '@tresjs/cientos'
|
||||
import { degToRad } from 'three/src/math/MathUtils.js';
|
||||
|
||||
const fence_section = use_fence_section()
|
||||
const section_count = use_section_count()
|
||||
const extra_section = use_extra_section()
|
||||
const max_size = use_max_size()
|
||||
|
||||
const lamelles_count = use_lamelles_count()
|
||||
const lamelle_height = use_lamelle_height()
|
||||
const defDistance = 3
|
||||
const controlsState = reactive({
|
||||
distance: section_count.value,
|
||||
minDistance: 10,
|
||||
maxDistance: 20,
|
||||
minDistance: defDistance,
|
||||
maxDistance: defDistance,
|
||||
position: { x: 0, y: 0, z: 0 },
|
||||
// enablePan: false,
|
||||
minPolarAngle: degToRad(30),
|
||||
maxPolarAngle: degToRad(80),
|
||||
enablePan: false,
|
||||
enableZoom: false,
|
||||
minPolarAngle: degToRad(60),
|
||||
maxPolarAngle: degToRad(90),
|
||||
})
|
||||
const cameraStat = reactive({
|
||||
position: [-4, 2, 8],
|
||||
position: [0, 0, 5],
|
||||
aspect: 1920 / 600,
|
||||
// fov: 40,
|
||||
})
|
||||
|
||||
const pointLight = ref()
|
||||
const loadAll = async () => {
|
||||
const { scene: light } = await useGLTF('/models_light/zabor_so_svetom.glb')
|
||||
pointLight.value = light.children[2].clone()
|
||||
pointLight.value.intensity = pointLight.value.intensity * 0.05
|
||||
pointLight.value.shadow.bias = -0.002
|
||||
const j = 4
|
||||
pointLight.value.shadow.mapSize.x = 512 * j
|
||||
pointLight.value.shadow.mapSize.y = 512 * j
|
||||
|
||||
const k = 1
|
||||
// pointLight.value.position.x = pointLight.value.position.x * k
|
||||
// pointLight.value.position.y = pointLight.value.position.y * k
|
||||
// pointLight.value.position.z = pointLight.value.position.z * k
|
||||
pointLight.value.position.x = pointLight.value.position.x * k
|
||||
pointLight.value.position.y = pointLight.value.position.z * k
|
||||
pointLight.value.position.z = pointLight.value.position.z * k
|
||||
}
|
||||
const camera = ref("camera")
|
||||
|
||||
onMounted(() => {
|
||||
cameraStat.aspect = window.innerWidth / (window.innerHeight * 0.5)
|
||||
loadAll()
|
||||
})
|
||||
watch([section_count, extra_section], () => {
|
||||
let v = (section_count.value + ~~(!!extra_section.value)) * 2
|
||||
if (v < controlsState.minDistance) v = controlsState.minDistance;
|
||||
if (v > controlsState.maxDistance) v = controlsState.maxDistance;
|
||||
// (camera.value as any).position.normalize().multiplyScalar(v)
|
||||
let v = (section_count.value + ~~(!!extra_section.value));
|
||||
if (v <= defDistance) v = defDistance
|
||||
controlsState.minDistance = v;
|
||||
controlsState.maxDistance = v;
|
||||
(camera.value as any).position.normalize().multiplyScalar(v)
|
||||
})
|
||||
</script>
|
||||
<template>
|
||||
|
@ -65,25 +43,16 @@ watch([section_count, extra_section], () => {
|
|||
</div>
|
||||
</template>
|
||||
<Loader />
|
||||
<TresCanvas clear-color="#ccc">
|
||||
<Stats />
|
||||
<TresCanvas shadows>
|
||||
<TresPerspectiveCamera v-bind="cameraStat" ref="camera" />
|
||||
<OrbitControls v-bind="controlsState" make-default />
|
||||
<TresGroup>
|
||||
<TresGroup :position-y="-0.5">
|
||||
<Suspense>
|
||||
<ModelParametric />
|
||||
</Suspense>
|
||||
</TresGroup>
|
||||
<TresMesh receive-shadow name="ground">
|
||||
<TresCircleGeometry :args="[50, 32]" :rotate-x="-Math.PI * 0.5" />
|
||||
<TresShadowMaterial :opacity="0.2" />
|
||||
</TresMesh>
|
||||
|
||||
<template v-if="pointLight">
|
||||
<TresPointLight v-bind="pointLight.clone()" cast-shadow />
|
||||
<TresPointLight v-bind="pointLight.clone()" :position-x="pointLight.position.x * -1"
|
||||
:position-z="pointLight.position.z * -1" cast-shadow />
|
||||
</template>
|
||||
<TresAmbientLight intensity="10" />
|
||||
</TresCanvas>
|
||||
</ClientOnly>
|
||||
</div>
|
||||
|
|
|
@ -151,69 +151,52 @@ const goal = (target: string, params: object) => {
|
|||
</script>
|
||||
<template>
|
||||
<div class="container relative py-4">
|
||||
<form class="form">
|
||||
<div class="col-span-12 sm:col-span-6">
|
||||
<div class="form-row">
|
||||
<div class="form-item w-full">
|
||||
<label for="length">Длина ламельного блока, мм</label>
|
||||
<input disabled :value.input="`${form_state.length.toFixed(0)} мм`" class="w-28" />
|
||||
<input id="length" type="range" class="xl:w-full" v-bind="parametric.length"
|
||||
v-model="form_state.length" :disabled="form_state.auto_length" :ref="form_refs.length" />
|
||||
</div>
|
||||
<div class="form-item w-full">
|
||||
<label for="height">Высота забора, мм</label>
|
||||
<input disabled :value="`${form_state.height} мм`" class="w-28" />
|
||||
<input id="height" type="range" class="xl:w-full" v-bind="parametric.height"
|
||||
v-model="form_state.height" :ref="form_refs.height" />
|
||||
</div>
|
||||
<div class="col-span-3">
|
||||
<div class="form-row">
|
||||
<div class="form-item w-full">
|
||||
<label for="length">Длина ламельного блока, мм</label>
|
||||
<input disabled :value.input="`${form_state.length.toFixed(0)} мм`" class="w-28" />
|
||||
<input id="length" type="range" class="xl:w-full" v-bind="parametric.length"
|
||||
v-model="form_state.length" :disabled="form_state.auto_length" :ref="form_refs.length" />
|
||||
</div>
|
||||
<div class="form-item w-full">
|
||||
<label for="height">Высота забора, мм</label>
|
||||
<input disabled :value="`${form_state.height} мм`" class="w-28" />
|
||||
<input id="height" type="range" class="xl:w-full" v-bind="parametric.height"
|
||||
v-model="form_state.height" :ref="form_refs.height" />
|
||||
</div>
|
||||
|
||||
<div class="form-item">
|
||||
<label for="total_length">Общая длина забора, м</label>
|
||||
<input type="number" id="total_length" v-bind="parametric.total_length" min=0
|
||||
v-model="form_state.total_length" :ref="form_refs.total_length" />
|
||||
</div>
|
||||
|
||||
<div class="form-item form-item_checkbox">
|
||||
<input id="auto_length" type="checkbox" v-model="form_state.auto_length" />
|
||||
<label for="auto_length">Автоматический подбор секции</label>
|
||||
</div>
|
||||
<div class="form-item form-item_checkbox">
|
||||
<input id="remove_pillar" type="checkbox" v-model="form_state.remove_pillar" />
|
||||
<label for="remove_pillar">Без столбов</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-span-12 sm:col-span-6">
|
||||
<div class="form-row">
|
||||
<div class="form-item">
|
||||
<label for="lamelle_color">Цвет ламелей</label>
|
||||
<input id="lamelle_color" type="text" :value="getColorNameFromRal(lamelle_color)" class="w-60"
|
||||
disabled />
|
||||
<ColorPicker :cb="setLamelleColor" />
|
||||
</div>
|
||||
<div class="form-item">
|
||||
<label for="pillar_color">Цвет столба</label>
|
||||
<input id="pillar_color" type="text" :value="getColorNameFromRal(pillar_color)" class="w-60"
|
||||
disabled />
|
||||
<ColorPicker :cb="setPillarColor" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-span-3 col-start-10">
|
||||
<div class="form-item">
|
||||
<label for="lamelle_color">Цвет ламелей</label>
|
||||
<input id="lamelle_color" type="text" :value="getColorNameFromRal(lamelle_color)" class="w-60"
|
||||
disabled />
|
||||
<ColorPicker :cb="setLamelleColor" />
|
||||
</div>
|
||||
<div class="form-item">
|
||||
<label for="pillar_color">Цвет столба</label>
|
||||
<input id="pillar_color" type="text" :value="getColorNameFromRal(pillar_color)" class="w-60" disabled />
|
||||
<ColorPicker :cb="setPillarColor" />
|
||||
</div>
|
||||
</div>
|
||||
<template v-if="(form_state.total_length * 1000) >= parametric.length.min">
|
||||
<div class="col-span-12">
|
||||
<div class="form-row">
|
||||
<div class="form-item">
|
||||
<label for="total_length">Общая длина забора, м</label>
|
||||
<input type="number" id="total_length" v-bind="parametric.total_length" min=0
|
||||
v-model="form_state.total_length" :ref="form_refs.total_length" />
|
||||
</div>
|
||||
<div class="form-item xl:w-2/4 text-sm xl:text-base">
|
||||
<p v-if="form_state.total_length_mm < parametric.length.min" class="text-ioprim">
|
||||
Выбранный размер забора слишком мал для расчета стоимости. Пожалуйста, выберите больший
|
||||
размер, чтобы продолжить.
|
||||
</p>
|
||||
<p v-if="form_state.extra_section" class="text-ioprim">
|
||||
Внимание! Дополнительная секция приводит к увеличению стоимости.
|
||||
Рекомендуем вам изменить длину забора или длину секции!
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-row min-h-12 mt-2 xl:mt-0">
|
||||
<div class="form-item form-item_checkbox">
|
||||
<input id="auto_length" type="checkbox" v-model="form_state.auto_length" />
|
||||
<label for="auto_length">Автоматический подбор секции</label>
|
||||
</div>
|
||||
<div class="form-item form-item_checkbox">
|
||||
<input id="remove_pillar" type="checkbox" v-model="form_state.remove_pillar" />
|
||||
<label for="remove_pillar">Без столбов</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<template v-if="(form_state.total_length * 1000) >= parametric.length.min">
|
||||
<div class="col-span-12 xl:col-span-8 xl:col-start-3 grid calc_table">
|
||||
<div class="grid grid-cols-6">
|
||||
<div class="col-span-4 calc_table-maincell">Секции</div>
|
||||
|
@ -250,7 +233,19 @@ const goal = (target: string, params: object) => {
|
|||
<div class="col-span-12 text-center mb-4">
|
||||
<button @click.prevent="toggleModal">Рассчитать</button>
|
||||
</div>
|
||||
</template>
|
||||
</form>
|
||||
<div class="col-span-12">
|
||||
<div class="form-item xl:w-2/4 text-sm xl:text-base">
|
||||
<p v-if="form_state.total_length_mm < parametric.length.min" class="text-ioprim">
|
||||
Выбранный размер забора слишком мал для расчета стоимости. Пожалуйста, выберите больший
|
||||
размер, чтобы продолжить.
|
||||
</p>
|
||||
<p v-if="form_state.extra_section" class="text-ioprim">
|
||||
Внимание! Дополнительная секция приводит к увеличению стоимости.
|
||||
Рекомендуем вам изменить длину забора или длину секции!
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
</div>
|
||||
</template>
|
|
@ -9,7 +9,6 @@ const fence_section = use_fence_section()
|
|||
const section_count = use_section_count()
|
||||
const extra_section = use_extra_section()
|
||||
const remove_pillar = use_remove_pillar()
|
||||
const max_size = use_max_size()
|
||||
|
||||
const lSize = lamelle_height.value
|
||||
const bSize = 0.0235
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
<script setup lang="ts">
|
||||
import { Box3, Vector3 } from 'three';
|
||||
import { useLoop, useTresContext } from '@tresjs/core';
|
||||
import { Box3, Object3D, Vector3 } from 'three';
|
||||
import { degToRad } from 'three/src/math/MathUtils.js';
|
||||
|
||||
const props = defineProps(['number', 'count', 'models'])
|
||||
|
@ -16,33 +17,52 @@ const rotate = () => {
|
|||
}
|
||||
}
|
||||
const { seekByName } = useSeek()
|
||||
const { scene } = useTresContext()
|
||||
const { scene, camera } = useTresContext()
|
||||
|
||||
const section_count = use_section_count()
|
||||
const extra_section = use_extra_section()
|
||||
const fence_section = use_fence_section()
|
||||
const max_size = use_max_size()
|
||||
const lamelle_count = use_lamelles_count()
|
||||
const lamelle_height = use_lamelle_height()
|
||||
|
||||
const total = ref((section_count.value + ~~(!!extra_section.value)))
|
||||
const position = ref(new Vector3())
|
||||
|
||||
const clickable_positions = reactive({
|
||||
'top': [position.value.x, (lamelle_count.value + 1) * lamelle_height.value, 0],
|
||||
'lam': [position.value.x, position.value.y * 0.5, 0]
|
||||
})
|
||||
const clickable_pointers = ref<any[]>([])
|
||||
const clickable_refs = ref<any>([])
|
||||
|
||||
Object.entries(clickable_positions).map(el => {
|
||||
const p = props.models.pointer.clone()
|
||||
p.position.set(...el[1])
|
||||
p.updateMatrixWorld()
|
||||
p.name = `clickable_${props.number}_${el[0]}`
|
||||
clickable_pointers.value.push(p)
|
||||
clickable_refs.value.push(ref(p.name))
|
||||
})
|
||||
|
||||
const count_pos = () => {
|
||||
total.value = (section_count.value + ~~(!!extra_section.value))
|
||||
|
||||
const line = seekByName(scene.value, `line_${props.number}`)
|
||||
const line_size = new Vector3()
|
||||
const line_pos = new Vector3()
|
||||
const line_lpos = new Vector3()
|
||||
|
||||
if (line && line.children.length) {
|
||||
line.updateMatrixWorld()
|
||||
new Box3().expandByObject(line).getSize(line_size)
|
||||
line.getWorldPosition(line_pos)
|
||||
console.log(`line_${props.number}`, line, line_size, line_pos)
|
||||
}
|
||||
const line1 = seekByName(scene.value, `line_1`);
|
||||
const line1 = seekByName(scene.value, `line_1_inner`);
|
||||
const line1_size = new Vector3()
|
||||
const line1_pos = new Vector3()
|
||||
if (line1) {
|
||||
new Box3().expandByObject(line1).getSize(line1_size)
|
||||
line1.getWorldPosition(line1_pos)
|
||||
console.log('first', line1, line1_size, line1_pos)
|
||||
}
|
||||
const k = ((line1_size.x / props.count) - line1_size.z) * 0.5
|
||||
switch (props.number) {
|
||||
|
@ -60,22 +80,67 @@ const count_pos = () => {
|
|||
position.value.x = line1_size.x - k
|
||||
break;
|
||||
}
|
||||
line?.updateMatrixWorld()
|
||||
|
||||
clickable_positions.top = [position.value.x, (lamelle_count.value + 1) * lamelle_height.value, 0];
|
||||
clickable_positions.lam = [position.value.x, position.value.y * 0.5, 0];
|
||||
}
|
||||
watch(clickable_positions, () => {
|
||||
clickable_refs.value.map((el: Ref<Object3D[]>) => {
|
||||
const name = el.value[0].name.replace(`clickable_${props.number}_`, '')
|
||||
if (name in clickable_positions) {
|
||||
const p = clickable_positions[name as keyof typeof clickable_positions];
|
||||
console.log(props.number, p, el.value[0].name)
|
||||
el.value[0].position.set(p[0], p[1], p[2])
|
||||
el.value[0].children[0].position.set(p[0], p[1], p[2])
|
||||
el.value[0].updateMatrixWorld()
|
||||
}
|
||||
})
|
||||
}, { deep: true })
|
||||
|
||||
onMounted(() => {
|
||||
count_pos()
|
||||
})
|
||||
watch(() => [props.count, section_count.value, extra_section.value], count_pos)
|
||||
watch(() => [props.count, fence_section.value, section_count.value, extra_section.value, lamelle_count.value],
|
||||
count_pos,
|
||||
{ flush: 'post' }
|
||||
)
|
||||
|
||||
const { onBeforeRender } = useLoop()
|
||||
onBeforeRender(() => {
|
||||
clickable_refs.value.map((el: any) => {
|
||||
if (el.value[0] && el.value[0].children) {
|
||||
el.value[0].children[0].lookAt(camera.value?.position);
|
||||
el.value[0].children[0].rotateX(degToRad(90));
|
||||
el.value[0].children[0].rotateZ(degToRad(15));
|
||||
|
||||
const dis_to_cam = camera.value?.position.distanceTo(el.value[0].position);
|
||||
if (dis_to_cam) {
|
||||
const scaling = (0.66 * dis_to_cam) / 100
|
||||
el.value[0].children[0].scale.set(scaling, scaling, scaling);
|
||||
el.value[0].updateMatrixWorld()
|
||||
}
|
||||
}
|
||||
})
|
||||
})
|
||||
</script>
|
||||
<template>
|
||||
<TresGroup :name="`line_${props.number}`" :rotate-y="rotate()" :position-x="position.x" :position-y="position.y"
|
||||
:position-z="position.z">
|
||||
<template v-for="i in props.count">
|
||||
<template v-if="(i + (props.number - 1) * props.count) <= total"
|
||||
:key="(i + (props.number - 1) * props.count)">
|
||||
<ModelFence :index="i" :models="props.models"
|
||||
:last_element="(i + (props.number - 1) * props.count) == total"
|
||||
:first_element="i == 1 && props.count == 1" />
|
||||
<TresGroup :name="`line_${props.number}_inner`">
|
||||
<template v-for="i in props.count">
|
||||
<template v-if="(i + (props.number - 1) * props.count) <= 1"
|
||||
:key="(i + (props.number - 1) * props.count)">
|
||||
<ModelFence :index="i" :models="props.models"
|
||||
:last_element="(i + (props.number - 1) * props.count) == total"
|
||||
:first_element="i == 1 && props.number == 1" />
|
||||
</template>
|
||||
</template>
|
||||
</template>
|
||||
</TresGroup>
|
||||
<TresGroup name="pointer">
|
||||
<template v-for="(p, i) in clickable_pointers">
|
||||
<TresObject3D v-bind="p.clone()" :ref="clickable_refs[i]" :visible="false" />
|
||||
</template>
|
||||
</TresGroup>
|
||||
</TresGroup>
|
||||
</template>
|
|
@ -1,27 +1,26 @@
|
|||
<script setup lang="ts">
|
||||
import {
|
||||
PCFSoftShadowMap,
|
||||
EquirectangularReflectionMapping,
|
||||
CineonToneMapping,
|
||||
Euler,
|
||||
Mesh,
|
||||
Group,
|
||||
Object3D,
|
||||
Vector3,
|
||||
EquirectangularReflectionMapping,
|
||||
Euler,
|
||||
PMREMGenerator,
|
||||
} from 'three';
|
||||
import { GainMapLoader, } from '@monogrid/gainmap-js'
|
||||
//@ts-ignore
|
||||
import { useGLTF, } from '@tresjs/cientos'
|
||||
import { getColorHexFromRal, type ralTypes } from '../ral';
|
||||
import { degToRad, radToDeg } from 'three/src/math/MathUtils.js';
|
||||
|
||||
const pillar_color = use_pillar_color()
|
||||
const lamelle_color = use_lamelle_color()
|
||||
const section_count = use_section_count()
|
||||
const lamelle_count = use_lamelles_count()
|
||||
const extra_section = use_extra_section()
|
||||
const max_size = use_max_size()
|
||||
|
||||
const { scene, renderer, camera } = useTresContext()
|
||||
const { scene, renderer, camera, controls } = useTresContext()
|
||||
renderer.value.toneMapping = CineonToneMapping
|
||||
renderer.value.toneMappingExposure = 0.5
|
||||
|
||||
|
@ -29,13 +28,13 @@ renderer.value.shadowMap.enabled = true
|
|||
renderer.value.shadowMap.type = PCFSoftShadowMap
|
||||
|
||||
const { scene: top_model } = await useGLTF('/models_one/verh_100.glb', { draco: true })
|
||||
// const { scene: fence_model } = await useGLTF('/models_one/fence.glb', { draco: true })
|
||||
const { scene: model_fence_top } = await useGLTF('/fence_one/top.glb')
|
||||
const { scene: model_fence_center } = await useGLTF('/fence_one/center.glb')
|
||||
const { scene: model_fence_bottom } = await useGLTF('/fence_one/bottom.glb')
|
||||
const { scene: model_fence_inner } = await useGLTF('/fence_one/inner.glb')
|
||||
const { scene: fastening_model } = await useGLTF('/models_one/krepleniye_planok (1).glb', { draco: true });
|
||||
const { scene: lamelle_model } = await useGLTF('/models_one/lamel_100.glb', { draco: true });
|
||||
const { scene: point_model } = await useGLTF('/models_one/pointer.glb');
|
||||
|
||||
[model_fence_top, model_fence_bottom].map((sc: Object3D) =>
|
||||
sc.traverse((child: Object3D) => {
|
||||
|
@ -44,6 +43,7 @@ const { scene: lamelle_model } = await useGLTF('/models_one/lamel_100.glb', { dr
|
|||
}
|
||||
})
|
||||
)
|
||||
point_model.traverse((el: Object3D) => el.position.set(0, 0, 0))
|
||||
|
||||
const top = ref(top_model)
|
||||
const fence = ref(model_fence_center)
|
||||
|
@ -52,6 +52,7 @@ const fence_bottom = ref(model_fence_bottom)
|
|||
const fence_inner = ref(model_fence_inner)
|
||||
const fastening = ref(fastening_model)
|
||||
const lamelle = ref(lamelle_model)
|
||||
const pointer = ref(point_model)
|
||||
|
||||
if (!pillar_color.value) {
|
||||
const r = Math.floor(Math.random() * predefPillarColors.length)
|
||||
|
@ -66,6 +67,8 @@ set_material(lamelle.value, getColorHexFromRal(lamelle_color.value));
|
|||
(el: Ref) => { set_material(el.value, getColorHexFromRal(pillar_color.value)) });
|
||||
[fence_inner].map(
|
||||
(el: Ref) => { set_material(el.value, getColorHexFromRal(pillar_color.value), lamelle_count.value) });
|
||||
set_material(pointer.value, getColorHexFromRal('5012'));
|
||||
|
||||
|
||||
const { seek, seekAll } = useSeek()
|
||||
watch(lamelle_color, () => {
|
||||
|
@ -98,7 +101,6 @@ const size = ref(Math.ceil(total.value / 4))
|
|||
const count = ref((total.value >= 4) ? size.value : total.value)
|
||||
|
||||
watch(() => [section_count.value, extra_section.value], () => {
|
||||
console.log('parametric line clear')
|
||||
total.value = (section_count.value + ~~(!!extra_section.value))
|
||||
size.value = Math.ceil(total.value / 4);
|
||||
count.value = (total.value >= 4) ? size.value : total.value;
|
||||
|
@ -121,8 +123,9 @@ watch(() => [section_count.value, extra_section.value], () => {
|
|||
n = 0
|
||||
}
|
||||
}
|
||||
if (line?.children && n < line?.children.length) {
|
||||
line.children = [...line?.children.slice(0, n)]
|
||||
const inner = seek(line, 'name', line.name + '_inner');
|
||||
if (inner?.children && n < inner?.children.length) {
|
||||
inner.children = [...inner?.children.slice(0, n)]
|
||||
}
|
||||
});
|
||||
})
|
||||
|
@ -130,14 +133,34 @@ watch(() => [section_count.value, extra_section.value], () => {
|
|||
watch(lamelle_count, () => {
|
||||
[fence_inner].map(
|
||||
(el: Ref) => { set_material(el.value, getColorHexFromRal(pillar_color.value), lamelle_count.value) });
|
||||
camera.value?.lookAt(10, 10, 10)
|
||||
})
|
||||
const pmremGenerator = new PMREMGenerator(renderer.value);
|
||||
pmremGenerator.compileEquirectangularShader();
|
||||
onMounted(async () => {
|
||||
const loader = new GainMapLoader(renderer.value)
|
||||
const result = await loader.loadAsync([
|
||||
'hdrmaps/hdr.webp',
|
||||
'hdrmaps/hdr-gainmap.webp',
|
||||
'hdrmaps/hdr.json',
|
||||
])
|
||||
if (renderer.value && camera.value) {
|
||||
renderer.value.render(scene.value, camera.value)
|
||||
}
|
||||
const exrCubeRenderTarget = pmremGenerator.fromEquirectangular(result.renderTarget.texture);
|
||||
const newEnvMap = exrCubeRenderTarget ? exrCubeRenderTarget.texture : null;
|
||||
|
||||
scene.value.environment = newEnvMap
|
||||
scene.value.environmentIntensity = 1.5
|
||||
result.renderTarget.texture.dispose();
|
||||
})
|
||||
|
||||
</script>
|
||||
<template>
|
||||
<TresGroup name="base">
|
||||
<template v-for="line in (total >= 4) ? 4 : 1" :key="`${line}_${count}`">
|
||||
<ModelLine :models="{ top, fence, fence_top, fence_bottom, fence_inner, fastening, lamelle }" :number="line"
|
||||
:count="count" />
|
||||
<ModelLine :models="{ top, fence, fence_top, fence_bottom, fence_inner, fastening, lamelle, pointer }"
|
||||
:number="line" :count="count" />
|
||||
</template>
|
||||
</TresGroup>
|
||||
</template>
|
|
@ -3,8 +3,8 @@ import type { ralTypes } from '@/components/ral'
|
|||
export const predefPillarColors = ['3004', '7043', '6028', '5013', '8016', '1020', '3005', '4009']
|
||||
export const predefLamelleColors = ['3009', '9003', '6027', '5024', '9001', '1012', '3007', '4007']
|
||||
|
||||
const n = 2
|
||||
const min = 1300
|
||||
const n = 4
|
||||
const min = 1370
|
||||
|
||||
export const use_lamelle_height = () => useState<number>('lamelle_height', () => 0.115)
|
||||
export const use_lamelles_count = () => useState('lamelles_count', () => 14)
|
||||
|
|
|
@ -10,13 +10,14 @@
|
|||
"@artmizu/yandex-metrika-nuxt": "^1.0.4",
|
||||
"@monogrid/gainmap-js": "^3.0.5",
|
||||
"@nuxt/image": "^1.7.0",
|
||||
"@nuxtjs/robots": "^3.0.0",
|
||||
"@nuxtjs/robots": "^4.0.0",
|
||||
"@nuxtjs/sitemap": "^5.3.5",
|
||||
"@nuxtjs/tailwindcss": "^6.12.0",
|
||||
"@tailwindcss/typography": "^0.5.13",
|
||||
"@tresjs/cientos": "^3.9.0",
|
||||
"@tresjs/core": "^4.0.2",
|
||||
"@tresjs/nuxt": "^2.1.2",
|
||||
"@tresjs/post-processing": "^0.7.1",
|
||||
"consola": "^3.2.3",
|
||||
"marked": "^12.0.2",
|
||||
"nuxt": "^3.11.2",
|
||||
|
@ -1379,9 +1380,10 @@
|
|||
}
|
||||
},
|
||||
"node_modules/@jridgewell/sourcemap-codec": {
|
||||
"version": "1.4.15",
|
||||
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
|
||||
"integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg=="
|
||||
"version": "1.5.0",
|
||||
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
|
||||
"integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@jridgewell/trace-mapping": {
|
||||
"version": "0.3.25",
|
||||
|
@ -2029,12 +2031,93 @@
|
|||
}
|
||||
},
|
||||
"node_modules/@nuxtjs/robots": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/@nuxtjs/robots/-/robots-3.0.0.tgz",
|
||||
"integrity": "sha512-qsHGW1KXBvV5Kq7u3huPnFCUTbHS4Fk8Za2mNPgmUXcwLgp3exvhPtdZfIdjrCF/aZk3A8OZONNmGghs6CecBA==",
|
||||
"version": "4.1.7",
|
||||
"resolved": "https://registry.npmjs.org/@nuxtjs/robots/-/robots-4.1.7.tgz",
|
||||
"integrity": "sha512-1rz2oyBNmpfIzqNG9LfGft+H8Wpp1BMmPyNhkm7BuG/jUXTBFaCh6HDeK6Otx2y53Z9JtCDhiIs/JHj/L4WLPw==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@nuxt/kit": "^3.0.0",
|
||||
"h3": "^1.0.1"
|
||||
"@nuxt/devtools-kit": "^1.4.1",
|
||||
"@nuxt/kit": "^3.13.1",
|
||||
"consola": "^3.2.3",
|
||||
"defu": "^6.1.4",
|
||||
"nuxt-site-config": "^2.2.16",
|
||||
"nuxt-site-config-kit": "^2.2.16",
|
||||
"pathe": "^1.1.2",
|
||||
"pkg-types": "^1.2.0",
|
||||
"sirv": "^2.0.4",
|
||||
"std-env": "^3.7.0",
|
||||
"ufo": "^1.5.4"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/harlan-zw"
|
||||
}
|
||||
},
|
||||
"node_modules/@nuxtjs/robots/node_modules/@nuxt/devtools-kit": {
|
||||
"version": "1.5.0",
|
||||
"resolved": "https://registry.npmjs.org/@nuxt/devtools-kit/-/devtools-kit-1.5.0.tgz",
|
||||
"integrity": "sha512-Q8sOquz9CoUMTABo6Bq+nkbNMZi+WVN4xpz1USZPZazcJhSj9imSmQRSycY2fBYqkfB1AKBRhm2UV2ujCQfw0Q==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@nuxt/kit": "^3.13.2",
|
||||
"@nuxt/schema": "^3.13.2",
|
||||
"execa": "^7.2.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"vite": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/@nuxtjs/robots/node_modules/@nuxt/kit": {
|
||||
"version": "3.13.2",
|
||||
"resolved": "https://registry.npmjs.org/@nuxt/kit/-/kit-3.13.2.tgz",
|
||||
"integrity": "sha512-KvRw21zU//wdz25IeE1E5m/aFSzhJloBRAQtv+evcFeZvuroIxpIQuUqhbzuwznaUwpiWbmwlcsp5uOWmi4vwA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@nuxt/schema": "3.13.2",
|
||||
"c12": "^1.11.2",
|
||||
"consola": "^3.2.3",
|
||||
"defu": "^6.1.4",
|
||||
"destr": "^2.0.3",
|
||||
"globby": "^14.0.2",
|
||||
"hash-sum": "^2.0.0",
|
||||
"ignore": "^5.3.2",
|
||||
"jiti": "^1.21.6",
|
||||
"klona": "^2.0.6",
|
||||
"knitwork": "^1.1.0",
|
||||
"mlly": "^1.7.1",
|
||||
"pathe": "^1.1.2",
|
||||
"pkg-types": "^1.2.0",
|
||||
"scule": "^1.3.0",
|
||||
"semver": "^7.6.3",
|
||||
"ufo": "^1.5.4",
|
||||
"unctx": "^2.3.1",
|
||||
"unimport": "^3.12.0",
|
||||
"untyped": "^1.4.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": "^14.18.0 || >=16.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@nuxtjs/robots/node_modules/@nuxt/schema": {
|
||||
"version": "3.13.2",
|
||||
"resolved": "https://registry.npmjs.org/@nuxt/schema/-/schema-3.13.2.tgz",
|
||||
"integrity": "sha512-CCZgpm+MkqtOMDEgF9SWgGPBXlQ01hV/6+2reDEpJuqFPGzV8HYKPBcIFvn7/z5ahtgutHLzjP71Na+hYcqSpw==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"compatx": "^0.1.8",
|
||||
"consola": "^3.2.3",
|
||||
"defu": "^6.1.4",
|
||||
"hookable": "^5.5.3",
|
||||
"pathe": "^1.1.2",
|
||||
"pkg-types": "^1.2.0",
|
||||
"scule": "^1.3.0",
|
||||
"std-env": "^3.7.0",
|
||||
"ufo": "^1.5.4",
|
||||
"uncrypto": "^0.1.3",
|
||||
"unimport": "^3.12.0",
|
||||
"untyped": "^1.4.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": "^14.18.0 || >=16.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@nuxtjs/sitemap": {
|
||||
|
@ -3991,6 +4074,47 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"node_modules/@tresjs/post-processing": {
|
||||
"version": "0.7.1",
|
||||
"resolved": "https://registry.npmjs.org/@tresjs/post-processing/-/post-processing-0.7.1.tgz",
|
||||
"integrity": "sha512-MLrjxR4rJ55MOYFKMEZ8aqh5no2/sOG1fdYk2B49Ntx2p2etyuVpI6e9BBAvrc4M/wktRHkQ2JNDbgMaCiJoMg==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@tresjs/core": "^3.5.1",
|
||||
"@unocss/core": "^0.58.0",
|
||||
"@vueuse/core": "^10.6.1",
|
||||
"postprocessing": "^6.33.4",
|
||||
"three-stdlib": "^2.28.7"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"three": ">=0.133",
|
||||
"vue": ">=3.3"
|
||||
}
|
||||
},
|
||||
"node_modules/@tresjs/post-processing/node_modules/@tresjs/core": {
|
||||
"version": "3.9.0",
|
||||
"resolved": "https://registry.npmjs.org/@tresjs/core/-/core-3.9.0.tgz",
|
||||
"integrity": "sha512-6el70oXSduTvSA3XCI8/rQV2GzcgCLceZKA443CTU/MBPmRDULJ12q/UYl18Ij4CJ68rTqgVi0Da+WNMrs784A==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@alvarosabu/utils": "^3.1.1",
|
||||
"@vue/devtools-api": "^6.6.1",
|
||||
"@vueuse/core": "^10.7.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"three": ">=0.133",
|
||||
"vue": ">=3.3"
|
||||
}
|
||||
},
|
||||
"node_modules/@tresjs/post-processing/node_modules/@unocss/core": {
|
||||
"version": "0.58.9",
|
||||
"resolved": "https://registry.npmjs.org/@unocss/core/-/core-0.58.9.tgz",
|
||||
"integrity": "sha512-wYpPIPPsOIbIoMIDuH8ihehJk5pAZmyFKXIYO/Kro98GEOFhz6lJoLsy6/PZuitlgp2/TSlubUuWGjHWvp5osw==",
|
||||
"license": "MIT",
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/antfu"
|
||||
}
|
||||
},
|
||||
"node_modules/@trysound/sax": {
|
||||
"version": "0.2.0",
|
||||
"resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz",
|
||||
|
@ -6457,9 +6581,10 @@
|
|||
}
|
||||
},
|
||||
"node_modules/c12": {
|
||||
"version": "1.11.1",
|
||||
"resolved": "https://registry.npmjs.org/c12/-/c12-1.11.1.tgz",
|
||||
"integrity": "sha512-KDU0TvSvVdaYcQKQ6iPHATGz/7p/KiVjPg4vQrB6Jg/wX9R0yl5RZxWm9IoZqaIHD2+6PZd81+KMGwRr/lRIUg==",
|
||||
"version": "1.11.2",
|
||||
"resolved": "https://registry.npmjs.org/c12/-/c12-1.11.2.tgz",
|
||||
"integrity": "sha512-oBs8a4uvSDO9dm8b7OCFW7+dgtVrwmwnrVXYzLm43ta7ep2jCn/0MhoUFygIWtxhyy6+/MG7/agvpY0U1Iemew==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"chokidar": "^3.6.0",
|
||||
"confbox": "^0.1.7",
|
||||
|
@ -6471,7 +6596,7 @@
|
|||
"ohash": "^1.1.3",
|
||||
"pathe": "^1.1.2",
|
||||
"perfect-debounce": "^1.0.0",
|
||||
"pkg-types": "^1.1.1",
|
||||
"pkg-types": "^1.2.0",
|
||||
"rc9": "^2.1.2"
|
||||
},
|
||||
"peerDependencies": {
|
||||
|
@ -8585,9 +8710,10 @@
|
|||
]
|
||||
},
|
||||
"node_modules/ignore": {
|
||||
"version": "5.3.1",
|
||||
"resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz",
|
||||
"integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==",
|
||||
"version": "5.3.2",
|
||||
"resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
|
||||
"integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">= 4"
|
||||
}
|
||||
|
@ -9510,11 +9636,12 @@
|
|||
}
|
||||
},
|
||||
"node_modules/magic-string": {
|
||||
"version": "0.30.10",
|
||||
"resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.10.tgz",
|
||||
"integrity": "sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==",
|
||||
"version": "0.30.11",
|
||||
"resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.11.tgz",
|
||||
"integrity": "sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@jridgewell/sourcemap-codec": "^1.4.15"
|
||||
"@jridgewell/sourcemap-codec": "^1.5.0"
|
||||
}
|
||||
},
|
||||
"node_modules/magic-string-ast": {
|
||||
|
@ -10666,64 +10793,67 @@
|
|||
}
|
||||
},
|
||||
"node_modules/nuxt-site-config": {
|
||||
"version": "2.2.15",
|
||||
"resolved": "https://registry.npmjs.org/nuxt-site-config/-/nuxt-site-config-2.2.15.tgz",
|
||||
"integrity": "sha512-V/gsWAeSWQi7FGoy6vicf6DXaaNJ/akail54dMWnrkcBre4PpBSwP7arZqmZZzj1mc0v7LoYqISr9qeXhcT1NA==",
|
||||
"version": "2.2.18",
|
||||
"resolved": "https://registry.npmjs.org/nuxt-site-config/-/nuxt-site-config-2.2.18.tgz",
|
||||
"integrity": "sha512-NU39ANP1kvRBzpEWV496y/lf9PKVv3t1VKX3zmQ1POcbzAXU4gm0Mh5NKOaLEcoXj6bQnziFNqjzHX3DAA8Aog==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@nuxt/devtools-kit": "^1.3.9",
|
||||
"@nuxt/kit": "^3.12.3",
|
||||
"@nuxt/schema": "^3.12.3",
|
||||
"nuxt-site-config-kit": "2.2.15",
|
||||
"@nuxt/devtools-kit": "^1.4.2",
|
||||
"@nuxt/kit": "^3.13.1",
|
||||
"@nuxt/schema": "^3.13.1",
|
||||
"nuxt-site-config-kit": "2.2.18",
|
||||
"pathe": "^1.1.2",
|
||||
"pkg-types": "^1.1.3",
|
||||
"pkg-types": "^1.2.0",
|
||||
"sirv": "^2.0.4",
|
||||
"site-config-stack": "2.2.15",
|
||||
"ufo": "^1.5.3"
|
||||
"site-config-stack": "2.2.18",
|
||||
"ufo": "^1.5.4"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/harlan-zw"
|
||||
}
|
||||
},
|
||||
"node_modules/nuxt-site-config-kit": {
|
||||
"version": "2.2.15",
|
||||
"resolved": "https://registry.npmjs.org/nuxt-site-config-kit/-/nuxt-site-config-kit-2.2.15.tgz",
|
||||
"integrity": "sha512-uN+JOijDt0u35rBhI3GhRHvPKncm2Nu/P3QMRIi+mwt4F/tQtlvLa1XUANkeEy8InTnPTVgs6dSDSqHP4sBXzg==",
|
||||
"version": "2.2.18",
|
||||
"resolved": "https://registry.npmjs.org/nuxt-site-config-kit/-/nuxt-site-config-kit-2.2.18.tgz",
|
||||
"integrity": "sha512-iPtf2X1fvI9m9VV04edSqNGC2EzQ1aLB7F2/AOxYRktCJxHeTdBGifuNPc90EaEIOfWx+gf3lmRd4EppGoAMSA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@nuxt/kit": "^3.12.3",
|
||||
"@nuxt/schema": "^3.12.3",
|
||||
"pkg-types": "^1.1.3",
|
||||
"site-config-stack": "2.2.15",
|
||||
"@nuxt/kit": "^3.13.1",
|
||||
"@nuxt/schema": "^3.13.1",
|
||||
"pkg-types": "^1.2.0",
|
||||
"site-config-stack": "2.2.18",
|
||||
"std-env": "^3.7.0",
|
||||
"ufo": "^1.5.3"
|
||||
"ufo": "^1.5.4"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/harlan-zw"
|
||||
}
|
||||
},
|
||||
"node_modules/nuxt-site-config-kit/node_modules/@nuxt/kit": {
|
||||
"version": "3.12.4",
|
||||
"resolved": "https://registry.npmjs.org/@nuxt/kit/-/kit-3.12.4.tgz",
|
||||
"integrity": "sha512-aNRD1ylzijY0oYolldNcZJXVyxdGzNTl+Xd0UYyFQCu9f4wqUZqQ9l+b7arCEzchr96pMK0xdpvLcS3xo1wDcw==",
|
||||
"version": "3.13.2",
|
||||
"resolved": "https://registry.npmjs.org/@nuxt/kit/-/kit-3.13.2.tgz",
|
||||
"integrity": "sha512-KvRw21zU//wdz25IeE1E5m/aFSzhJloBRAQtv+evcFeZvuroIxpIQuUqhbzuwznaUwpiWbmwlcsp5uOWmi4vwA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@nuxt/schema": "3.12.4",
|
||||
"c12": "^1.11.1",
|
||||
"@nuxt/schema": "3.13.2",
|
||||
"c12": "^1.11.2",
|
||||
"consola": "^3.2.3",
|
||||
"defu": "^6.1.4",
|
||||
"destr": "^2.0.3",
|
||||
"globby": "^14.0.2",
|
||||
"hash-sum": "^2.0.0",
|
||||
"ignore": "^5.3.1",
|
||||
"ignore": "^5.3.2",
|
||||
"jiti": "^1.21.6",
|
||||
"klona": "^2.0.6",
|
||||
"knitwork": "^1.1.0",
|
||||
"mlly": "^1.7.1",
|
||||
"pathe": "^1.1.2",
|
||||
"pkg-types": "^1.1.3",
|
||||
"pkg-types": "^1.2.0",
|
||||
"scule": "^1.3.0",
|
||||
"semver": "^7.6.3",
|
||||
"ufo": "^1.5.4",
|
||||
"unctx": "^2.3.1",
|
||||
"unimport": "^3.9.0",
|
||||
"unimport": "^3.12.0",
|
||||
"untyped": "^1.4.2"
|
||||
},
|
||||
"engines": {
|
||||
|
@ -10731,21 +10861,22 @@
|
|||
}
|
||||
},
|
||||
"node_modules/nuxt-site-config-kit/node_modules/@nuxt/schema": {
|
||||
"version": "3.12.4",
|
||||
"resolved": "https://registry.npmjs.org/@nuxt/schema/-/schema-3.12.4.tgz",
|
||||
"integrity": "sha512-H7FwBV4ChssMaeiLyPdVLOLUa0326ebp3pNbJfGgFt7rSoKh1MmgjorecA8JMxOQZziy3w6EELf4+5cgLh/F1w==",
|
||||
"version": "3.13.2",
|
||||
"resolved": "https://registry.npmjs.org/@nuxt/schema/-/schema-3.13.2.tgz",
|
||||
"integrity": "sha512-CCZgpm+MkqtOMDEgF9SWgGPBXlQ01hV/6+2reDEpJuqFPGzV8HYKPBcIFvn7/z5ahtgutHLzjP71Na+hYcqSpw==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"compatx": "^0.1.8",
|
||||
"consola": "^3.2.3",
|
||||
"defu": "^6.1.4",
|
||||
"hookable": "^5.5.3",
|
||||
"pathe": "^1.1.2",
|
||||
"pkg-types": "^1.1.3",
|
||||
"pkg-types": "^1.2.0",
|
||||
"scule": "^1.3.0",
|
||||
"std-env": "^3.7.0",
|
||||
"ufo": "^1.5.4",
|
||||
"uncrypto": "^0.1.3",
|
||||
"unimport": "^3.9.0",
|
||||
"unimport": "^3.12.0",
|
||||
"untyped": "^1.4.2"
|
||||
},
|
||||
"engines": {
|
||||
|
@ -10753,12 +10884,13 @@
|
|||
}
|
||||
},
|
||||
"node_modules/nuxt-site-config/node_modules/@nuxt/devtools-kit": {
|
||||
"version": "1.3.9",
|
||||
"resolved": "https://registry.npmjs.org/@nuxt/devtools-kit/-/devtools-kit-1.3.9.tgz",
|
||||
"integrity": "sha512-tgr/F+4BbI53/JxgaXl3cuV9dMuCXMsd4GEXN+JqtCdAkDbH3wL79GGWx0/6I9acGzRsB6UZ1H6U96nfgcIrAw==",
|
||||
"version": "1.5.0",
|
||||
"resolved": "https://registry.npmjs.org/@nuxt/devtools-kit/-/devtools-kit-1.5.0.tgz",
|
||||
"integrity": "sha512-Q8sOquz9CoUMTABo6Bq+nkbNMZi+WVN4xpz1USZPZazcJhSj9imSmQRSycY2fBYqkfB1AKBRhm2UV2ujCQfw0Q==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@nuxt/kit": "^3.12.2",
|
||||
"@nuxt/schema": "^3.12.3",
|
||||
"@nuxt/kit": "^3.13.2",
|
||||
"@nuxt/schema": "^3.13.2",
|
||||
"execa": "^7.2.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
|
@ -10766,29 +10898,30 @@
|
|||
}
|
||||
},
|
||||
"node_modules/nuxt-site-config/node_modules/@nuxt/kit": {
|
||||
"version": "3.12.4",
|
||||
"resolved": "https://registry.npmjs.org/@nuxt/kit/-/kit-3.12.4.tgz",
|
||||
"integrity": "sha512-aNRD1ylzijY0oYolldNcZJXVyxdGzNTl+Xd0UYyFQCu9f4wqUZqQ9l+b7arCEzchr96pMK0xdpvLcS3xo1wDcw==",
|
||||
"version": "3.13.2",
|
||||
"resolved": "https://registry.npmjs.org/@nuxt/kit/-/kit-3.13.2.tgz",
|
||||
"integrity": "sha512-KvRw21zU//wdz25IeE1E5m/aFSzhJloBRAQtv+evcFeZvuroIxpIQuUqhbzuwznaUwpiWbmwlcsp5uOWmi4vwA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@nuxt/schema": "3.12.4",
|
||||
"c12": "^1.11.1",
|
||||
"@nuxt/schema": "3.13.2",
|
||||
"c12": "^1.11.2",
|
||||
"consola": "^3.2.3",
|
||||
"defu": "^6.1.4",
|
||||
"destr": "^2.0.3",
|
||||
"globby": "^14.0.2",
|
||||
"hash-sum": "^2.0.0",
|
||||
"ignore": "^5.3.1",
|
||||
"ignore": "^5.3.2",
|
||||
"jiti": "^1.21.6",
|
||||
"klona": "^2.0.6",
|
||||
"knitwork": "^1.1.0",
|
||||
"mlly": "^1.7.1",
|
||||
"pathe": "^1.1.2",
|
||||
"pkg-types": "^1.1.3",
|
||||
"pkg-types": "^1.2.0",
|
||||
"scule": "^1.3.0",
|
||||
"semver": "^7.6.3",
|
||||
"ufo": "^1.5.4",
|
||||
"unctx": "^2.3.1",
|
||||
"unimport": "^3.9.0",
|
||||
"unimport": "^3.12.0",
|
||||
"untyped": "^1.4.2"
|
||||
},
|
||||
"engines": {
|
||||
|
@ -10796,21 +10929,22 @@
|
|||
}
|
||||
},
|
||||
"node_modules/nuxt-site-config/node_modules/@nuxt/schema": {
|
||||
"version": "3.12.4",
|
||||
"resolved": "https://registry.npmjs.org/@nuxt/schema/-/schema-3.12.4.tgz",
|
||||
"integrity": "sha512-H7FwBV4ChssMaeiLyPdVLOLUa0326ebp3pNbJfGgFt7rSoKh1MmgjorecA8JMxOQZziy3w6EELf4+5cgLh/F1w==",
|
||||
"version": "3.13.2",
|
||||
"resolved": "https://registry.npmjs.org/@nuxt/schema/-/schema-3.13.2.tgz",
|
||||
"integrity": "sha512-CCZgpm+MkqtOMDEgF9SWgGPBXlQ01hV/6+2reDEpJuqFPGzV8HYKPBcIFvn7/z5ahtgutHLzjP71Na+hYcqSpw==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"compatx": "^0.1.8",
|
||||
"consola": "^3.2.3",
|
||||
"defu": "^6.1.4",
|
||||
"hookable": "^5.5.3",
|
||||
"pathe": "^1.1.2",
|
||||
"pkg-types": "^1.1.3",
|
||||
"pkg-types": "^1.2.0",
|
||||
"scule": "^1.3.0",
|
||||
"std-env": "^3.7.0",
|
||||
"ufo": "^1.5.4",
|
||||
"uncrypto": "^0.1.3",
|
||||
"unimport": "^3.9.0",
|
||||
"unimport": "^3.12.0",
|
||||
"untyped": "^1.4.2"
|
||||
},
|
||||
"engines": {
|
||||
|
@ -11316,9 +11450,10 @@
|
|||
}
|
||||
},
|
||||
"node_modules/pkg-types": {
|
||||
"version": "1.1.3",
|
||||
"resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.1.3.tgz",
|
||||
"integrity": "sha512-+JrgthZG6m3ckicaOB74TwQ+tBWsFl3qVQg7mN8ulwSOElJ7gBhKzj2VkCPnZ4NlF6kEquYU+RIYNVAvzd54UA==",
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.2.0.tgz",
|
||||
"integrity": "sha512-+ifYuSSqOQ8CqP4MbZA5hDpb97n3E8SVWdJe+Wms9kj745lmd3b7EZJiqvmLwAlmRfjrI7Hi5z3kdBJ93lFNPA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"confbox": "^0.1.7",
|
||||
"mlly": "^1.7.1",
|
||||
|
@ -11918,6 +12053,15 @@
|
|||
"node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
|
||||
}
|
||||
},
|
||||
"node_modules/postprocessing": {
|
||||
"version": "6.36.2",
|
||||
"resolved": "https://registry.npmjs.org/postprocessing/-/postprocessing-6.36.2.tgz",
|
||||
"integrity": "sha512-a1qZjpm0Vrozat7YFtYOEvwElWz/ukhxoA+K7HzDVeor20vzacREMnJZL5GTj6TFVr7/ma3W0qD03Go0V5gQOA==",
|
||||
"license": "Zlib",
|
||||
"peerDependencies": {
|
||||
"three": ">= 0.157.0 < 0.169.0"
|
||||
}
|
||||
},
|
||||
"node_modules/potpack": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/potpack/-/potpack-1.0.2.tgz",
|
||||
|
@ -13115,11 +13259,12 @@
|
|||
"integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg=="
|
||||
},
|
||||
"node_modules/site-config-stack": {
|
||||
"version": "2.2.15",
|
||||
"resolved": "https://registry.npmjs.org/site-config-stack/-/site-config-stack-2.2.15.tgz",
|
||||
"integrity": "sha512-Ykh1X+puUlGoM/HX7bV7xZMKd4mQTm0KtB/9ChHKSIknCJ6pEwIRKuDiEnImtOTG+HUhuFJGW8lV8CkAB58tXw==",
|
||||
"version": "2.2.18",
|
||||
"resolved": "https://registry.npmjs.org/site-config-stack/-/site-config-stack-2.2.18.tgz",
|
||||
"integrity": "sha512-kwyuCwYZBJikuLN3IB15cGT7SHQQxAitLaDs1b6eNZbb+tBHubVUhj0pnFZnZZi4+5eNCO+3HiZxaU3qpFxP2A==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"ufo": "^1.5.3"
|
||||
"ufo": "^1.5.4"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/harlan-zw"
|
||||
|
@ -14198,9 +14343,10 @@
|
|||
}
|
||||
},
|
||||
"node_modules/unimport": {
|
||||
"version": "3.9.0",
|
||||
"resolved": "https://registry.npmjs.org/unimport/-/unimport-3.9.0.tgz",
|
||||
"integrity": "sha512-H2ftTISja1BonUVdOKRos6HC6dqYDR40dQTZY3zIDJ/5/z4ihncuL0LqLvtxYqUDMib41eAtunQUhXIWTCZ8rA==",
|
||||
"version": "3.12.0",
|
||||
"resolved": "https://registry.npmjs.org/unimport/-/unimport-3.12.0.tgz",
|
||||
"integrity": "sha512-5y8dSvNvyevsnw4TBQkIQR1Rjdbb+XjVSwQwxltpnVZrStBvvPkMPcZrh1kg5kY77kpx6+D4Ztd3W6FOBH/y2Q==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@rollup/pluginutils": "^5.1.0",
|
||||
"acorn": "^8.12.1",
|
||||
|
@ -14208,13 +14354,13 @@
|
|||
"estree-walker": "^3.0.3",
|
||||
"fast-glob": "^3.3.2",
|
||||
"local-pkg": "^0.5.0",
|
||||
"magic-string": "^0.30.10",
|
||||
"magic-string": "^0.30.11",
|
||||
"mlly": "^1.7.1",
|
||||
"pathe": "^1.1.2",
|
||||
"pkg-types": "^1.1.3",
|
||||
"pkg-types": "^1.2.0",
|
||||
"scule": "^1.3.0",
|
||||
"strip-literal": "^2.1.0",
|
||||
"unplugin": "^1.11.0"
|
||||
"unplugin": "^1.14.1"
|
||||
}
|
||||
},
|
||||
"node_modules/unimport/node_modules/acorn": {
|
||||
|
@ -14305,17 +14451,24 @@
|
|||
}
|
||||
},
|
||||
"node_modules/unplugin": {
|
||||
"version": "1.12.0",
|
||||
"resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.12.0.tgz",
|
||||
"integrity": "sha512-KeczzHl2sATPQUx1gzo+EnUkmN4VmGBYRRVOZSGvGITE9rGHRDGqft6ONceP3vgXcyJ2XjX5axG5jMWUwNCYLw==",
|
||||
"version": "1.14.1",
|
||||
"resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.14.1.tgz",
|
||||
"integrity": "sha512-lBlHbfSFPToDYp9pjXlUEFVxYLaue9f9T1HC+4OHlmj+HnMDdz9oZY+erXfoCe/5V/7gKUSY2jpXPb9S7f0f/w==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"acorn": "^8.12.1",
|
||||
"chokidar": "^3.6.0",
|
||||
"webpack-sources": "^3.2.3",
|
||||
"webpack-virtual-modules": "^0.6.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=14.0.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"webpack-sources": "^3"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"webpack-sources": {
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/unplugin-vue-router": {
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
"@tresjs/cientos": "^3.9.0",
|
||||
"@tresjs/core": "^4.0.2",
|
||||
"@tresjs/nuxt": "^2.1.2",
|
||||
"@tresjs/post-processing": "^0.7.1",
|
||||
"consola": "^3.2.3",
|
||||
"marked": "^12.0.2",
|
||||
"nuxt": "^3.11.2",
|
||||
|
|
Binary file not shown.
|
@ -32,8 +32,8 @@ export const set_material = (scene: any, color: any, count: number | undefined =
|
|||
alphaMap: count ? texture : null,
|
||||
transparent: true,
|
||||
opacity: 1,
|
||||
// roughness: 0.5,
|
||||
// metalness: 0,
|
||||
roughness: 0.2,
|
||||
metalness: 0,
|
||||
side: DoubleSide,
|
||||
})
|
||||
set_metaril_func(scene, material)
|
||||
|
|
Loading…
Reference in New Issue