From f71056b9b42174fbc2668bac5ca362bc459a8e28 Mon Sep 17 00:00:00 2001 From: Silas Bartha Date: Wed, 12 Feb 2025 21:21:29 -0500 Subject: server-side message position validation with o3d --- api/api.py | 15 +++++++++++++++ api/terrain.glb | Bin 0 -> 40097796 bytes src/assets/terrain.glb | Bin 39846888 -> 40097796 bytes src/components/ground.jsx | 9 +++++---- 4 files changed, 20 insertions(+), 4 deletions(-) create mode 100644 api/terrain.glb diff --git a/api/api.py b/api/api.py index 3b74bfc..eb27f27 100644 --- a/api/api.py +++ b/api/api.py @@ -4,8 +4,11 @@ from uuid import uuid4 import sqlite3 import numbers from flask import g +import open3d +import numpy DATABASE = './forum.db' +TERRAIN_MODEL = './terrain.glb' def get_db(): db = getattr(g, '__database', None) @@ -15,6 +18,13 @@ def get_db(): app = Flask(__name__) +terrain_mesh = open3d.io.read_triangle_mesh('./terrain.glb') +terrain_mesh = open3d.t.geometry.TriangleMesh.from_legacy(terrain_mesh) +print('loaded terrain mesh') +scene = open3d.t.geometry.RaycastingScene() +_ = scene.add_triangles(terrain_mesh) +print('created raycasting scene') + @app.teardown_appcontext def close_connection(_): db = getattr(g, '__database', None) @@ -41,6 +51,11 @@ def new_message(): for elem in position: if not isinstance(elem, numbers.Number): return Response(status=HTTPStatus.BAD_REQUEST) + query_point = open3d.core.Tensor([position], dtype=open3d.core.Dtype.Float32) + unsigned_distance = scene.compute_distance(query_point) + print(unsigned_distance) + if unsigned_distance > 0.25: + return Response(status=HTTPStatus.BAD_REQUEST) position = json.dumps(position) message = str(request.form['message']) token = request.form['token'] diff --git a/api/terrain.glb b/api/terrain.glb new file mode 100644 index 0000000..515ee50 Binary files /dev/null and b/api/terrain.glb differ diff --git a/src/assets/terrain.glb b/src/assets/terrain.glb index 4ffde3c..515ee50 100644 Binary files a/src/assets/terrain.glb and b/src/assets/terrain.glb differ diff --git a/src/components/ground.jsx b/src/components/ground.jsx index 9aced45..2426f2a 100644 --- a/src/components/ground.jsx +++ b/src/components/ground.jsx @@ -5,14 +5,15 @@ import { useGLTF } from '@react-three/drei'; import terrainModelURL from '../assets/terrain.glb'; export default function Ground() { - const meshRef = useRef(); - const { nodes } = useGLTF(terrainModelURL); - + const { nodes, materials } = useGLTF(terrainModelURL); return ( - + + + + ); } -- cgit v1.2.3