@planara/core 1.4.4 → 1.4.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs.js +7 -12
- package/dist/index.es.js +39 -44
- package/dist/index.umd.js +6 -11
- package/dist/utils/program-settings.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs.js
CHANGED
|
@@ -1,17 +1,14 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("ogl");function d(s){const e=`
|
|
2
2
|
attribute vec3 position;
|
|
3
3
|
attribute vec3 normal;
|
|
4
|
-
attribute vec2 uv;
|
|
5
4
|
|
|
6
5
|
uniform mat4 modelViewMatrix;
|
|
7
6
|
uniform mat4 projectionMatrix;
|
|
8
7
|
uniform mat3 normalMatrix;
|
|
9
8
|
|
|
10
9
|
varying vec3 vNormal;
|
|
11
|
-
varying vec2 vUv;
|
|
12
10
|
|
|
13
11
|
void main() {
|
|
14
|
-
vUv = uv;
|
|
15
12
|
vNormal = normalize(normalMatrix * normal);
|
|
16
13
|
gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
|
|
17
14
|
}
|
|
@@ -20,16 +17,14 @@
|
|
|
20
17
|
|
|
21
18
|
uniform float uHit;
|
|
22
19
|
|
|
23
|
-
uniform sampler2D tMap;
|
|
24
20
|
varying vec3 vNormal;
|
|
25
|
-
varying vec2 vUv;
|
|
26
21
|
|
|
27
22
|
void main() {
|
|
28
|
-
vec3
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
23
|
+
vec3 normal = normalize(vNormal);
|
|
24
|
+
float lighting = dot(normal, normalize(vec3(-0.3, 0.8, 0.6)));
|
|
25
|
+
vec3 color = mix(vec3(0.2, 0.8, 1.0), vec3(1.0, 0.2, 0.8), uHit);
|
|
26
|
+
gl_FragColor.rgb = color + lighting * 0.1;
|
|
27
|
+
gl_FragColor.a = 1.0;
|
|
33
28
|
}
|
|
34
|
-
`,i=new r.Texture(s);return new r.Program(s,{vertex:e,fragment:t,uniforms:{tMap:{value:i},uHit:{value:0}}})}class h{gl;scene;camera;canvas;program;meshes;constructor(e){this.canvas=e,this.gl=new r.Renderer({canvas:e}),this.gl.setSize(e.clientWidth,e.clientHeight),this.gl.gl.clearColor(1,1,1,1),this.scene=new r.Transform,this.camera=new r.Camera(this.gl.gl,{fov:45}),this.camera.position.set(1,1,7),this.camera.lookAt([0,0,0]),this.program=d(this.gl.gl),this.meshes=[]}resize(){this.gl.setSize(this.canvas.width,this.canvas.height),this.camera.perspective({aspect:this.canvas.width/this.canvas.height})}render(){this.gl.render({scene:this.scene,camera:this.camera})}update(){}loop(){this.update(),this.render(),requestAnimationFrame(this.loop.bind(this))}addFigure(e){const t=new r.Geometry(this.gl.gl,{position:{size:3,data:new Float32Array(e.position)},normal:{size:3,data:new Float32Array(e.normal??[])},uv:{size:2,data:new Float32Array(e.uv??[])}}),i=new r.Mesh(this.gl.gl,{geometry:t,program:this.program});return i.setParent(this.scene),this.meshes.push(i),i}destroy(){this.meshes&&(this.meshes.length=0,this.meshes=[]),this.scene=null,this.camera=null,this.program=null,this.gl=null,this.canvas=null}}class
|
|
35
|
-
`);for(const
|
|
29
|
+
`,i=new r.Texture(s);return new r.Program(s,{vertex:e,fragment:t,uniforms:{tMap:{value:i},uHit:{value:0}}})}class h{gl;scene;camera;canvas;program;meshes;constructor(e){this.canvas=e,this.gl=new r.Renderer({canvas:e}),this.gl.setSize(e.clientWidth,e.clientHeight),this.gl.gl.clearColor(1,1,1,1),this.scene=new r.Transform,this.camera=new r.Camera(this.gl.gl,{fov:45}),this.camera.position.set(1,1,7),this.camera.lookAt([0,0,0]),this.program=d(this.gl.gl),this.meshes=[]}resize(){this.gl.setSize(this.canvas.width,this.canvas.height),this.camera.perspective({aspect:this.canvas.width/this.canvas.height})}render(){this.gl.render({scene:this.scene,camera:this.camera})}update(){}loop(){this.update(),this.render(),requestAnimationFrame(this.loop.bind(this))}addFigure(e){const t=new r.Geometry(this.gl.gl,{position:{size:3,data:new Float32Array(e.position)},normal:{size:3,data:new Float32Array(e.normal??[])},uv:{size:2,data:new Float32Array(e.uv??[])}}),i=new r.Mesh(this.gl.gl,{geometry:t,program:this.program});return i.setParent(this.scene),this.meshes.push(i),i}destroy(){this.meshes&&(this.meshes.length=0,this.meshes=[]),this.scene=null,this.camera=null,this.program=null,this.gl=null,this.canvas=null}}class v extends h{orbit;raycast;mouse;isEventListenersAdded;constructor(e){super(e);const t=new r.GridHelper(this.gl.gl,{size:10,divisions:10});t.position.y=-.001,t.setParent(this.scene),new r.AxesHelper(this.gl.gl,{size:6,symmetric:!0}).setParent(this.scene),this.orbit=new r.Orbit(this.camera,{element:this.canvas}),this.raycast=new r.Raycast,this.mouse=new r.Vec2,this.isEventListenersAdded=!1}update(){this.orbit?.update()}addFigure(e){const t=super.addFigure(e);if(t.geometry){const i=t.geometry.constructor.name;t.geometry.raycast=i.includes("Sphere")?"sphere":"box"}return t.isHit=!1,t.onBeforeRender(({mesh:i})=>{this.updateHitUniform(i)}),this.isEventListenersAdded&&(this.initMouseListeners(),this.isEventListenersAdded=!0),t}updateHitUniform(e){this.program.uniforms.uHit.value=e.isHit?1:0}initMouseListeners(){window.addEventListener("load",()=>{document.addEventListener("mousemove",this.handleMouseMove,!1)})}handleMouseMove=e=>{this.mouse.set(2*(e.x/this.gl.width)-1,2*(1-e.y/this.gl.height)-1),this.raycast.castMouse(this.camera,this.mouse),this.meshes.forEach(i=>i.isHit=!1),this.raycast.intersectBounds(this.meshes).forEach(i=>i.isHit=!0)};destroy(){this.isEventListenersAdded&&(window.removeEventListener("mousemove",this.handleMouseMove,!1),this.isEventListenersAdded=!1),this.orbit=null,this.raycast=null,this.mouse=null,super.destroy()}}class g extends h{orbit;constructor(e){super(e),this.orbit=new r.Orbit(this.camera,{element:this.canvas,target:new r.Vec3(0,0,0),minPolarAngle:Math.PI/2,maxPolarAngle:Math.PI/2,enableRotate:!0,enableZoom:!1,enablePan:!1})}update(){this.orbit?.update()}}class f{type;position;normal;uv;material;constructor(e){this.type=e.type,this.position=e.position,this.normal=e.normal??[],this.uv=e.uv??[],this.material=e.material}}var p=(s=>(s[s.Cube=0]="Cube",s[s.Sphere=1]="Sphere",s[s.Plane=2]="Plane",s[s.Cylinder=3]="Cylinder",s[s.Custom=4]="Custom",s))(p||{});class y{positions=[];normals=[];uvs=[];tmpPositions=[];tmpNormals=[];tmpUVs=[];load(e){const t=e.split(`
|
|
30
|
+
`);for(const a of t){if(!a.trim()||a.startsWith("#"))continue;const n=a.trim().split(/\s+/);switch(n[0]){case"v":this.tmpPositions.push(n.slice(1).map(Number));break;case"vn":this.tmpNormals.push(n.slice(1).map(Number));break;case"vt":this.tmpUVs.push(n.slice(1).map(Number));break;case"f":this.processFaceLine(n);break}}const i={type:p.Custom,position:this.positions,...this.normals.length>0&&{normal:this.normals},...this.uvs.length>0&&{uv:this.uvs}};return new f(i)}processFaceLine(e){for(let t=1;t<e.length;t++){const i=e[t];if(!i)continue;const[a,n,l]=i.split("/"),m=a?parseInt(a,10):void 0,c=n?parseInt(n,10):void 0,u=l?parseInt(l,10):void 0;if(m!==void 0){const o=this.tmpPositions[m-1];o&&this.positions.push(...o)}if(c!==void 0){const o=this.tmpUVs[c-1];o&&this.uvs.push(...o)}if(u!==void 0){const o=this.tmpNormals[u-1];o&&this.normals.push(...o)}}}}exports.EditorRenderer=v;exports.ObjLoader=y;exports.PreviewRenderer=g;exports.Renderer=h;exports.createProgram=d;
|
package/dist/index.es.js
CHANGED
|
@@ -1,48 +1,43 @@
|
|
|
1
|
-
import { Texture as
|
|
2
|
-
function
|
|
1
|
+
import { Texture as p, Program as v, Renderer as g, Transform as f, Camera as w, Geometry as y, Mesh as b, GridHelper as x, AxesHelper as M, Orbit as c, Raycast as P, Vec2 as A, Vec3 as L } from "ogl";
|
|
2
|
+
function H(t) {
|
|
3
3
|
const e = (
|
|
4
4
|
/* glsl */
|
|
5
5
|
`
|
|
6
6
|
attribute vec3 position;
|
|
7
7
|
attribute vec3 normal;
|
|
8
|
-
attribute vec2 uv;
|
|
9
8
|
|
|
10
9
|
uniform mat4 modelViewMatrix;
|
|
11
10
|
uniform mat4 projectionMatrix;
|
|
12
11
|
uniform mat3 normalMatrix;
|
|
13
12
|
|
|
14
13
|
varying vec3 vNormal;
|
|
15
|
-
varying vec2 vUv;
|
|
16
14
|
|
|
17
15
|
void main() {
|
|
18
|
-
vUv = uv;
|
|
19
16
|
vNormal = normalize(normalMatrix * normal);
|
|
20
17
|
gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
|
|
21
18
|
}
|
|
22
19
|
`
|
|
23
|
-
),
|
|
20
|
+
), s = (
|
|
24
21
|
/* glsl */
|
|
25
22
|
`
|
|
26
23
|
precision highp float;
|
|
27
24
|
|
|
28
25
|
uniform float uHit;
|
|
29
26
|
|
|
30
|
-
uniform sampler2D tMap;
|
|
31
27
|
varying vec3 vNormal;
|
|
32
|
-
varying vec2 vUv;
|
|
33
28
|
|
|
34
29
|
void main() {
|
|
35
|
-
vec3
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
30
|
+
vec3 normal = normalize(vNormal);
|
|
31
|
+
float lighting = dot(normal, normalize(vec3(-0.3, 0.8, 0.6)));
|
|
32
|
+
vec3 color = mix(vec3(0.2, 0.8, 1.0), vec3(1.0, 0.2, 0.8), uHit);
|
|
33
|
+
gl_FragColor.rgb = color + lighting * 0.1;
|
|
34
|
+
gl_FragColor.a = 1.0;
|
|
40
35
|
}
|
|
41
36
|
`
|
|
42
|
-
), i = new
|
|
43
|
-
return new
|
|
37
|
+
), i = new p(t);
|
|
38
|
+
return new v(t, {
|
|
44
39
|
vertex: e,
|
|
45
|
-
fragment:
|
|
40
|
+
fragment: s,
|
|
46
41
|
uniforms: {
|
|
47
42
|
tMap: { value: i },
|
|
48
43
|
uHit: { value: 0 }
|
|
@@ -67,7 +62,7 @@ class u {
|
|
|
67
62
|
* @param canvas - HTMLCanvasElement для рендеринга
|
|
68
63
|
*/
|
|
69
64
|
constructor(e) {
|
|
70
|
-
this.canvas = e, this.gl = new g({ canvas: e }), this.gl.setSize(e.clientWidth, e.clientHeight), this.gl.gl.clearColor(1, 1, 1, 1), this.scene = new f(), this.camera = new
|
|
65
|
+
this.canvas = e, this.gl = new g({ canvas: e }), this.gl.setSize(e.clientWidth, e.clientHeight), this.gl.gl.clearColor(1, 1, 1, 1), this.scene = new f(), this.camera = new w(this.gl.gl, { fov: 45 }), this.camera.position.set(1, 1, 7), this.camera.lookAt([0, 0, 0]), this.program = H(this.gl.gl), this.meshes = [];
|
|
71
66
|
}
|
|
72
67
|
/**
|
|
73
68
|
* Обновляет размер рендерера и камеры при изменении размеров canvas.
|
|
@@ -97,12 +92,12 @@ class u {
|
|
|
97
92
|
* @param figure Данные фигуры: position, normal, uv
|
|
98
93
|
*/
|
|
99
94
|
addFigure(e) {
|
|
100
|
-
const
|
|
95
|
+
const s = new y(this.gl.gl, {
|
|
101
96
|
position: { size: 3, data: new Float32Array(e.position) },
|
|
102
97
|
normal: { size: 3, data: new Float32Array(e.normal ?? []) },
|
|
103
98
|
uv: { size: 2, data: new Float32Array(e.uv ?? []) }
|
|
104
99
|
}), i = new b(this.gl.gl, {
|
|
105
|
-
geometry:
|
|
100
|
+
geometry: s,
|
|
106
101
|
program: this.program
|
|
107
102
|
});
|
|
108
103
|
return i.setParent(this.scene), this.meshes.push(i), i;
|
|
@@ -128,8 +123,8 @@ class C extends u {
|
|
|
128
123
|
*/
|
|
129
124
|
constructor(e) {
|
|
130
125
|
super(e);
|
|
131
|
-
const
|
|
132
|
-
|
|
126
|
+
const s = new x(this.gl.gl, { size: 10, divisions: 10 });
|
|
127
|
+
s.position.y = -1e-3, s.setParent(this.scene), new M(this.gl.gl, { size: 6, symmetric: !0 }).setParent(this.scene), this.orbit = new c(this.camera, { element: this.canvas }), this.raycast = new P(), this.mouse = new A(), this.isEventListenersAdded = !1;
|
|
133
128
|
}
|
|
134
129
|
/**
|
|
135
130
|
* Обновление состояния рендерера.
|
|
@@ -143,14 +138,14 @@ class C extends u {
|
|
|
143
138
|
* @param figure Данные фигуры: position, normal, uv
|
|
144
139
|
*/
|
|
145
140
|
addFigure(e) {
|
|
146
|
-
const
|
|
147
|
-
if (
|
|
148
|
-
const i =
|
|
149
|
-
|
|
141
|
+
const s = super.addFigure(e);
|
|
142
|
+
if (s.geometry) {
|
|
143
|
+
const i = s.geometry.constructor.name;
|
|
144
|
+
s.geometry.raycast = i.includes("Sphere") ? "sphere" : "box";
|
|
150
145
|
}
|
|
151
|
-
return
|
|
146
|
+
return s.isHit = !1, s.onBeforeRender(({ mesh: i }) => {
|
|
152
147
|
this.updateHitUniform(i);
|
|
153
|
-
}), this.isEventListenersAdded && (this.initMouseListeners(), this.isEventListenersAdded = !0),
|
|
148
|
+
}), this.isEventListenersAdded && (this.initMouseListeners(), this.isEventListenersAdded = !0), s;
|
|
154
149
|
}
|
|
155
150
|
/**
|
|
156
151
|
* Обновление uniform uHit для конкретной 3D-модели
|
|
@@ -202,7 +197,7 @@ class F extends u {
|
|
|
202
197
|
this.orbit?.update();
|
|
203
198
|
}
|
|
204
199
|
}
|
|
205
|
-
class
|
|
200
|
+
class E {
|
|
206
201
|
/** Тип фигуры */
|
|
207
202
|
type;
|
|
208
203
|
/** Позиции вершин */
|
|
@@ -221,7 +216,7 @@ class H {
|
|
|
221
216
|
this.type = e.type, this.position = e.position, this.normal = e.normal ?? [], this.uv = e.uv ?? [], this.material = e.material;
|
|
222
217
|
}
|
|
223
218
|
}
|
|
224
|
-
var d = /* @__PURE__ */ ((
|
|
219
|
+
var d = /* @__PURE__ */ ((t) => (t[t.Cube = 0] = "Cube", t[t.Sphere = 1] = "Sphere", t[t.Plane = 2] = "Plane", t[t.Cylinder = 3] = "Cylinder", t[t.Custom = 4] = "Custom", t))(d || {});
|
|
225
220
|
class I {
|
|
226
221
|
/** Позиции вершин */
|
|
227
222
|
positions = [];
|
|
@@ -238,11 +233,11 @@ class I {
|
|
|
238
233
|
* @param objContent Строка содержимого .obj файла
|
|
239
234
|
*/
|
|
240
235
|
load(e) {
|
|
241
|
-
const
|
|
236
|
+
const s = e.split(`
|
|
242
237
|
`);
|
|
243
|
-
for (const
|
|
244
|
-
if (!
|
|
245
|
-
const r =
|
|
238
|
+
for (const a of s) {
|
|
239
|
+
if (!a.trim() || a.startsWith("#")) continue;
|
|
240
|
+
const r = a.trim().split(/\s+/);
|
|
246
241
|
switch (r[0]) {
|
|
247
242
|
case "v":
|
|
248
243
|
this.tmpPositions.push(r.slice(1).map(Number));
|
|
@@ -264,27 +259,27 @@ class I {
|
|
|
264
259
|
...this.normals.length > 0 && { normal: this.normals },
|
|
265
260
|
...this.uvs.length > 0 && { uv: this.uvs }
|
|
266
261
|
};
|
|
267
|
-
return new
|
|
262
|
+
return new E(i);
|
|
268
263
|
}
|
|
269
264
|
/**
|
|
270
265
|
* Обрабатывает строку face (f) и разворачивает индексы в массивы для рендеринга
|
|
271
266
|
*/
|
|
272
267
|
processFaceLine(e) {
|
|
273
|
-
for (let
|
|
274
|
-
const i = e[
|
|
268
|
+
for (let s = 1; s < e.length; s++) {
|
|
269
|
+
const i = e[s];
|
|
275
270
|
if (!i) continue;
|
|
276
|
-
const [
|
|
271
|
+
const [a, r, o] = i.split("/"), h = a ? parseInt(a, 10) : void 0, l = r ? parseInt(r, 10) : void 0, m = o ? parseInt(o, 10) : void 0;
|
|
277
272
|
if (h !== void 0) {
|
|
278
|
-
const
|
|
279
|
-
|
|
273
|
+
const n = this.tmpPositions[h - 1];
|
|
274
|
+
n && this.positions.push(...n);
|
|
280
275
|
}
|
|
281
276
|
if (l !== void 0) {
|
|
282
|
-
const
|
|
283
|
-
|
|
277
|
+
const n = this.tmpUVs[l - 1];
|
|
278
|
+
n && this.uvs.push(...n);
|
|
284
279
|
}
|
|
285
280
|
if (m !== void 0) {
|
|
286
|
-
const
|
|
287
|
-
|
|
281
|
+
const n = this.tmpNormals[m - 1];
|
|
282
|
+
n && this.normals.push(...n);
|
|
288
283
|
}
|
|
289
284
|
}
|
|
290
285
|
}
|
|
@@ -294,5 +289,5 @@ export {
|
|
|
294
289
|
I as ObjLoader,
|
|
295
290
|
F as PreviewRenderer,
|
|
296
291
|
u as Renderer,
|
|
297
|
-
|
|
292
|
+
H as createProgram
|
|
298
293
|
};
|
package/dist/index.umd.js
CHANGED
|
@@ -1,17 +1,14 @@
|
|
|
1
1
|
(function(n,r){typeof exports=="object"&&typeof module<"u"?r(exports,require("ogl")):typeof define=="function"&&define.amd?define(["exports","ogl"],r):(n=typeof globalThis<"u"?globalThis:n||self,r(n.PlanaraCore={},n.OGL))})(this,(function(n,r){"use strict";function m(s){const e=`
|
|
2
2
|
attribute vec3 position;
|
|
3
3
|
attribute vec3 normal;
|
|
4
|
-
attribute vec2 uv;
|
|
5
4
|
|
|
6
5
|
uniform mat4 modelViewMatrix;
|
|
7
6
|
uniform mat4 projectionMatrix;
|
|
8
7
|
uniform mat3 normalMatrix;
|
|
9
8
|
|
|
10
9
|
varying vec3 vNormal;
|
|
11
|
-
varying vec2 vUv;
|
|
12
10
|
|
|
13
11
|
void main() {
|
|
14
|
-
vUv = uv;
|
|
15
12
|
vNormal = normalize(normalMatrix * normal);
|
|
16
13
|
gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
|
|
17
14
|
}
|
|
@@ -20,16 +17,14 @@
|
|
|
20
17
|
|
|
21
18
|
uniform float uHit;
|
|
22
19
|
|
|
23
|
-
uniform sampler2D tMap;
|
|
24
20
|
varying vec3 vNormal;
|
|
25
|
-
varying vec2 vUv;
|
|
26
21
|
|
|
27
22
|
void main() {
|
|
28
|
-
vec3
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
23
|
+
vec3 normal = normalize(vNormal);
|
|
24
|
+
float lighting = dot(normal, normalize(vec3(-0.3, 0.8, 0.6)));
|
|
25
|
+
vec3 color = mix(vec3(0.2, 0.8, 1.0), vec3(1.0, 0.2, 0.8), uHit);
|
|
26
|
+
gl_FragColor.rgb = color + lighting * 0.1;
|
|
27
|
+
gl_FragColor.a = 1.0;
|
|
33
28
|
}
|
|
34
29
|
`,i=new r.Texture(s);return new r.Program(s,{vertex:e,fragment:t,uniforms:{tMap:{value:i},uHit:{value:0}}})}class l{gl;scene;camera;canvas;program;meshes;constructor(e){this.canvas=e,this.gl=new r.Renderer({canvas:e}),this.gl.setSize(e.clientWidth,e.clientHeight),this.gl.gl.clearColor(1,1,1,1),this.scene=new r.Transform,this.camera=new r.Camera(this.gl.gl,{fov:45}),this.camera.position.set(1,1,7),this.camera.lookAt([0,0,0]),this.program=m(this.gl.gl),this.meshes=[]}resize(){this.gl.setSize(this.canvas.width,this.canvas.height),this.camera.perspective({aspect:this.canvas.width/this.canvas.height})}render(){this.gl.render({scene:this.scene,camera:this.camera})}update(){}loop(){this.update(),this.render(),requestAnimationFrame(this.loop.bind(this))}addFigure(e){const t=new r.Geometry(this.gl.gl,{position:{size:3,data:new Float32Array(e.position)},normal:{size:3,data:new Float32Array(e.normal??[])},uv:{size:2,data:new Float32Array(e.uv??[])}}),i=new r.Mesh(this.gl.gl,{geometry:t,program:this.program});return i.setParent(this.scene),this.meshes.push(i),i}destroy(){this.meshes&&(this.meshes.length=0,this.meshes=[]),this.scene=null,this.camera=null,this.program=null,this.gl=null,this.canvas=null}}class f extends l{orbit;raycast;mouse;isEventListenersAdded;constructor(e){super(e);const t=new r.GridHelper(this.gl.gl,{size:10,divisions:10});t.position.y=-.001,t.setParent(this.scene),new r.AxesHelper(this.gl.gl,{size:6,symmetric:!0}).setParent(this.scene),this.orbit=new r.Orbit(this.camera,{element:this.canvas}),this.raycast=new r.Raycast,this.mouse=new r.Vec2,this.isEventListenersAdded=!1}update(){this.orbit?.update()}addFigure(e){const t=super.addFigure(e);if(t.geometry){const i=t.geometry.constructor.name;t.geometry.raycast=i.includes("Sphere")?"sphere":"box"}return t.isHit=!1,t.onBeforeRender(({mesh:i})=>{this.updateHitUniform(i)}),this.isEventListenersAdded&&(this.initMouseListeners(),this.isEventListenersAdded=!0),t}updateHitUniform(e){this.program.uniforms.uHit.value=e.isHit?1:0}initMouseListeners(){window.addEventListener("load",()=>{document.addEventListener("mousemove",this.handleMouseMove,!1)})}handleMouseMove=e=>{this.mouse.set(2*(e.x/this.gl.width)-1,2*(1-e.y/this.gl.height)-1),this.raycast.castMouse(this.camera,this.mouse),this.meshes.forEach(i=>i.isHit=!1),this.raycast.intersectBounds(this.meshes).forEach(i=>i.isHit=!0)};destroy(){this.isEventListenersAdded&&(window.removeEventListener("mousemove",this.handleMouseMove,!1),this.isEventListenersAdded=!1),this.orbit=null,this.raycast=null,this.mouse=null,super.destroy()}}class g extends l{orbit;constructor(e){super(e),this.orbit=new r.Orbit(this.camera,{element:this.canvas,target:new r.Vec3(0,0,0),minPolarAngle:Math.PI/2,maxPolarAngle:Math.PI/2,enableRotate:!0,enableZoom:!1,enablePan:!1})}update(){this.orbit?.update()}}class y{type;position;normal;uv;material;constructor(e){this.type=e.type,this.position=e.position,this.normal=e.normal??[],this.uv=e.uv??[],this.material=e.material}}var c=(s=>(s[s.Cube=0]="Cube",s[s.Sphere=1]="Sphere",s[s.Plane=2]="Plane",s[s.Cylinder=3]="Cylinder",s[s.Custom=4]="Custom",s))(c||{});class b{positions=[];normals=[];uvs=[];tmpPositions=[];tmpNormals=[];tmpUVs=[];load(e){const t=e.split(`
|
|
35
|
-
`);for(const h of t){if(!h.trim()||h.startsWith("#"))continue;const a=h.trim().split(/\s+/);switch(a[0]){case"v":this.tmpPositions.push(a.slice(1).map(Number));break;case"vn":this.tmpNormals.push(a.slice(1).map(Number));break;case"vt":this.tmpUVs.push(a.slice(1).map(Number));break;case"f":this.processFaceLine(a);break}}const i={type:c.Custom,position:this.positions,...this.normals.length>0&&{normal:this.normals},...this.uvs.length>0&&{uv:this.uvs}};return new y(i)}processFaceLine(e){for(let t=1;t<e.length;t++){const i=e[t];if(!i)continue;const[h,a,u]=i.split("/"),d=h?parseInt(h,10):void 0,
|
|
30
|
+
`);for(const h of t){if(!h.trim()||h.startsWith("#"))continue;const a=h.trim().split(/\s+/);switch(a[0]){case"v":this.tmpPositions.push(a.slice(1).map(Number));break;case"vn":this.tmpNormals.push(a.slice(1).map(Number));break;case"vt":this.tmpUVs.push(a.slice(1).map(Number));break;case"f":this.processFaceLine(a);break}}const i={type:c.Custom,position:this.positions,...this.normals.length>0&&{normal:this.normals},...this.uvs.length>0&&{uv:this.uvs}};return new y(i)}processFaceLine(e){for(let t=1;t<e.length;t++){const i=e[t];if(!i)continue;const[h,a,u]=i.split("/"),d=h?parseInt(h,10):void 0,p=a?parseInt(a,10):void 0,v=u?parseInt(u,10):void 0;if(d!==void 0){const o=this.tmpPositions[d-1];o&&this.positions.push(...o)}if(p!==void 0){const o=this.tmpUVs[p-1];o&&this.uvs.push(...o)}if(v!==void 0){const o=this.tmpNormals[v-1];o&&this.normals.push(...o)}}}}n.EditorRenderer=f,n.ObjLoader=b,n.PreviewRenderer=g,n.Renderer=l,n.createProgram=m,Object.defineProperty(n,Symbol.toStringTag,{value:"Module"})}));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"program-settings.d.ts","sourceRoot":"","sources":["../../src/utils/program-settings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,mBAAmB,EAAE,OAAO,EAAW,MAAM,KAAK,CAAC;AAEjE;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,mBAAmB,GAAG,OAAO,
|
|
1
|
+
{"version":3,"file":"program-settings.d.ts","sourceRoot":"","sources":["../../src/utils/program-settings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,mBAAmB,EAAE,OAAO,EAAW,MAAM,KAAK,CAAC;AAEjE;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,mBAAmB,GAAG,OAAO,CA2C9D"}
|