diff --git a/front/src/components/Promo/env.vue b/front/src/components/Promo/env.vue
index 137a0b4..b5dcf1b 100644
--- a/front/src/components/Promo/env.vue
+++ b/front/src/components/Promo/env.vue
@@ -1,49 +1,56 @@
\ No newline at end of file
diff --git a/front/src/components/Promo/load_models.vue b/front/src/components/Promo/load_models.vue
index 32f04a2..a6a0b75 100644
--- a/front/src/components/Promo/load_models.vue
+++ b/front/src/components/Promo/load_models.vue
@@ -3,6 +3,7 @@ import { onMounted, onUnmounted, reactive, ref, watch } from 'vue';
import {
Box3, CircleGeometry, Color, DoubleSide, Group, Mesh, MeshBasicMaterial,
MeshStandardMaterial,
+ MeshStandardMaterialParameters,
PlaneGeometry, SpriteMaterial, TextureLoader, Vector2, Vector3,
} from 'three';
@@ -10,7 +11,6 @@ import { useTresContext, useSeek, useRenderLoop, useTexture } from '@tresjs/core
import { useGLTF } from '@tresjs/cientos'
import Env from './env.vue'
-import PostProcess from './post_pocessing.vue'
import { IMAGE_URL, SERVER_URL, } from '../../constants'
import { usePromoSidebar } from '../../stores/promo_sidebar';
@@ -26,7 +26,15 @@ const sidebar = usePromoSidebar();
const sidebar_scene = usePromoScene()
const { controls, camera, scene, raycaster, renderer } = useTresContext()
const { seekByName, seekAllByName } = useSeek()
-const envVars = reactive({}) as { hdr_gainmap?: string, hdr_json?: string, hdr_webp?: string }
+const envVars = reactive({}) as {
+ focus: number,
+ hdr_gainmap?: string,
+ hdr_json?: string,
+ hdr_webp?: string,
+ clear_color?: string,
+ env_displacementmap?: string,
+ env_normalmap?: string
+}
const tiltShift = reactive({}) as { focus: number, aperture: number, maxblur: number }
@@ -42,18 +50,11 @@ const loadModels = async () => {
const res = await fetch(`${SERVER_URL}/api/obj/scene/${props.source}`)
const raw_data = await res.json() as scene3D
- envVars.hdr_gainmap = raw_data.hdr_gainmap ? `${IMAGE_URL}/${raw_data.hdr_gainmap}` : undefined
- envVars.hdr_json = raw_data.hdr_json ? `${IMAGE_URL}/${raw_data.hdr_json}` : undefined
- envVars.hdr_webp = raw_data.hdr_webp ? `${IMAGE_URL}/${raw_data.hdr_webp}` : undefined
+ envVars.focus = raw_data.min_distance * 1
+ if (raw_data.env) {
+ Object.assign(envVars, raw_data.env)
+ }
- tiltShift.focus = raw_data.min_distance * 1
- tiltShift.aperture = 0.1
- tiltShift.maxblur = 5
-
- const c = new Color()
- renderer.value.getClearColor(c)
- // console.log(c, c.offsetHSL(0, 0, 10))
- // renderer.value.setClearColor(c.offsetHSL(10, 10, 10))
const data = raw_data.elements
if (!controls.value) return;
@@ -87,17 +88,41 @@ const loadModels = async () => {
const clickable_areas = await res.json()
clickable.value.push(...clickable_areas)
}
+
+
+ let c = new Color()
+ if (envVars.clear_color) {
+ c = new Color(envVars.clear_color)
+ } else {
+ renderer.value.getClearColor(c)
+ }
+ const tex = {} as any
+ if (envVars.env_displacementmap) { tex.displacementMap = `${IMAGE_URL}/${envVars.env_displacementmap}` }
+ if (envVars.env_normalmap) { tex.normalMap = `${IMAGE_URL}/${envVars.env_normalmap}` }
+ let addTexture: any
+ if (Object.keys(tex).length) {
+ addTexture = await useTexture(tex)
+ }
+
+ const mesh = {
+ color: c.offsetHSL(0, 0, -0.5),
+ displacementScale: envVars.focus,
+ roughness: 100,
+ side: DoubleSide
+ } as MeshStandardMaterialParameters
+ if (addTexture.displacementMap) {
+ mesh.displacementMap = addTexture.displacementMap
+ } else {
+ mesh.displacementMap = groundTexture.displacementMap
+ }
+ if (addTexture.normalMap) {
+ mesh.normalMap = addTexture.normalMap
+ }
const ground = new Mesh(
- new CircleGeometry(tiltShift.focus * 10, tiltShift.focus * 10),
- new MeshStandardMaterial({
- color: c.offsetHSL(0, 0, -0.5),
- displacementMap: groundTexture.displacementMap,
- displacementScale: tiltShift.focus,
- roughness: 100,
- side: DoubleSide
- })
+ new CircleGeometry(envVars.focus * 10, envVars.focus * 10),
+ new MeshStandardMaterial(mesh)
)
- ground.position.y = -0.33 * tiltShift.focus
+ ground.position.y = -0.33 * envVars.focus
ground.rotateX(-Math.PI / 2)
ground.name = "ground"
models.value.push({ name: 'ground', modelFile: ground })
@@ -226,7 +251,6 @@ watch(() => sidebar_scene.list, () => {
-
diff --git a/front/src/index.d.ts b/front/src/index.d.ts
index 54b8533..3630fd5 100644
--- a/front/src/index.d.ts
+++ b/front/src/index.d.ts
@@ -14,10 +14,15 @@ interface scene3D {
name: string
min_distance: number
max_distance: number
- hdr_gainmap?: string
- hdr_json?: string
- hdr_webp?: string
elements: element3DType[]
+ env: {
+ hdr_gainmap?: string
+ hdr_json?: string
+ hdr_webp?: string
+ env_displacementmap?: string
+ env_normalmap?: string
+ clear_color?: string
+ }
}
interface element3DType {
id: number