bx-1379-redesign #15
|
@ -54,9 +54,8 @@ a[href] {
|
||||||
|
|
||||||
&-canvas {
|
&-canvas {
|
||||||
flex-grow: 1;
|
flex-grow: 1;
|
||||||
height: 50vh;
|
height: 100vh;
|
||||||
width: 100vw;
|
z-index: -1;
|
||||||
max-height: 65vh;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -17,12 +17,12 @@ const controls = ref()
|
||||||
|
|
||||||
const controlsState = reactive({
|
const controlsState = reactive({
|
||||||
enableDamping: true,
|
enableDamping: true,
|
||||||
minPolarAngle: 45 * (Math.PI / 180),
|
minPolarAngle: 66 * (Math.PI / 180),
|
||||||
maxPolarAngle: 45 * (Math.PI / 180),
|
maxPolarAngle: 66 * (Math.PI / 180),
|
||||||
// minAzimuthAngle: (Math.PI / 2) / 2,
|
// minAzimuthAngle: (Math.PI / 2) / 2,
|
||||||
enablePan: false,
|
enablePan: false,
|
||||||
enableZoom: false,
|
enableZoom: false,
|
||||||
autoRotate: true,
|
// autoRotate: true,
|
||||||
})
|
})
|
||||||
await pageStore.load(route.params)
|
await pageStore.load(route.params)
|
||||||
await raw_dataStore.load({ source: pageStore.page.scene_3d })
|
await raw_dataStore.load({ source: pageStore.page.scene_3d })
|
||||||
|
@ -42,7 +42,7 @@ onMounted(async () => {
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="main-canvas">
|
<div class="main-canvas">
|
||||||
<TresCanvas :output-encoding="SRGBColorSpace" >
|
<TresCanvas window-size :output-encoding="SRGBColorSpace" >
|
||||||
<TresPerspectiveCamera ref="camera" />
|
<TresPerspectiveCamera ref="camera" />
|
||||||
<OrbitControls v-bind="controlsState" make-default ref="controls" />
|
<OrbitControls v-bind="controlsState" make-default ref="controls" />
|
||||||
<MainLoadModels v-if="raw_dataStore.data.id" />
|
<MainLoadModels v-if="raw_dataStore.data.id" />
|
||||||
|
|
|
@ -50,8 +50,8 @@ const cameraSet = () => {
|
||||||
(controls.value as any).update()
|
(controls.value as any).update()
|
||||||
}
|
}
|
||||||
if (camera.value) {
|
if (camera.value) {
|
||||||
const d = raw_dataStore.data.max_distance * 0.5;
|
const d = raw_dataStore.data.max_distance * 0.75;
|
||||||
camera.value.position.set(d * 0.25, d * 0.5, d);
|
camera.value.position.set(d * 0.25, d, d);
|
||||||
camera.value.updateMatrixWorld()
|
camera.value.updateMatrixWorld()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -59,7 +59,9 @@ loadModels()
|
||||||
cameraSet()
|
cameraSet()
|
||||||
const { onAfterRender } = useLoop()
|
const { onAfterRender } = useLoop()
|
||||||
onAfterRender(() => {
|
onAfterRender(() => {
|
||||||
(controls.value as any).update()
|
if (controls.value) {
|
||||||
|
(controls.value as any).update()
|
||||||
|
}
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
<template>
|
<template>
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { onMounted, render, watch } from 'vue';
|
import { onMounted, render, watch } from 'vue';
|
||||||
|
|
||||||
import { ACESFilmicToneMapping, Color, Fog, PMREMGenerator, SRGBColorSpace } from 'three';
|
import { ACESFilmicToneMapping, CanvasTexture, Color, Fog, PMREMGenerator, SRGBColorSpace } from 'three';
|
||||||
import { GainMapLoader } from '@monogrid/gainmap-js'
|
import { GainMapLoader } from '@monogrid/gainmap-js'
|
||||||
import { useTresContext } from '@tresjs/core';
|
import { useTresContext } from '@tresjs/core';
|
||||||
|
|
||||||
|
@ -10,7 +10,11 @@ import hdr_json from '../../assets/promo/hdr/hdr.json?url'
|
||||||
import hdr_webp from '../../assets/promo/hdr/hdr.webp'
|
import hdr_webp from '../../assets/promo/hdr/hdr.webp'
|
||||||
import { IMAGE_URL, PROMOBG } from '../../constants';
|
import { IMAGE_URL, PROMOBG } from '../../constants';
|
||||||
|
|
||||||
const props = defineProps(['hdr_webp', 'hdr_gainmap', 'hdr_json', 'env_displacementmap', 'env_normalmap', 'clear_color', 'focus'])
|
const props = defineProps([
|
||||||
|
'hdr_webp', 'hdr_gainmap', 'hdr_json',
|
||||||
|
'clear_color', 'clear_color_to',
|
||||||
|
'focus'
|
||||||
|
])
|
||||||
const { renderer, scene } = useTresContext()
|
const { renderer, scene } = useTresContext()
|
||||||
|
|
||||||
const k = { start: 0.5, end: 4.5 }
|
const k = { start: 0.5, end: 4.5 }
|
||||||
|
@ -20,7 +24,6 @@ renderer.value.toneMapping = ACESFilmicToneMapping;
|
||||||
renderer.value.toneMappingExposure = 1.25;
|
renderer.value.toneMappingExposure = 1.25;
|
||||||
renderer.value.setPixelRatio((window.devicePixelRatio || 1) * 2)
|
renderer.value.setPixelRatio((window.devicePixelRatio || 1) * 2)
|
||||||
|
|
||||||
const type = 'canvas'
|
|
||||||
const loadEnv = async () => {
|
const loadEnv = async () => {
|
||||||
try {
|
try {
|
||||||
const loader = new GainMapLoader(renderer.value)
|
const loader = new GainMapLoader(renderer.value)
|
||||||
|
@ -50,6 +53,29 @@ const loadEnv = async () => {
|
||||||
scene.value.fog = new Fog(c, props.focus * k.start, props.focus * k.end)
|
scene.value.fog = new Fog(c, props.focus * k.start, props.focus * k.end)
|
||||||
|
|
||||||
document.documentElement.style.setProperty('--primary-color', props.clear_color)
|
document.documentElement.style.setProperty('--primary-color', props.clear_color)
|
||||||
|
|
||||||
|
if (props.clear_color_to) {
|
||||||
|
const c_to = new Color()
|
||||||
|
c_to.set(props.clear_color_to)
|
||||||
|
|
||||||
|
const canvas = document.createElement('canvas');
|
||||||
|
const ctx = canvas.getContext('2d');
|
||||||
|
const s = 100
|
||||||
|
canvas.width = s;
|
||||||
|
canvas.height = s;
|
||||||
|
if (ctx instanceof CanvasRenderingContext2D) {
|
||||||
|
const grad = ctx.createLinearGradient(0, 0, 0, s);
|
||||||
|
grad.addColorStop(0, props.clear_color);
|
||||||
|
grad.addColorStop(1, props.clear_color_to);
|
||||||
|
console.log(props.clear_color, props.clear_color_to)
|
||||||
|
ctx.fillStyle = grad;
|
||||||
|
ctx.fillRect(0, 0, s, s);
|
||||||
|
}
|
||||||
|
const texture = new CanvasTexture(canvas)
|
||||||
|
texture.needsUpdate = true
|
||||||
|
scene.value.background = texture
|
||||||
|
console.log(canvas.toDataURL())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
loadEnv()
|
loadEnv()
|
||||||
|
|
Loading…
Reference in New Issue