From 98e78ca33eac168a122ee498cc82e30dd199bb9f Mon Sep 17 00:00:00 2001 From: Peaceultime Date: Wed, 5 Jun 2024 17:57:07 +0200 Subject: [PATCH] backup-05-06-2024 --- .gitignore | 24 +++++++++++++++++ .gitmodules | 3 --- bun.lockb | Bin 0 -> 22573 bytes index.html | 15 +++++++++++ package.json | 19 +++++++++++++ src/assets/asset.class.ts | 18 +++++++++++++ src/assets/sprite.class.ts | 13 +++++++++ src/consts.ts | 11 ++++++++ src/main.ts | 3 +++ src/renderer/renderer.class.ts | 47 +++++++++++++++++++++++++++++++++ src/style.css | 5 ++++ src/vite-env.d.ts | 1 + three.js | 1 - tsconfig.json | 23 ++++++++++++++++ 14 files changed, 179 insertions(+), 4 deletions(-) create mode 100644 .gitignore delete mode 100644 .gitmodules create mode 100644 bun.lockb create mode 100644 index.html create mode 100644 package.json create mode 100644 src/assets/asset.class.ts create mode 100644 src/assets/sprite.class.ts create mode 100644 src/consts.ts create mode 100644 src/main.ts create mode 100644 src/renderer/renderer.class.ts create mode 100644 src/style.css create mode 100644 src/vite-env.d.ts delete mode 160000 three.js create mode 100644 tsconfig.json diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a547bf3 --- /dev/null +++ b/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/.gitmodules b/.gitmodules deleted file mode 100644 index 1e7150d..0000000 --- a/.gitmodules +++ /dev/null @@ -1,3 +0,0 @@ -[submodule "three.js"] - path = three.js - url = https://github.com/mrdoob/three.js.git diff --git a/bun.lockb b/bun.lockb new file mode 100644 index 0000000000000000000000000000000000000000..78291477a413bc4058d9baea60bd4b2b275b51b4 GIT binary patch literal 22573 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 + + + + + Tests + + + + +
+ +
+ + diff --git a/package.json b/package.json new file mode 100644 index 0000000..3ba1189 --- /dev/null +++ b/package.json @@ -0,0 +1,19 @@ +{ + "name": "vtt-mapper", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "bunx --bun vite", + "build": "tsc && vite build", + "preview": "vite preview" + }, + "devDependencies": { + "typescript": "^5.2.2", + "vite": "^5.2.0" + }, + "dependencies": { + "@types/three": "^0.165.0", + "three": "^0.165.0" + } +} diff --git a/src/assets/asset.class.ts b/src/assets/asset.class.ts new file mode 100644 index 0000000..34a02a6 --- /dev/null +++ b/src/assets/asset.class.ts @@ -0,0 +1,18 @@ +import * as Three from 'three'; + +export default class Asset +{ + #mat: Three.Matrix4; + #layer: number; + + ready: boolean = false; + + _obj: Three.Object3D | undefined; + + constructor(mat?: Three.Matrix4, layer?: number) + { + this.#mat = mat ?? new Three.Matrix4(); + this.#layer = layer ?? 0; + } + static init(): void {} +} \ No newline at end of file diff --git a/src/assets/sprite.class.ts b/src/assets/sprite.class.ts new file mode 100644 index 0000000..b1ea974 --- /dev/null +++ b/src/assets/sprite.class.ts @@ -0,0 +1,13 @@ +import Asset from './asset.class'; +import * as CONST from '../consts'; +import * as Three from 'three'; + +export default class Sprite extends Asset +{ + static #material = new Three.RawShaderMaterial({ + fragmentShader: "", + vertexShader: "", + }); + static #mesh = CONST.QUAD; + static #instance = new Three.InstancedMesh(CONST.QUAD, Sprite.#material, 2**14); +} \ No newline at end of file diff --git a/src/consts.ts b/src/consts.ts new file mode 100644 index 0000000..774d80a --- /dev/null +++ b/src/consts.ts @@ -0,0 +1,11 @@ +import * as Three from 'three'; + +const QUAD = new Three.BufferGeometry(); +QUAD.setIndex( new Three.Float32BufferAttribute( [ 0, 2, 1, 2, 3, 1 ], 1 ) ) +QUAD.setAttribute( 'position', new Three.Float32BufferAttribute( [ -0.5, 0.5, 0, 0.5, 0.5, 0, -0.5, -0.5, 0, 0.5, -0.5, 0 ], 3 ) ); +QUAD.setAttribute( 'normal', new Three.Float32BufferAttribute( [ 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1 ], 3 ) ); +QUAD.setAttribute( 'uv', new Three.Float32BufferAttribute( [ 0, 1, 1, 1, 0, 0, 1, 0 ], 2 ) ); + +export { + QUAD +}; \ No newline at end of file diff --git a/src/main.ts b/src/main.ts new file mode 100644 index 0000000..8cc6107 --- /dev/null +++ b/src/main.ts @@ -0,0 +1,3 @@ +import Renderer from './renderer/renderer.class'; + +Renderer.init(); \ No newline at end of file diff --git a/src/renderer/renderer.class.ts b/src/renderer/renderer.class.ts new file mode 100644 index 0000000..57fc33f --- /dev/null +++ b/src/renderer/renderer.class.ts @@ -0,0 +1,47 @@ +import * as Three from 'three'; +import Asset from '../assets/asset.class'; + +export default class Renderer +{ + static #scene: Three.Scene; + static #camera: Three.OrthographicCamera; + static init(): Boolean + { + try { + const canvas = document.createElement("canvas"); + canvas.addEventListener("webglcontextcreationerror", console.error); + const context = canvas.getContext("webgl2"); + + this.#renderer.setPixelRatio( window.devicePixelRatio ); + document.body.appendChild(this.#renderer.domElement); + + this.#scene = new Three.Scene(); + this.#camera = new Three.OrthographicCamera( window.innerWidth / - 2, window.innerWidth / 2, window.innerHeight / 2, window.innerHeight / - 2, 1, 1000 ); + + this.#resize(); + window.addEventListener("resize", this.#resize.bind(this)); + + return true; + } + catch(e) + { + console.error(e); + return false; + } + } + static #resize(): void + { + this.#renderer.setSize( window.innerWidth, window.innerHeight ); + this.#camera.left = window.innerWidth / - 2; + this.#camera.right = window.innerWidth / 2; + this.#camera.top = window.innerHeight / 2; + this.#camera.bottom = window.innerHeight / - 2; + + this.render(); + } + static render(): void + { + console.log(new Three.PlaneGeometry()); + this.#renderer.render(this.#scene, this.#camera); + } +} \ No newline at end of file diff --git a/src/style.css b/src/style.css new file mode 100644 index 0000000..a5ac434 --- /dev/null +++ b/src/style.css @@ -0,0 +1,5 @@ +html, body, div +{ + padding: 0; + margin: 0; +} \ No newline at end of file diff --git a/src/vite-env.d.ts b/src/vite-env.d.ts new file mode 100644 index 0000000..11f02fe --- /dev/null +++ b/src/vite-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/three.js b/three.js deleted file mode 160000 index 3556fc5..0000000 --- a/three.js +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 3556fc5d6986e03bcd4776ee2e89b862ec493c10 diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..75abdef --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,23 @@ +{ + "compilerOptions": { + "target": "ES2020", + "useDefineForClassFields": true, + "module": "ESNext", + "lib": ["ES2020", "DOM", "DOM.Iterable"], + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true + }, + "include": ["src"] +}