@12ui/design 0.2.71 → 0.2.72
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/README.md +5 -0
- package/SKILL.md +1 -1
- package/dist/cli-capabilities.d.ts +9 -0
- package/dist/cli-capabilities.d.ts.map +1 -1
- package/dist/cli-capabilities.js +10 -0
- package/dist/cli-capabilities.js.map +1 -1
- package/dist/cli-help/index.d.ts +93 -0
- package/dist/cli-help/index.d.ts.map +1 -1
- package/dist/cli-help/index.js +2 -0
- package/dist/cli-help/index.js.map +1 -1
- package/dist/cli-help/scene.d.ts +96 -0
- package/dist/cli-help/scene.d.ts.map +1 -0
- package/dist/cli-help/scene.js +162 -0
- package/dist/cli-help/scene.js.map +1 -0
- package/dist/cli-run.d.ts.map +1 -1
- package/dist/cli-run.js +6 -0
- package/dist/cli-run.js.map +1 -1
- package/dist/cli-scene-command.d.ts +3 -0
- package/dist/cli-scene-command.d.ts.map +1 -0
- package/dist/cli-scene-command.js +292 -0
- package/dist/cli-scene-command.js.map +1 -0
- package/dist/cli-usage.d.ts +8 -0
- package/dist/cli-usage.d.ts.map +1 -1
- package/dist/cli-usage.js +26 -1
- package/dist/cli-usage.js.map +1 -1
- package/dist/legacy-skill-catalog.d.ts.map +1 -1
- package/dist/legacy-skill-catalog.js +11 -0
- package/dist/legacy-skill-catalog.js.map +1 -1
- package/dist/prototype-browsers.d.ts +8 -2
- package/dist/prototype-browsers.d.ts.map +1 -1
- package/dist/prototype-browsers.js +8 -3
- package/dist/prototype-browsers.js.map +1 -1
- package/dist/prototype-process.js +1 -1
- package/dist/prototype-process.js.map +1 -1
- package/dist/run-journal-commands.d.ts.map +1 -1
- package/dist/run-journal-commands.js +6 -0
- package/dist/run-journal-commands.js.map +1 -1
- package/dist/scene/camera-model.d.ts +48 -0
- package/dist/scene/camera-model.d.ts.map +1 -0
- package/dist/scene/camera-model.js +89 -0
- package/dist/scene/camera-model.js.map +1 -0
- package/dist/scene/camera-solve.d.ts +58 -0
- package/dist/scene/camera-solve.d.ts.map +1 -0
- package/dist/scene/camera-solve.js +288 -0
- package/dist/scene/camera-solve.js.map +1 -0
- package/dist/scene/capture-plan.d.ts +28 -0
- package/dist/scene/capture-plan.d.ts.map +1 -0
- package/dist/scene/capture-plan.js +79 -0
- package/dist/scene/capture-plan.js.map +1 -0
- package/dist/scene/capture.d.ts +21 -0
- package/dist/scene/capture.d.ts.map +1 -0
- package/dist/scene/capture.js +118 -0
- package/dist/scene/capture.js.map +1 -0
- package/dist/scene/image-colors.d.ts +25 -0
- package/dist/scene/image-colors.d.ts.map +1 -0
- package/dist/scene/image-colors.js +110 -0
- package/dist/scene/image-colors.js.map +1 -0
- package/dist/scene/image-rectify.d.ts +25 -0
- package/dist/scene/image-rectify.d.ts.map +1 -0
- package/dist/scene/image-rectify.js +82 -0
- package/dist/scene/image-rectify.js.map +1 -0
- package/dist/scene/image-sheet.d.ts +19 -0
- package/dist/scene/image-sheet.d.ts.map +1 -0
- package/dist/scene/image-sheet.js +118 -0
- package/dist/scene/image-sheet.js.map +1 -0
- package/dist/scene/least-squares.d.ts +31 -0
- package/dist/scene/least-squares.d.ts.map +1 -0
- package/dist/scene/least-squares.js +173 -0
- package/dist/scene/least-squares.js.map +1 -0
- package/dist/scene/numbers.d.ts +17 -0
- package/dist/scene/numbers.d.ts.map +1 -0
- package/dist/scene/numbers.js +39 -0
- package/dist/scene/numbers.js.map +1 -0
- package/dist/scene/placement.d.ts +43 -0
- package/dist/scene/placement.d.ts.map +1 -0
- package/dist/scene/placement.js +107 -0
- package/dist/scene/placement.js.map +1 -0
- package/dist/scene/raster.d.ts +18 -0
- package/dist/scene/raster.d.ts.map +1 -0
- package/dist/scene/raster.js +31 -0
- package/dist/scene/raster.js.map +1 -0
- package/dist/scene/scene-kit.d.ts +20 -0
- package/dist/scene/scene-kit.d.ts.map +1 -0
- package/dist/scene/scene-kit.js +74 -0
- package/dist/scene/scene-kit.js.map +1 -0
- package/dist/scene/scene-verbs.d.ts +4 -0
- package/dist/scene/scene-verbs.d.ts.map +1 -0
- package/dist/scene/scene-verbs.js +5 -0
- package/dist/scene/scene-verbs.js.map +1 -0
- package/dist/scene/seeded-random.d.ts +20 -0
- package/dist/scene/seeded-random.d.ts.map +1 -0
- package/dist/scene/seeded-random.js +42 -0
- package/dist/scene/seeded-random.js.map +1 -0
- package/dist/scene/spec-expression.d.ts +25 -0
- package/dist/scene/spec-expression.d.ts.map +1 -0
- package/dist/scene/spec-expression.js +234 -0
- package/dist/scene/spec-expression.js.map +1 -0
- package/dist/scene/static-server.d.ts +13 -0
- package/dist/scene/static-server.d.ts.map +1 -0
- package/dist/scene/static-server.js +99 -0
- package/dist/scene/static-server.js.map +1 -0
- package/open-design.json +2 -2
- package/package.json +3 -1
- package/scene-kit/starter/camera.js +10 -0
- package/scene-kit/starter/gobo.js +60 -0
- package/scene-kit/starter/index.html +23 -0
- package/scene-kit/starter/lib.js +84 -0
- package/scene-kit/starter/main.js +78 -0
- package/scene-kit/starter/scene.js +33 -0
- package/scene-kit/vendor/LICENSE +21 -0
- package/scene-kit/vendor/addons/geometries/RoundedBoxGeometry.js +216 -0
- package/scene-kit/vendor/addons/renderers/CSS3DRenderer.js +454 -0
- package/scene-kit/vendor/three.core.js +60586 -0
- package/scene-kit/vendor/three.module.js +19719 -0
- package/skills/12ui-design/SKILL.md +7 -1
- package/skills/12ui-design/scene.md +172 -0
|
@@ -0,0 +1,454 @@
|
|
|
1
|
+
import {
|
|
2
|
+
Matrix4,
|
|
3
|
+
Object3D,
|
|
4
|
+
Quaternion,
|
|
5
|
+
Vector3
|
|
6
|
+
} from 'three';
|
|
7
|
+
|
|
8
|
+
// Based on http://www.emagix.net/academic/mscs-project/item/camera-sync-with-css3-and-webgl-threejs
|
|
9
|
+
|
|
10
|
+
const _position = new Vector3();
|
|
11
|
+
const _quaternion = new Quaternion();
|
|
12
|
+
const _scale = new Vector3();
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* The base 3D object that is supported by {@link CSS3DRenderer}.
|
|
16
|
+
*
|
|
17
|
+
* @augments Object3D
|
|
18
|
+
* @three_import import { CSS3DObject } from 'three/addons/renderers/CSS3DRenderer.js';
|
|
19
|
+
*/
|
|
20
|
+
class CSS3DObject extends Object3D {
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Constructs a new CSS3D object.
|
|
24
|
+
*
|
|
25
|
+
* @param {HTMLElement} [element] - The DOM element.
|
|
26
|
+
*/
|
|
27
|
+
constructor( element = document.createElement( 'div' ) ) {
|
|
28
|
+
|
|
29
|
+
super();
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* This flag can be used for type testing.
|
|
33
|
+
*
|
|
34
|
+
* @type {boolean}
|
|
35
|
+
* @readonly
|
|
36
|
+
* @default true
|
|
37
|
+
*/
|
|
38
|
+
this.isCSS3DObject = true;
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* The DOM element which defines the appearance of this 3D object.
|
|
42
|
+
*
|
|
43
|
+
* @type {HTMLElement}
|
|
44
|
+
* @readonly
|
|
45
|
+
* @default true
|
|
46
|
+
*/
|
|
47
|
+
this.element = element;
|
|
48
|
+
this.element.style.position = 'absolute';
|
|
49
|
+
this.element.style.pointerEvents = 'auto';
|
|
50
|
+
this.element.style.userSelect = 'none';
|
|
51
|
+
|
|
52
|
+
this.element.setAttribute( 'draggable', false );
|
|
53
|
+
|
|
54
|
+
this.addEventListener( 'removed', function () {
|
|
55
|
+
|
|
56
|
+
this.traverse( function ( object ) {
|
|
57
|
+
|
|
58
|
+
if (
|
|
59
|
+
object.element &&
|
|
60
|
+
object.element instanceof object.element.ownerDocument.defaultView.Element &&
|
|
61
|
+
object.element.parentNode !== null
|
|
62
|
+
) {
|
|
63
|
+
|
|
64
|
+
object.element.remove();
|
|
65
|
+
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
} );
|
|
69
|
+
|
|
70
|
+
} );
|
|
71
|
+
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
copy( source, recursive ) {
|
|
75
|
+
|
|
76
|
+
super.copy( source, recursive );
|
|
77
|
+
|
|
78
|
+
this.element = source.element.cloneNode( true );
|
|
79
|
+
|
|
80
|
+
return this;
|
|
81
|
+
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* A specialized version of {@link CSS3DObject} that represents
|
|
88
|
+
* DOM elements as sprites.
|
|
89
|
+
*
|
|
90
|
+
* @augments CSS3DObject
|
|
91
|
+
* @three_import import { CSS3DSprite } from 'three/addons/renderers/CSS3DRenderer.js';
|
|
92
|
+
*/
|
|
93
|
+
class CSS3DSprite extends CSS3DObject {
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* Constructs a new CSS3D sprite object.
|
|
97
|
+
*
|
|
98
|
+
* @param {HTMLElement} [element] - The DOM element.
|
|
99
|
+
*/
|
|
100
|
+
constructor( element ) {
|
|
101
|
+
|
|
102
|
+
super( element );
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* This flag can be used for type testing.
|
|
106
|
+
*
|
|
107
|
+
* @type {boolean}
|
|
108
|
+
* @readonly
|
|
109
|
+
* @default true
|
|
110
|
+
*/
|
|
111
|
+
this.isCSS3DSprite = true;
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* The sprite's rotation in radians.
|
|
115
|
+
*
|
|
116
|
+
* @type {number}
|
|
117
|
+
* @default 0
|
|
118
|
+
*/
|
|
119
|
+
this.rotation2D = 0;
|
|
120
|
+
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
copy( source, recursive ) {
|
|
124
|
+
|
|
125
|
+
super.copy( source, recursive );
|
|
126
|
+
|
|
127
|
+
this.rotation2D = source.rotation2D;
|
|
128
|
+
|
|
129
|
+
return this;
|
|
130
|
+
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
//
|
|
136
|
+
|
|
137
|
+
const _matrix = new Matrix4();
|
|
138
|
+
const _matrix2 = new Matrix4();
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* This renderer can be used to apply hierarchical 3D transformations to DOM elements
|
|
142
|
+
* via the CSS3 [transform](https://www.w3schools.com/cssref/css3_pr_transform.asp) property.
|
|
143
|
+
* `CSS3DRenderer` is particularly interesting if you want to apply 3D effects to a website without
|
|
144
|
+
* canvas based rendering. It can also be used in order to combine DOM elements with WebGL content.
|
|
145
|
+
*
|
|
146
|
+
* There are, however, some important limitations:
|
|
147
|
+
*
|
|
148
|
+
* - It's not possible to use the material system of *three.js*.
|
|
149
|
+
* - It's also not possible to use geometries.
|
|
150
|
+
* - The renderer only supports 100% browser and display zoom.
|
|
151
|
+
*
|
|
152
|
+
* So `CSS3DRenderer` is just focused on ordinary DOM elements. These elements are wrapped into special
|
|
153
|
+
* 3D objects ({@link CSS3DObject} or {@link CSS3DSprite}) and then added to the scene graph.
|
|
154
|
+
*
|
|
155
|
+
* @three_import import { CSS3DRenderer } from 'three/addons/renderers/CSS3DRenderer.js';
|
|
156
|
+
*/
|
|
157
|
+
class CSS3DRenderer {
|
|
158
|
+
|
|
159
|
+
/**
|
|
160
|
+
* Constructs a new CSS3D renderer.
|
|
161
|
+
*
|
|
162
|
+
* @param {CSS3DRenderer~Parameters} [parameters] - The parameters.
|
|
163
|
+
*/
|
|
164
|
+
constructor( parameters = {} ) {
|
|
165
|
+
|
|
166
|
+
const _this = this;
|
|
167
|
+
|
|
168
|
+
let _width, _height;
|
|
169
|
+
let _widthHalf, _heightHalf;
|
|
170
|
+
|
|
171
|
+
const cache = {
|
|
172
|
+
camera: { style: '' },
|
|
173
|
+
objects: new WeakMap()
|
|
174
|
+
};
|
|
175
|
+
|
|
176
|
+
const domElement = parameters.element !== undefined ? parameters.element : document.createElement( 'div' );
|
|
177
|
+
|
|
178
|
+
domElement.style.overflow = 'hidden';
|
|
179
|
+
|
|
180
|
+
/**
|
|
181
|
+
* The DOM where the renderer appends its child-elements.
|
|
182
|
+
*
|
|
183
|
+
* @type {HTMLElement}
|
|
184
|
+
*/
|
|
185
|
+
this.domElement = domElement;
|
|
186
|
+
|
|
187
|
+
const viewElement = document.createElement( 'div' );
|
|
188
|
+
viewElement.style.transformOrigin = '0 0';
|
|
189
|
+
viewElement.style.pointerEvents = 'none';
|
|
190
|
+
domElement.appendChild( viewElement );
|
|
191
|
+
|
|
192
|
+
const cameraElement = document.createElement( 'div' );
|
|
193
|
+
|
|
194
|
+
cameraElement.style.transformStyle = 'preserve-3d';
|
|
195
|
+
|
|
196
|
+
viewElement.appendChild( cameraElement );
|
|
197
|
+
|
|
198
|
+
/**
|
|
199
|
+
* Returns an object containing the width and height of the renderer.
|
|
200
|
+
*
|
|
201
|
+
* @return {{width:number,height:number}} The size of the renderer.
|
|
202
|
+
*/
|
|
203
|
+
this.getSize = function () {
|
|
204
|
+
|
|
205
|
+
return {
|
|
206
|
+
width: _width,
|
|
207
|
+
height: _height
|
|
208
|
+
};
|
|
209
|
+
|
|
210
|
+
};
|
|
211
|
+
|
|
212
|
+
/**
|
|
213
|
+
* Renders the given scene using the given camera.
|
|
214
|
+
*
|
|
215
|
+
* @param {Object3D} scene - A scene or any other type of 3D object.
|
|
216
|
+
* @param {Camera} camera - The camera.
|
|
217
|
+
*/
|
|
218
|
+
this.render = function ( scene, camera ) {
|
|
219
|
+
|
|
220
|
+
const fov = camera.projectionMatrix.elements[ 5 ] * _heightHalf;
|
|
221
|
+
|
|
222
|
+
if ( camera.view && camera.view.enabled ) {
|
|
223
|
+
|
|
224
|
+
// view offset
|
|
225
|
+
viewElement.style.transform = `translate( ${ - camera.view.offsetX * ( _width / camera.view.width ) }px, ${ - camera.view.offsetY * ( _height / camera.view.height ) }px )`;
|
|
226
|
+
|
|
227
|
+
// view fullWidth and fullHeight, view width and height
|
|
228
|
+
viewElement.style.transform += `scale( ${ camera.view.fullWidth / camera.view.width }, ${ camera.view.fullHeight / camera.view.height } )`;
|
|
229
|
+
|
|
230
|
+
} else {
|
|
231
|
+
|
|
232
|
+
viewElement.style.transform = '';
|
|
233
|
+
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
if ( scene.matrixWorldAutoUpdate === true ) scene.updateMatrixWorld();
|
|
237
|
+
if ( camera.parent === null && camera.matrixWorldAutoUpdate === true ) camera.updateMatrixWorld();
|
|
238
|
+
|
|
239
|
+
let tx, ty;
|
|
240
|
+
|
|
241
|
+
if ( camera.isOrthographicCamera ) {
|
|
242
|
+
|
|
243
|
+
tx = - ( camera.right + camera.left ) / 2;
|
|
244
|
+
ty = ( camera.top + camera.bottom ) / 2;
|
|
245
|
+
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
const scaleByViewOffset = camera.view && camera.view.enabled ? camera.view.height / camera.view.fullHeight : 1;
|
|
249
|
+
const cameraCSSMatrix = camera.isOrthographicCamera ?
|
|
250
|
+
`scale( ${ scaleByViewOffset } )` + 'scale(' + fov + ')' + 'translate(' + epsilon( tx ) + 'px,' + epsilon( ty ) + 'px)' + getCameraCSSMatrix( camera.matrixWorldInverse ) :
|
|
251
|
+
`scale( ${ scaleByViewOffset } )` + 'translateZ(' + fov + 'px)' + getCameraCSSMatrix( camera.matrixWorldInverse );
|
|
252
|
+
const perspective = camera.isPerspectiveCamera ? 'perspective(' + fov + 'px) ' : '';
|
|
253
|
+
|
|
254
|
+
const style = perspective + cameraCSSMatrix +
|
|
255
|
+
'translate(' + _widthHalf + 'px,' + _heightHalf + 'px)';
|
|
256
|
+
|
|
257
|
+
if ( cache.camera.style !== style ) {
|
|
258
|
+
|
|
259
|
+
cameraElement.style.transform = style;
|
|
260
|
+
|
|
261
|
+
cache.camera.style = style;
|
|
262
|
+
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
renderObject( scene, scene, camera, cameraCSSMatrix );
|
|
266
|
+
|
|
267
|
+
};
|
|
268
|
+
|
|
269
|
+
/**
|
|
270
|
+
* Resizes the renderer to the given width and height.
|
|
271
|
+
*
|
|
272
|
+
* @param {number} width - The width of the renderer.
|
|
273
|
+
* @param {number} height - The height of the renderer.
|
|
274
|
+
*/
|
|
275
|
+
this.setSize = function ( width, height ) {
|
|
276
|
+
|
|
277
|
+
_width = width;
|
|
278
|
+
_height = height;
|
|
279
|
+
_widthHalf = _width / 2;
|
|
280
|
+
_heightHalf = _height / 2;
|
|
281
|
+
|
|
282
|
+
domElement.style.width = width + 'px';
|
|
283
|
+
domElement.style.height = height + 'px';
|
|
284
|
+
|
|
285
|
+
viewElement.style.width = width + 'px';
|
|
286
|
+
viewElement.style.height = height + 'px';
|
|
287
|
+
|
|
288
|
+
cameraElement.style.width = width + 'px';
|
|
289
|
+
cameraElement.style.height = height + 'px';
|
|
290
|
+
|
|
291
|
+
};
|
|
292
|
+
|
|
293
|
+
function epsilon( value ) {
|
|
294
|
+
|
|
295
|
+
return Math.abs( value ) < 1e-10 ? 0 : value;
|
|
296
|
+
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
function getCameraCSSMatrix( matrix ) {
|
|
300
|
+
|
|
301
|
+
const elements = matrix.elements;
|
|
302
|
+
|
|
303
|
+
return 'matrix3d(' +
|
|
304
|
+
epsilon( elements[ 0 ] ) + ',' +
|
|
305
|
+
epsilon( - elements[ 1 ] ) + ',' +
|
|
306
|
+
epsilon( elements[ 2 ] ) + ',' +
|
|
307
|
+
epsilon( elements[ 3 ] ) + ',' +
|
|
308
|
+
epsilon( elements[ 4 ] ) + ',' +
|
|
309
|
+
epsilon( - elements[ 5 ] ) + ',' +
|
|
310
|
+
epsilon( elements[ 6 ] ) + ',' +
|
|
311
|
+
epsilon( elements[ 7 ] ) + ',' +
|
|
312
|
+
epsilon( elements[ 8 ] ) + ',' +
|
|
313
|
+
epsilon( - elements[ 9 ] ) + ',' +
|
|
314
|
+
epsilon( elements[ 10 ] ) + ',' +
|
|
315
|
+
epsilon( elements[ 11 ] ) + ',' +
|
|
316
|
+
epsilon( elements[ 12 ] ) + ',' +
|
|
317
|
+
epsilon( - elements[ 13 ] ) + ',' +
|
|
318
|
+
epsilon( elements[ 14 ] ) + ',' +
|
|
319
|
+
epsilon( elements[ 15 ] ) +
|
|
320
|
+
')';
|
|
321
|
+
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
function getObjectCSSMatrix( matrix ) {
|
|
325
|
+
|
|
326
|
+
const elements = matrix.elements;
|
|
327
|
+
const matrix3d = 'matrix3d(' +
|
|
328
|
+
epsilon( elements[ 0 ] ) + ',' +
|
|
329
|
+
epsilon( elements[ 1 ] ) + ',' +
|
|
330
|
+
epsilon( elements[ 2 ] ) + ',' +
|
|
331
|
+
epsilon( elements[ 3 ] ) + ',' +
|
|
332
|
+
epsilon( - elements[ 4 ] ) + ',' +
|
|
333
|
+
epsilon( - elements[ 5 ] ) + ',' +
|
|
334
|
+
epsilon( - elements[ 6 ] ) + ',' +
|
|
335
|
+
epsilon( - elements[ 7 ] ) + ',' +
|
|
336
|
+
epsilon( elements[ 8 ] ) + ',' +
|
|
337
|
+
epsilon( elements[ 9 ] ) + ',' +
|
|
338
|
+
epsilon( elements[ 10 ] ) + ',' +
|
|
339
|
+
epsilon( elements[ 11 ] ) + ',' +
|
|
340
|
+
epsilon( elements[ 12 ] ) + ',' +
|
|
341
|
+
epsilon( elements[ 13 ] ) + ',' +
|
|
342
|
+
epsilon( elements[ 14 ] ) + ',' +
|
|
343
|
+
epsilon( elements[ 15 ] ) +
|
|
344
|
+
')';
|
|
345
|
+
|
|
346
|
+
return 'translate(-50%,-50%)' + matrix3d;
|
|
347
|
+
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
function hideObject( object ) {
|
|
351
|
+
|
|
352
|
+
if ( object.isCSS3DObject ) object.element.style.display = 'none';
|
|
353
|
+
|
|
354
|
+
for ( let i = 0, l = object.children.length; i < l; i ++ ) {
|
|
355
|
+
|
|
356
|
+
hideObject( object.children[ i ] );
|
|
357
|
+
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
function renderObject( object, scene, camera, cameraCSSMatrix ) {
|
|
363
|
+
|
|
364
|
+
if ( object.visible === false ) {
|
|
365
|
+
|
|
366
|
+
hideObject( object );
|
|
367
|
+
|
|
368
|
+
return;
|
|
369
|
+
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
if ( object.isCSS3DObject ) {
|
|
373
|
+
|
|
374
|
+
const visible = ( object.layers.test( camera.layers ) === true );
|
|
375
|
+
|
|
376
|
+
const element = object.element;
|
|
377
|
+
element.style.display = visible === true ? '' : 'none';
|
|
378
|
+
|
|
379
|
+
if ( visible === true ) {
|
|
380
|
+
|
|
381
|
+
object.onBeforeRender( _this, scene, camera );
|
|
382
|
+
|
|
383
|
+
let style;
|
|
384
|
+
|
|
385
|
+
if ( object.isCSS3DSprite ) {
|
|
386
|
+
|
|
387
|
+
// http://swiftcoder.wordpress.com/2008/11/25/constructing-a-billboard-matrix/
|
|
388
|
+
|
|
389
|
+
_matrix.copy( camera.matrixWorldInverse );
|
|
390
|
+
_matrix.transpose();
|
|
391
|
+
|
|
392
|
+
if ( object.rotation2D !== 0 ) _matrix.multiply( _matrix2.makeRotationZ( object.rotation2D ) );
|
|
393
|
+
|
|
394
|
+
object.matrixWorld.decompose( _position, _quaternion, _scale );
|
|
395
|
+
_matrix.setPosition( _position );
|
|
396
|
+
_matrix.scale( _scale );
|
|
397
|
+
|
|
398
|
+
_matrix.elements[ 3 ] = 0;
|
|
399
|
+
_matrix.elements[ 7 ] = 0;
|
|
400
|
+
_matrix.elements[ 11 ] = 0;
|
|
401
|
+
_matrix.elements[ 15 ] = 1;
|
|
402
|
+
|
|
403
|
+
style = getObjectCSSMatrix( _matrix );
|
|
404
|
+
|
|
405
|
+
} else {
|
|
406
|
+
|
|
407
|
+
style = getObjectCSSMatrix( object.matrixWorld );
|
|
408
|
+
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
const cachedObject = cache.objects.get( object );
|
|
412
|
+
|
|
413
|
+
if ( cachedObject === undefined || cachedObject.style !== style ) {
|
|
414
|
+
|
|
415
|
+
element.style.transform = style;
|
|
416
|
+
|
|
417
|
+
const objectData = { style: style };
|
|
418
|
+
cache.objects.set( object, objectData );
|
|
419
|
+
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
if ( element.parentNode !== cameraElement ) {
|
|
423
|
+
|
|
424
|
+
cameraElement.appendChild( element );
|
|
425
|
+
|
|
426
|
+
}
|
|
427
|
+
|
|
428
|
+
object.onAfterRender( _this, scene, camera );
|
|
429
|
+
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
for ( let i = 0, l = object.children.length; i < l; i ++ ) {
|
|
435
|
+
|
|
436
|
+
renderObject( object.children[ i ], scene, camera, cameraCSSMatrix );
|
|
437
|
+
|
|
438
|
+
}
|
|
439
|
+
|
|
440
|
+
}
|
|
441
|
+
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
}
|
|
445
|
+
|
|
446
|
+
/**
|
|
447
|
+
* Constructor parameters of `CSS3DRenderer`.
|
|
448
|
+
*
|
|
449
|
+
* @typedef {Object} CSS3DRenderer~Parameters
|
|
450
|
+
* @property {HTMLElement} [element] - A DOM element where the renderer appends its child-elements.
|
|
451
|
+
* If not passed in here, a new div element will be created.
|
|
452
|
+
**/
|
|
453
|
+
|
|
454
|
+
export { CSS3DObject, CSS3DSprite, CSS3DRenderer };
|