This commit is contained in:
Kseninia Mikhaylova 2024-06-26 12:10:51 +03:00
parent 3a75277ec9
commit 1cc5599624
32 changed files with 228 additions and 70 deletions

View File

@ -366,14 +366,6 @@
"detail": "django.shortcuts",
"documentation": {}
},
{
"label": "render",
"importPath": "django.shortcuts",
"description": "django.shortcuts",
"isExtraImport": true,
"detail": "django.shortcuts",
"documentation": {}
},
{
"label": "parse_image",
"importPath": "api.tracer",
@ -513,6 +505,14 @@
"detail": "object.models",
"documentation": {}
},
{
"label": "DjangoFilterBackend",
"importPath": "django_filters.rest_framework",
"description": "django_filters.rest_framework",
"isExtraImport": true,
"detail": "django_filters.rest_framework",
"documentation": {}
},
{
"label": "sys",
"kind": 6,
@ -761,7 +761,7 @@
"kind": 5,
"importPath": "back.back.settings",
"description": "back.back.settings",
"peekOfCode": "INSTALLED_APPS = [\n \"django.contrib.admin\",\n \"django.contrib.auth\",\n \"django.contrib.contenttypes\",\n \"django.contrib.sessions\",\n \"django.contrib.messages\",\n \"django.contrib.staticfiles\",\n \"corsheaders\",\n \"api\",\n \"rest_framework\",",
"peekOfCode": "INSTALLED_APPS = [\n \"django.contrib.admin\",\n \"django.contrib.auth\",\n \"django.contrib.contenttypes\",\n \"django.contrib.sessions\",\n \"django.contrib.messages\",\n \"django.contrib.staticfiles\",\n \"corsheaders\",\n \"django_filters\",\n \"rest_framework\",",
"detail": "back.back.settings",
"documentation": {}
},
@ -824,7 +824,7 @@
"kind": 5,
"importPath": "back.back.settings",
"description": "back.back.settings",
"peekOfCode": "LANGUAGE_CODE = \"en-us\"\nTIME_ZONE = \"UTC\"\nUSE_I18N = True\nUSE_TZ = True\n# Static files (CSS, JavaScript, Images)\n# https://docs.djangoproject.com/en/5.0/howto/static-files/\nSTATIC_URL = \"static/\"\n# Default primary key field type\n# https://docs.djangoproject.com/en/5.0/ref/settings/#default-auto-field\nDEFAULT_AUTO_FIELD = \"django.db.models.BigAutoField\"",
"peekOfCode": "LANGUAGE_CODE = \"en-us\"\nTIME_ZONE = \"UTC\"\nUSE_I18N = True\nUSE_TZ = True\n# Static files (CSS, JavaScript, Images)\n# https://docs.djangoproject.com/en/5.0/howto/static-files/\nSTATIC_URL = \"static/\"\n# Default primary key field type\n# https://docs.djangoproject.com/en/5.0/ref/settings/#default-auto-field\nREST_FRAMEWORK = {",
"detail": "back.back.settings",
"documentation": {}
},
@ -833,7 +833,7 @@
"kind": 5,
"importPath": "back.back.settings",
"description": "back.back.settings",
"peekOfCode": "TIME_ZONE = \"UTC\"\nUSE_I18N = True\nUSE_TZ = True\n# Static files (CSS, JavaScript, Images)\n# https://docs.djangoproject.com/en/5.0/howto/static-files/\nSTATIC_URL = \"static/\"\n# Default primary key field type\n# https://docs.djangoproject.com/en/5.0/ref/settings/#default-auto-field\nDEFAULT_AUTO_FIELD = \"django.db.models.BigAutoField\"\nLOGGING = {",
"peekOfCode": "TIME_ZONE = \"UTC\"\nUSE_I18N = True\nUSE_TZ = True\n# Static files (CSS, JavaScript, Images)\n# https://docs.djangoproject.com/en/5.0/howto/static-files/\nSTATIC_URL = \"static/\"\n# Default primary key field type\n# https://docs.djangoproject.com/en/5.0/ref/settings/#default-auto-field\nREST_FRAMEWORK = {\n 'DEFAULT_FILTER_BACKENDS': ['django_filters.rest_framework.DjangoFilterBackend']",
"detail": "back.back.settings",
"documentation": {}
},
@ -842,7 +842,7 @@
"kind": 5,
"importPath": "back.back.settings",
"description": "back.back.settings",
"peekOfCode": "USE_I18N = True\nUSE_TZ = True\n# Static files (CSS, JavaScript, Images)\n# https://docs.djangoproject.com/en/5.0/howto/static-files/\nSTATIC_URL = \"static/\"\n# Default primary key field type\n# https://docs.djangoproject.com/en/5.0/ref/settings/#default-auto-field\nDEFAULT_AUTO_FIELD = \"django.db.models.BigAutoField\"\nLOGGING = {\n \"version\": 1,",
"peekOfCode": "USE_I18N = True\nUSE_TZ = True\n# Static files (CSS, JavaScript, Images)\n# https://docs.djangoproject.com/en/5.0/howto/static-files/\nSTATIC_URL = \"static/\"\n# Default primary key field type\n# https://docs.djangoproject.com/en/5.0/ref/settings/#default-auto-field\nREST_FRAMEWORK = {\n 'DEFAULT_FILTER_BACKENDS': ['django_filters.rest_framework.DjangoFilterBackend']\n}",
"detail": "back.back.settings",
"documentation": {}
},
@ -851,7 +851,7 @@
"kind": 5,
"importPath": "back.back.settings",
"description": "back.back.settings",
"peekOfCode": "USE_TZ = True\n# Static files (CSS, JavaScript, Images)\n# https://docs.djangoproject.com/en/5.0/howto/static-files/\nSTATIC_URL = \"static/\"\n# Default primary key field type\n# https://docs.djangoproject.com/en/5.0/ref/settings/#default-auto-field\nDEFAULT_AUTO_FIELD = \"django.db.models.BigAutoField\"\nLOGGING = {\n \"version\": 1,\n \"disable_existing_loggers\": False,",
"peekOfCode": "USE_TZ = True\n# Static files (CSS, JavaScript, Images)\n# https://docs.djangoproject.com/en/5.0/howto/static-files/\nSTATIC_URL = \"static/\"\n# Default primary key field type\n# https://docs.djangoproject.com/en/5.0/ref/settings/#default-auto-field\nREST_FRAMEWORK = {\n 'DEFAULT_FILTER_BACKENDS': ['django_filters.rest_framework.DjangoFilterBackend']\n}\nCRISPY_ALLOWED_TEMPLATE_PACKS = \"bootstrap4\"",
"detail": "back.back.settings",
"documentation": {}
},
@ -860,7 +860,34 @@
"kind": 5,
"importPath": "back.back.settings",
"description": "back.back.settings",
"peekOfCode": "STATIC_URL = \"static/\"\n# Default primary key field type\n# https://docs.djangoproject.com/en/5.0/ref/settings/#default-auto-field\nDEFAULT_AUTO_FIELD = \"django.db.models.BigAutoField\"\nLOGGING = {\n \"version\": 1,\n \"disable_existing_loggers\": False,\n \"formatters\": {\n \"verbose\": {\n \"format\": \"{levelname} {asctime} {module} {process:d} {thread:d} {message}\",",
"peekOfCode": "STATIC_URL = \"static/\"\n# Default primary key field type\n# https://docs.djangoproject.com/en/5.0/ref/settings/#default-auto-field\nREST_FRAMEWORK = {\n 'DEFAULT_FILTER_BACKENDS': ['django_filters.rest_framework.DjangoFilterBackend']\n}\nCRISPY_ALLOWED_TEMPLATE_PACKS = \"bootstrap4\"\nCRISPY_TEMPLATE_PACK = \"bootstrap4\"\nDEFAULT_AUTO_FIELD = \"django.db.models.BigAutoField\"\nLOGGING = {",
"detail": "back.back.settings",
"documentation": {}
},
{
"label": "REST_FRAMEWORK",
"kind": 5,
"importPath": "back.back.settings",
"description": "back.back.settings",
"peekOfCode": "REST_FRAMEWORK = {\n 'DEFAULT_FILTER_BACKENDS': ['django_filters.rest_framework.DjangoFilterBackend']\n}\nCRISPY_ALLOWED_TEMPLATE_PACKS = \"bootstrap4\"\nCRISPY_TEMPLATE_PACK = \"bootstrap4\"\nDEFAULT_AUTO_FIELD = \"django.db.models.BigAutoField\"\nLOGGING = {\n \"version\": 1,\n \"disable_existing_loggers\": False,\n \"formatters\": {",
"detail": "back.back.settings",
"documentation": {}
},
{
"label": "CRISPY_ALLOWED_TEMPLATE_PACKS",
"kind": 5,
"importPath": "back.back.settings",
"description": "back.back.settings",
"peekOfCode": "CRISPY_ALLOWED_TEMPLATE_PACKS = \"bootstrap4\"\nCRISPY_TEMPLATE_PACK = \"bootstrap4\"\nDEFAULT_AUTO_FIELD = \"django.db.models.BigAutoField\"\nLOGGING = {\n \"version\": 1,\n \"disable_existing_loggers\": False,\n \"formatters\": {\n \"verbose\": {\n \"format\": \"{levelname} {asctime} {module} {process:d} {thread:d} {message}\",\n \"style\": \"{\",",
"detail": "back.back.settings",
"documentation": {}
},
{
"label": "CRISPY_TEMPLATE_PACK",
"kind": 5,
"importPath": "back.back.settings",
"description": "back.back.settings",
"peekOfCode": "CRISPY_TEMPLATE_PACK = \"bootstrap4\"\nDEFAULT_AUTO_FIELD = \"django.db.models.BigAutoField\"\nLOGGING = {\n \"version\": 1,\n \"disable_existing_loggers\": False,\n \"formatters\": {\n \"verbose\": {\n \"format\": \"{levelname} {asctime} {module} {process:d} {thread:d} {message}\",\n \"style\": \"{\",\n },",
"detail": "back.back.settings",
"documentation": {}
},
@ -1067,7 +1094,7 @@
"kind": 6,
"importPath": "back.object.views",
"description": "back.object.views",
"peekOfCode": "class ClickableAreaViewSet(viewsets.ModelViewSet):\n queryset = ClickableArea.objects.all()\n serializer_class = ClickableAreaSerializer\nclass Element3DViewSet(viewsets.ModelViewSet):\n queryset = Element3D.objects.all()\n serializer_class = Element3DSerializer",
"peekOfCode": "class ClickableAreaViewSet(viewsets.ModelViewSet):\n queryset = ClickableArea.objects.all()\n serializer_class = ClickableAreaSerializer\nclass Element3DViewSet(viewsets.ModelViewSet):\n queryset = Element3D.objects.all()\n serializer_class = Element3DSerializer\n filterset_fields = ('parent', )\n filter_backends = [DjangoFilterBackend]",
"detail": "back.object.views",
"documentation": {}
},
@ -1076,7 +1103,7 @@
"kind": 6,
"importPath": "back.object.views",
"description": "back.object.views",
"peekOfCode": "class Element3DViewSet(viewsets.ModelViewSet):\n queryset = Element3D.objects.all()\n serializer_class = Element3DSerializer",
"peekOfCode": "class Element3DViewSet(viewsets.ModelViewSet):\n queryset = Element3D.objects.all()\n serializer_class = Element3DSerializer\n filterset_fields = ('parent', )\n filter_backends = [DjangoFilterBackend]",
"detail": "back.object.views",
"documentation": {}
},

View File

@ -77,8 +77,11 @@ INSTALLED_APPS = [
"django.contrib.messages",
"django.contrib.staticfiles",
"corsheaders",
"api",
"django_filters",
"rest_framework",
"crispy_forms",
"crispy_bootstrap4",
"api",
"frontImages",
"object",
]
@ -172,6 +175,13 @@ STATIC_URL = "static/"
# https://docs.djangoproject.com/en/5.0/ref/settings/#default-auto-field
REST_FRAMEWORK = {
'DEFAULT_FILTER_BACKENDS': ['django_filters.rest_framework.DjangoFilterBackend']
}
CRISPY_ALLOWED_TEMPLATE_PACKS = "bootstrap4"
CRISPY_TEMPLATE_PACK = "bootstrap4"
DEFAULT_AUTO_FIELD = "django.db.models.BigAutoField"
LOGGING = {
"version": 1,

View File

@ -1,7 +1,5 @@
from django.shortcuts import render
from rest_framework import viewsets
from django_filters.rest_framework import DjangoFilterBackend
from .models import ClickableArea, Element3D
from .serializers import ClickableAreaSerializer, Element3DSerializer
@ -13,3 +11,6 @@ class ClickableAreaViewSet(viewsets.ModelViewSet):
class Element3DViewSet(viewsets.ModelViewSet):
queryset = Element3D.objects.all()
serializer_class = Element3DSerializer
filterset_fields = ('parent', )
filter_backends = [DjangoFilterBackend]

View File

@ -8,6 +8,7 @@ export {}
declare module 'vue' {
export interface GlobalComponents {
copy: typeof import('./src/components/Promo/modelItem copy.vue')['default']
Env: typeof import('./src/components/Promo/env.vue')['default']
Floorplan: typeof import('./src/components/Floorplan/index.vue')['default']
Gallery: typeof import('./src/components/Promo/gallery.vue')['default']
Game: typeof import('./src/components/Game.vue')['default']

View File

@ -9,6 +9,7 @@
"version": "0.0.0",
"dependencies": {
"@fireworks-js/vue": "^2.10.7",
"@monogrid/gainmap-js": "^3.0.5",
"@tresjs/cientos": "^3.9.0",
"@tresjs/core": "^3.9.0",
"@vueuse/components": "^10.9.0",
@ -518,6 +519,17 @@
"node": ">=10"
}
},
"node_modules/@monogrid/gainmap-js": {
"version": "3.0.5",
"resolved": "https://registry.npmjs.org/@monogrid/gainmap-js/-/gainmap-js-3.0.5.tgz",
"integrity": "sha512-53sCTG4FaJBaAq/tcufARtVYDMDGqyBT9i7F453pWGhZ5LqubDHDWtYoHo9VhQqMcHTEexdJqSsR58y+9HVmQA==",
"dependencies": {
"promise-worker-transferable": "^1.0.4"
},
"peerDependencies": {
"three": ">= 0.159.0"
}
},
"node_modules/@nodelib/fs.scandir": {
"version": "2.1.5",
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
@ -1557,12 +1569,12 @@
}
},
"node_modules/braces": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
"integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
"integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
"dev": true,
"dependencies": {
"fill-range": "^7.0.1"
"fill-range": "^7.1.1"
},
"engines": {
"node": ">=8"
@ -2283,9 +2295,9 @@
"integrity": "sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A=="
},
"node_modules/fill-range": {
"version": "7.0.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
"integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
"version": "7.1.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
"integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
"dev": true,
"dependencies": {
"to-regex-range": "^5.0.1"
@ -2446,6 +2458,11 @@
"node": ">=0.10.0"
}
},
"node_modules/immediate": {
"version": "3.0.6",
"resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz",
"integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ=="
},
"node_modules/immutable": {
"version": "4.3.5",
"resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.5.tgz",
@ -2519,6 +2536,11 @@
"node": ">=0.12.0"
}
},
"node_modules/is-promise": {
"version": "2.2.2",
"resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz",
"integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ=="
},
"node_modules/is-stream": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
@ -2560,6 +2582,14 @@
"integrity": "sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==",
"dev": true
},
"node_modules/lie": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz",
"integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==",
"dependencies": {
"immediate": "~3.0.5"
}
},
"node_modules/local-pkg": {
"version": "0.5.0",
"resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.5.0.tgz",
@ -2953,6 +2983,15 @@
"resolved": "https://registry.npmjs.org/potpack/-/potpack-1.0.2.tgz",
"integrity": "sha512-choctRBIV9EMT9WGAZHn3V7t0Z2pMQyl0EZE6pFc/6ml3ssw7Dlf/oAOvFwjm1HVsqfQN8GfeFyJ+d8tRzqueQ=="
},
"node_modules/promise-worker-transferable": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/promise-worker-transferable/-/promise-worker-transferable-1.0.4.tgz",
"integrity": "sha512-bN+0ehEnrXfxV2ZQvU2PetO0n4gqBD4ulq3MI1WOPLgr7/Mg9yRQkX5+0v1vagr74ZTsl7XtzlaYDo2EuCeYJw==",
"dependencies": {
"is-promise": "^2.1.0",
"lie": "^3.0.2"
}
},
"node_modules/queue-microtask": {
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",

View File

@ -11,6 +11,7 @@
},
"dependencies": {
"@fireworks-js/vue": "^2.10.7",
"@monogrid/gainmap-js": "^3.0.5",
"@tresjs/cientos": "^3.9.0",
"@tresjs/core": "^3.9.0",
"@vueuse/components": "^10.9.0",

Binary file not shown.

Before

Width:  |  Height:  |  Size: 762 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 787 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 936 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 282 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 455 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 947 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

View File

@ -0,0 +1,29 @@
{
"gainMapMax": [
-0.08188214896822735,
-0.08188214896822735,
-0.08188214896822735
],
"gainMapMin": [
-0.08188214896822735,
-0.08188214896822735,
-0.08188214896822735
],
"gamma": [
1,
1,
1
],
"hdrCapacityMax": -0.08188214896822735,
"hdrCapacityMin": 0,
"offsetHdr": [
0.015625,
0.015625,
0.015625
],
"offsetSdr": [
0.015625,
0.015625,
0.015625
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

View File

@ -0,0 +1,28 @@
<script setup lang="ts">
import { onMounted } from 'vue';
import { PMREMGenerator } from 'three';
import { GainMapLoader } from '@monogrid/gainmap-js'
import { useTresContext } from '@tresjs/core';
import hdr_gainmap from '../../assets/promo/hdr/hdr-gainmap.webp'
import hdr_json from '../../assets/promo/hdr/hdr.json'
import hdr_webp from '../../assets/promo/hdr/hdr.webp'
const { renderer, scene } = useTresContext()
onMounted(async () => {
const pmremGenerator = new PMREMGenerator(renderer.value);
pmremGenerator.compileEquirectangularShader();
const loader = new GainMapLoader(renderer.value)
const result = await loader.loadAsync([hdr_webp, hdr_gainmap, '/src/assets/promo/hdr/hdr.json',])
const exrCubeRenderTarget = pmremGenerator.fromEquirectangular(result.renderTarget.texture);
const exrBackground = exrCubeRenderTarget.texture;
const newEnvMap = exrCubeRenderTarget ? exrCubeRenderTarget.texture : null;
scene.value.environment = newEnvMap
scene.value.background = exrBackground
result.renderTarget.texture.dispose();
})
</script>

View File

@ -39,6 +39,7 @@ onMounted(async () => {
x: Math.random() * (width - radius * 2) + radius,
y: Math.random() * (height - radius * 2) + radius,
}));
if (document.querySelector('.pin')) {
const rect = (document.querySelector('.pin') as HTMLElement).getBoundingClientRect()
circles[circles.length - 1] = { x: rect.x + rect.width, y: rect.y + rect.height }

View File

@ -1,9 +1,12 @@
<script setup lang="ts">
import { reactive, ref } from 'vue';
import { Object3D, Vector3 } from 'three';
import { reactive, ref } from 'vue';
import { Color, Vector3 } from 'three';
import { TresCanvas, useRenderLoop } from '@tresjs/core';
import { CameraControls, useGLTF, useProgress } from '@tresjs/cientos'
import Env from './env.vue'
const minPan = new Vector3(-10, 1, -5);
const maxPan = new Vector3(5, 1, 5);
const _v = new Vector3();
@ -26,56 +29,28 @@ const controlsState = reactive({
})
const { hasFinishLoading, progress } = await useProgress()
const { scene: spot_light } = await useGLTF('/spot_light.glb')
const spot_light_item = spot_light.children[0]
const spot_light_target = ref()
const target = new Object3D()
target.translateX(-10)
target.translateZ(10)
target.translateY(0)
const { onLoop } = useRenderLoop()
let step = 0.05
onLoop(() => {
if (spot_light_target.value) {
const px = spot_light_target.value.position.x
if (px >= 10) {
step = -0.05
} else if (px <= -10) {
step = 0.05
}
spot_light_target.value.translateX(step)
}
const point_light = reactive({
intensity: 10000,
position: new Vector3(-100,5,5),
})
const audio_played = ref<boolean>(false)
const audio = new Audio('/sea.ogg')
const playAudio = () => {
if (!audio_played.value) {
audio_played.value = true
audio.play()
}
}
</script>
<template>
<div :class="[{ 'invisible': !!hasFinishLoading }, 'loader']">
Загрузка {{ progress }}%
</div>
<div :class="[{ 'invisible': !hasFinishLoading }]" @click="playAudio">
<TresCanvas window-size alpha shadows clear-color="#87ceeb">
<div :class="[{ 'invisible': !hasFinishLoading }]">
<TresCanvas window-size>
<TresPerspectiveCamera :position="cameraPosition" />
<CameraControls v-bind="controlsState" @change="onChange" make-default />
<!-- <TresGridHelper :args="[50, 50]" /> -->
<Suspense>
<Models />
<Env />
</Suspense>
<TresObject3D ref="spot_light_target" :position="[10, 1, 10]"></TresObject3D>
<TresSpotLight :position="spot_light_item.position" color="pink" :angle="spot_light_item.angle"
:penumbra="spot_light_item.penumbra" :target="spot_light_target || target" :intensity="500"
cast-shadow />
<!-- <TresDirectionalLight :position="lightPosition" :intensity="10" cast-shadow /> -->
<TresMesh>
<TresBoxGeometry :args="[1, 1, 1]" />
<TresMeshStandardMaterial />
</TresMesh>
<TresPointLight v-bind="point_light" />
<TresAmbientLight :intensity="1" />
</TresCanvas>
</div>

45
poetry.lock generated
View File

@ -28,6 +28,21 @@ files = [
{file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"},
]
[[package]]
name = "crispy-bootstrap4"
version = "2024.1"
description = "Bootstrap4 template pack for django-crispy-forms"
optional = false
python-versions = ">=3.8"
files = [
{file = "crispy-bootstrap4-2024.1.tar.gz", hash = "sha256:208673bf6a25892a656971af7a00e18ba2f7f06cd4a0d667923bd6134e64d276"},
{file = "crispy_bootstrap4-2024.1-py3-none-any.whl", hash = "sha256:46cf98777a28621d240bf71eb36d4a26ff86e9e19be1cfd822645f4043d18c31"},
]
[package.dependencies]
django = ">=4.2"
django-crispy-forms = ">=2.0"
[[package]]
name = "django"
version = "5.0.6"
@ -63,6 +78,34 @@ files = [
asgiref = ">=3.6"
Django = ">=3.2"
[[package]]
name = "django-crispy-forms"
version = "2.2"
description = "Best way to have Django DRY forms"
optional = false
python-versions = ">=3.8"
files = [
{file = "django_crispy_forms-2.2-py3-none-any.whl", hash = "sha256:a681cffd5af270b3082bda02cf8f81bdb5717ed66d2265e87e3df2f4ccf46277"},
{file = "django_crispy_forms-2.2.tar.gz", hash = "sha256:92cb7b7786fb82646bad739343fd17a99a04b0b736a09e34f3b91f26cbca7e4a"},
]
[package.dependencies]
django = ">=4.2"
[[package]]
name = "django-filter"
version = "24.2"
description = "Django-filter is a reusable Django application for allowing users to filter querysets dynamically."
optional = false
python-versions = ">=3.8"
files = [
{file = "django-filter-24.2.tar.gz", hash = "sha256:48e5fc1da3ccd6ca0d5f9bb550973518ce977a4edde9d2a8a154a7f4f0b9f96e"},
{file = "django_filter-24.2-py3-none-any.whl", hash = "sha256:df2ee9857e18d38bed203c8745f62a803fa0f31688c9fe6f8e868120b1848e48"},
]
[package.dependencies]
Django = ">=4.2"
[[package]]
name = "djangorestframework"
version = "3.15.1"
@ -392,4 +435,4 @@ files = [
[metadata]
lock-version = "2.0"
python-versions = "^3.10"
content-hash = "1c57908ec6786460241b91a63e9b1e30eb78d340264c8e798eaa35041f9bc9f6"
content-hash = "93e081c4ed6854ed0592157a7472a8bd4ba0c9e74831fce9e72d9f73c438f0d7"

View File

@ -17,6 +17,9 @@ python-dotenv = "^1.0.1"
psycopg2 = "^2.9.9"
opencv-python = "^4.9.0.80"
potracer = "^0.0.4"
django-filter = "^24.2"
django-crispy-forms = "^2.2"
crispy-bootstrap4 = "^2024.1"
[build-system]