ΠΡΠ΅ΠΌ ΠΏΡΠΈΠ²Π΅Ρ.
@kumavis ΠΈ Ρ ΡΡΠ΅ΡΠ΄Π½ΠΎ ΡΠ°Π±ΠΎΡΠ°Π»ΠΈ, ΠΏΡΡΠ°ΡΡΡ Π½Π°ΠΉΡΠΈ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± ΠΏΠ΅ΡΠ΅Π½Π΅ΡΡΠΈ THREE.js Π½Π° Π±ΡΠ°ΡΠ·Π΅ΡΠ½ΡΡ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ. ΠΡ Π΄ΠΎΠ±ΠΈΠ»ΠΈΡΡ Ρ ΠΎΡΠΎΡΠ΅Π³ΠΎ ΠΏΡΠΎΠ³ΡΠ΅ΡΡΠ°, Π²ΠΏΠ»ΠΎΡΡ Π΄ΠΎ ΡΠΎΠ³ΠΎ, ΡΡΠΎ Π²ΡΠ΅ ΡΠ°ΠΉΠ»Ρ Π±ΡΠ»ΠΈ ΠΏΠ΅ΡΠ΅Π½Π΅ΡΠ΅Π½Ρ Π² Π±ΡΠ°ΡΠ·Π΅ΡΠ½ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ ΡΠ±ΠΎΡΠΊΠΈ ΠΈ ΠΌΡ ΡΠΌΠΎΠ³Π»ΠΈ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ three.min.js Ρ ΠΏΠΎΠΌΠΎΡΡΡ gulp.
Π ΡΠΎΠΆΠ°Π»Π΅Π½ΠΈΡ, ΠΏΡΠΈΠΌΠ΅ΡΡ Π½Π΅ ΡΠ°Π±ΠΎΡΠ°ΡΡ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π² ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ commonjs browserify Π½Π΅ ΡΠΌΠ΅Π΅Ρ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΡΠΈΠΊΠ»ΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ, ΠΊΠΎΡΠΎΡΡΡ Π² THREE.js ΠΌΠ½ΠΎΠ³ΠΎ.
Π― ΡΠ΄Π΅Π»Π°Π» Π·Π΄Π΅ΡΡ ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΡΠΉ Π³ΡΠ°ΡΠΈΠΊ, ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ°ΡΡΠΈΠΉ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ.
ΠΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° ΠΎΠ½ΠΈ Π½Π΅ Π±ΡΠ΄ΡΡ ΡΠ°ΡΠΏΡΡΠ°Π½Ρ, ΠΌΡ Π½Π΅ ΡΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠ΅ΡΠ΅Π½Π΅ΡΡΠΈ THREE.js Π² Π±ΡΠ°ΡΠ·Π΅ΡΠ½ΡΡ ΡΠ±ΠΎΡΠΊΡ.
Π― Π½Π΅ ΡΡΠΈΡΠ°Ρ ΡΡΠΎ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΊΠΎΠΌ Π±ΡΠ°ΡΠ·Π΅ΡΠ°, Π° ΡΠΊΠΎΡΠ΅Π΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΠΉ THREE.js. Π¦ΠΈΠΊΠ»ΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ β ΡΡΠΎ ΠΏΠ»ΠΎΡ Π°Ρ Π²Π΅ΡΡ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠΌ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΠΈ Π² ΡΠ΅Π»ΠΎΠΌ, ΠΈ ΠΎΠ½ΠΈ ΠΏΡΠΈΠ²ΠΎΠ΄ΡΡ ΠΊ Π²ΡΠ΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠΌ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°ΠΌ.
ΡΡΠΎ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΡΠ·Π΅Π», ΡΡΠΎΠ±Ρ ΡΠ°ΡΠΏΡΡΠ°ΡΡ
http://jsbin.com/medezu/2/edit?html , js, Π²ΡΠ²ΠΎΠ΄
@coballast , ΠΌΠΎΠΆΠ΅ΡΠ΅ Π»ΠΈ Π²Ρ ΠΎΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ json?
ΠΡΠΎΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΡΠ°ΠΉΠ» three.min.js Π½Π°ΠΏΡΡΠΌΡΡ. ΠΠ΅Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΡΠ°Π·Π±ΠΈΠ²Π°ΡΡ Three.js Π½Π° ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ Π² Browserfy, Π²Ρ ΠΏΡΠΎΡΡΠΎ ΡΡΠ»ΠΎΠΆΠ½ΡΠ΅ΡΠ΅ ΡΠ΅Π±Π΅ ΠΆΠΈΠ·Π½Ρ Π±Π΅Π· ΡΠ΅Π°Π»ΡΠ½ΠΎΠΉ ΠΏΠΎΠ»ΡΠ·Ρ.
Π― Π³ΠΎΠ²ΠΎΡΡ ΠΏΠΎ ΡΠ²ΠΎΠ΅ΠΌΡ ΠΎΠΏΡΡΡ, ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΠΌΠΎΠ΄ΡΠ»Ρ npm Π΄Π»Ρ three.js, ΠΈ ΠΎΠ½ ΠΎΡΠ»ΠΈΡΠ½ΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ. ΠΡ ΠΏΡΠΎΡΡΠΎ ΡΠΏΠ°ΠΊΠΎΠ²ΡΠ²Π°Π΅ΠΌ Π΅Π³ΠΎ Π² ΠΎΠ΄ΠΈΠ½ ΡΠ°ΠΉΠ» ΠΈ ΠΎΠ±ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ Π² ΠΌΠΎΠ΄ΡΠ»Ρ Π² ΡΡΠΈΠ»Π΅ CommonJS. ΠΡΠΎΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π΄Π»Ρ Π±ΡΠ°ΡΠ·Π΅ΡΠ°, ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π»ΡΠ΄ΠΈ ΡΠΆΠ΅ Π΄Π΅Π»Π°ΡΡ ΡΡΠΎ, ΠΊΠ°ΠΊ Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ.
ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π²Π°ΡΠΈΠ°Π½ΡΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠ°ΡΠΏΡΡΡΠ²Π°ΡΡ ΡΡΠΎΡ ΡΠ·Π΅Π» Π½Π΅ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ.
@kumavis Π― ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ ΡΠ±ΡΠΎΡΠΈΠ» ΡΡΡΡΠΊΡΡΡΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ. ΠΠ°ΡΠ΅ΠΌ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΊΠΎΠ΄ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π» Π³ΡΠ°ΡΠΈΠΊ:
var fs = require('fs-extra');
var unique = require('uniq');
var util = require('util');
function getRequiredObjects(dependencies){
var result = [];
for(var i = 0; i < dependencies.usedObjects.length; i++){
var object = dependencies.usedObjects[i];
if(dependencies.definedObjects.indexOf(object) == -1)
result.push(object);
}
return result;
};
var dependencies = JSON.parse(fs.readFileSync('./dependencies.json'));
var objects = [];
for(var f in dependencies){
objects = objects.concat(dependencies[f].usedObjects);
objects = objects.concat(dependencies[f].definedObjects);
}
objects = unique(objects);
var nodes = objects.map(function(o){
return {data: {id: o} };
});
var edges = [];
for(var f in dependencies){
var dependency = dependencies[f];
var requiredObjects = getRequiredObjects(dependency);
for(var j = 0; j < dependency.definedObjects.length; j++){
for(var k = 0; k < requiredObjects.length; k++){
edges.push({ data: { source: dependency.definedObjects[j], target: requiredObjects[k] } });
}
}
}
var graph = {nodes: nodes, edges: edges};
var eliminateImpossibleCycleNodes = function(graph){
graph.nodes = graph.nodes.filter(function(node){
var source_edge = null;
var dest_edge = null;
for(var i = 0; i < graph.edges.length; i++){
if(graph.edges[i].data.source == node.data.id)
source_edge = graph.edges[i];
if(graph.edges[i].data.target == node.data.id)
dest_edge = graph.edges[i];
}
if(source_edge != null && dest_edge != null)
return true;
else
return false;
});
graph.edges = graph.edges.filter(function(edge){
var source_exists = false, target_exists = false;
for(var i = 0; i < graph.nodes.length; i++){
if(edge.data.source == graph.nodes[i].data.id)
source_exists = true;
if(edge.data.target == graph.nodes[i].data.id)
target_exists = true;
}
return source_exists && target_exists;
});
};
for(var i = 0; i < 500; i++)
eliminateImpossibleCycleNodes(graph)
console.log(JSON.stringify(graph));
@bhouston Π±ΠΎΠ»ΡΡΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠΉ Π±Π°Π·Ρ three.js
Π― ΠΏΡΠΎΡΡΠΎ Π·Π½Π°Ρ, ΡΡΠΎ Π² ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅, ΠΊΠΎΡΠΎΡΠΎΠΉ Ρ ΠΈΠ·ΡΡΠ΄Π½ΠΎ ΠΏΠΎΠΌΠΎΠ³, ΡΠΈΠΊΠ»ΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΡΠ²Π»ΡΡΡΡΡ Π½ΠΎΡΠΌΠΎΠΉ Π΄Π»Ρ Π²ΡΠ΅Ρ ΡΠ·ΡΠΊΠΎΠ². ΠΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΠΈ Π½Π° Matrix4 ΠΌΠΎΠ³ΡΡ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ Vector3 Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ², Π° Vector3 ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ Matrix4. ΠΡΠ»ΠΈ Π±Ρ Π²ΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ Π² ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ Π±ΡΠ»ΠΈ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠΌΠΈ, ΡΡΠΎ ΡΠ΄Π΅Π»Π°Π»ΠΎ Π±Ρ ΡΡΡ ΡΠ°ΡΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΡΠ°Π·Π΄ΡΠ°ΠΆΠ°ΡΡΠ΅ΠΉ Π² ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ.
Π’Π΅ΠΏΠ΅ΡΡ Ρ Π²ΡΡΡΡΠΏΠ°Ρ Π·Π° ΡΠΎ, ΡΡΠΎΠ±Ρ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠ°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π½Π΅ Π·Π½Π°Π»Π° Π½ΠΈ ΠΎ ΠΊΠ°ΠΊΠΎΠΉ Π΄ΡΡΠ³ΠΎΠΉ ΡΠ°ΡΡΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ β Π±ΠΎΠ»Π΅Π΅ ΡΠ»ΠΎΠΆΠ½ΡΠ΅ ΡΠΈΠΏΡ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΡΠΎΠ½ΠΈΠΊΠ°ΡΡ Π² ΡΡΠΎΡ ΠΌΠΎΠ΄ΡΠ»Ρ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π² ΡΡΠΎΠΌ ΡΠΌΡΡΠ»Π΅ Ρ Π²ΡΡΡΡΠΏΠ°Ρ Π·Π° ΡΠΌΠ΅Π½ΡΡΠ΅Π½ΠΈΠ΅ ΠΌΠ΅ΠΆΠΌΠΎΠ΄ΡΠ»ΡΠ½ΡΡ ΡΠΈΠΊΠ»ΠΈΡΠ΅ΡΠΊΠΈΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ, Π½ΠΎ Π½Π΅ Π·Π° ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ Π²ΡΠ΅Ρ ΡΠΈΠΊΠ»ΠΈΡΠ΅ΡΠΊΠΈΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ ΠΌΠ΅ΠΆΠ΄Ρ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΌΠΈ ΡΠ°ΠΉΠ»Π°ΠΌΠΈ Π²Π½ΡΡΡΠΈ ΠΌΠΎΠ΄ΡΠ»Ρ.
ΠΠΎΡ ΡΠ»ΡΡΠ°ΠΉ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΠ»Π»ΡΡΡΡΠΈΡΡΠ΅Ρ ΡΠΎΠ½ΠΊΠΈΠ΅ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΠΈ. Π§ΡΠΎΠ±Ρ Π±ΡΠ»ΠΎ ΠΏΠΎΠ½ΡΡΠ½ΠΎ, Π·Π΄Π΅ΡΡ Ρ ΠΊΡΠΈΡΠΈΡΠ΅Π½ Π½Π΅ ΠΊ ΡΠ°ΠΌΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ, Π° ΠΊ ΠΏΠΎΠ±ΠΎΡΠ½ΡΠΌ ΡΡΡΠ΅ΠΊΡΠ°ΠΌ.
Vector3
ΠΈ Matrix4
ΠΎΠ±ΡΠ°Π·ΡΡΡ ΡΠΈΠΊΠ»ΠΈΡΠ΅ΡΠΊΡΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ½ΠΈ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡ ΡΡΠ΄ ΡΡΠ½ΠΊΡΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ Π΄ΡΡΠ³ Π΄ΡΡΠ³Π° Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π²Ρ
ΠΎΠ΄Π½ΡΡ
ΠΈΠ»ΠΈ Π²ΡΡ
ΠΎΠ΄Π½ΡΡ
ΡΠΈΠΏΠΎΠ². ΠΠ±Π° ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ Π² ΡΡΠΈΠ»Π΅, ΠΎΠ±ΡΠ΅ΠΌ Π΄Π»Ρ Three.js, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠ΅ΡΠ΅Π· IIFE Π΄Π»Ρ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΉ.
Matrix4#lookAt
ΠΌΠΎΠΆΠ΅Ρ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ Π½ΡΠ»Ρ, ΠΊΠ°ΠΊ ΡΠ°ΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ.
lookAt: function () {
var x = new THREE.Vector3();
var y = new THREE.Vector3();
var z = new THREE.Vector3();
return function ( eye, target, up ) {
/* ... */
ΠΠ΄Π½Π°ΠΊΠΎ Vector3#project
Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ Π½ΡΠ»Ρ ΠΏΡΠΈ ΠΏΠ΅ΡΠ²ΠΎΠΌ Π·Π°ΠΏΡΡΠΊΠ΅.
project: function () {
var matrix;
return function ( camera ) {
if ( matrix === undefined ) matrix = new THREE.Matrix4();
/* ... */
ΠΠΎΡΠ΅ΠΌΡ? ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΏΡΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΠΊΠ»Π°ΡΡΠ° Π΅ΡΠ΅ Π½Π΅ Π²ΡΠ΅ ΠΊΠ»Π°ΡΡΡ Π±ΡΠ»ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Ρ. ΠΡΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ Vector3
Matrix4
Π΅ΡΠ΅ Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ. Π’Π΅ΠΏΠ΅ΡΡ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π²ΡΠ΅ΠΌΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
Π½Π΅ ΠΎΡΠ΅Π½Ρ Π²Π°ΠΆΠ½ΠΎ. Π Π΅Π°Π»ΡΠ½ΡΠΉ Π²ΡΠ²ΠΎΠ΄ Π·Π΄Π΅ΡΡ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΡΠ΅ΠΊΡΡΠ°Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΠΏΠΎΡΡΠ΄ΠΊΠ°, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΡΠΈΡΡΠ΅ΠΌΠ° ΡΠ±ΠΎΡΠΊΠΈ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ ΡΠ°ΠΉΠ»Ρ. ΠΡΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π΄Π°Π»Π΅ΠΊΠ°Ρ ΡΠ²ΡΠ·Ρ, ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² ΡΠΈΡΡΠ΅ΠΌΠ΅ ΡΠ±ΠΎΡΠΊΠΈ ΠΈΠ»ΠΈ ΠΏΠ΅ΡΠ΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ² ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΠΏΠΎΡΡΠ΄ΠΎΠΊ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ, ΠΌΠΎΠ³ΡΡ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ Π½Π΅Π΄ΠΎΠΏΡΡΡΠΈΠΌΡΠΌ ΡΠ±ΠΎΡΠΊΠ°ΠΌ Π±Π΅Π· ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΠΎΠΉ ΡΠ²ΡΠ·ΠΈ.
ΠΡΠΎ Π»ΠΈΡΡ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΠΏΠΎΡΠΎΠ±ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠΌ ΡΡΠΎΡ ΡΠ·Π΅Π» ΠΏΡΠ΅Π²ΡΠ°ΡΠ°Π΅ΡΡΡ Π² ΠΆΡΠΊΠΎΠ². Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Ρ ΠΎΡΡ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ΅ΡΠΈΡΡ ΡΡΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, Ρ ΠΌΠ΅Π½Ρ Π½Π΅Ρ ΠΎΠ±ΡΠ΅Π³ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π½Π΅ ΡΡΠ΅Π±ΠΎΠ²Π°Π»ΠΎ Π±Ρ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² API.
Π₯ΠΌ... Π― Π²Π·Π³Π»ΡΠ½ΡΠ» Π½Π° ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ ILM C++, ΠΊΠΎΡΠΎΡΡΡ ΡΡΠΈΡΠ°Ρ Π·ΠΎΠ»ΠΎΡΡΠΌ ΡΡΠ°Π½Π΄Π°ΡΡΠΎΠΌ ΡΡΠ΅Π΄ΠΈ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ. Π£Π΄ΠΈΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ, Π½ΠΎ ΠΎΠ½ΠΈ Π½Π΅ ΡΠΈΠΊΠ»ΠΈΡΠ½Ρ. Π£ Π½ΠΈΡ Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ Π΅ΡΡΡ ΡΠ΅ΡΠΊΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΉ ΠΏΠΎΡΡΠ΄ΠΎΠΊ ΠΏΡΠΎΡΡΡΡ ΠΈ ΡΠ»ΠΎΠΆΠ½ΡΡ ΡΠΈΠΏΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ½ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ, ΠΈ Ρ Π΄ΡΠΌΠ°Ρ, Π΅ΡΠ»ΠΈ Π²Ρ ΡΠ΄Π΅Π»Π°Π΅ΡΠ΅ ΡΡΠΎ ΠΎΡΠ΅Π½Ρ Π²Π½ΠΈΠΌΠ°ΡΠ΅Π»ΡΠ½ΠΎ, ΡΡΠΎ ΡΡΠ°Π±ΠΎΡΠ°Π΅Ρ:
https://github.com/openexr/openexr/tree/master/IlmBase/Imath
Math, Π° Π·Π°ΡΠ΅ΠΌ Vec ΠΊΠ°ΠΆΠ΅ΡΡΡ ΡΠ°ΠΌΡΠΌ ΠΏΡΠΎΡΡΡΠΌ.
ΠΠ°Π»ΡΠ½Π΅ΠΉΡΠΈΠ΅ Π½Π°Π±Π»ΡΠ΄Π΅Π½ΠΈΡ ΠΏΠΎ Π³ΡΠ°ΡΠΈΠΊΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ:
Material
ΠΈΠΌΠ΅ΡΡ Π΄Π²ΡΡΡΠΎΡΠΎΠ½Π½ΠΈΠ΅ ΡΠ²ΡΠ·ΠΈ ΡΠΎ ΡΠ²ΠΎΠΈΠΌ Π±Π°Π·ΠΎΠ²ΡΠΌ ΠΊΠ»Π°ΡΡΠΎΠΌ.
ΠΠ΅ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ»ΠΎΠΆΠ½ΠΎ ΡΠ²ΠΈΠ΄Π΅ΡΡ, Π½ΠΎ Geometry
s, ΠΏΠΎΡ
ΠΎΠΆΠ΅, ΠΈΠΌΠ΅ΡΡ Ρ
ΠΎΡΠΎΡΠΈΠ΅ ΠΎΠ΄Π½ΠΎΡΡΠΎΡΠΎΠ½Π½ΠΈΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°.
Π‘ Light
ΠΈ Camera
ΡΠΈΡΡΠ°ΡΠΈΡ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½Π° β ΡΡΠΎ Ρ
ΠΎΡΠΎΡΠΎ ΠΏΠΎ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡ ΠΊ ΠΈΡ
Π±Π°Π·ΠΎΠ²ΠΎΠΌΡ ΠΊΠ»Π°ΡΡΡ, Π½ΠΎ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ Object3D
_ΠΎΡ Π½ΠΈΡ
_ ΠΊΠ°ΠΆΠ΅ΡΡΡ Π½Π΅Π½ΡΠΆΠ½ΠΎΠΉ.
Curve
s Path
s Line
s ΠΊΠ°ΠΆΠ΅ΡΡΡ Ρ
ΠΎΡΠΎΡΠΈΠΌ, Π½ΠΎ Shape
Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π·Π°ΠΏΡΡΠ°Π½.
@coballast ΡΠΏΠ°ΡΠΈΠ±ΠΎ! ΡΡΠΎ Π²Π΅Π»ΠΈΠΊΠΎΠ΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅.
ΠΠΎΠ±Π°Π²Π»ΡΡ ΡΠ΅Π±Ρ Π΄Π»Ρ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠ΅Π² :)
ΠΡΡΠ°ΡΠΈ, Ρ ΠΏΠΎΡΠΌΠΎΡΡΠ΅Π», Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠ°ΠΊ Material Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ MeshDepthMaterial. ΠΡΠΎ ΠΏΡΠΎΡΡΠΎ
if ( this instanceof THREE.MeshDepthMaterial )
ΠΊΠΎΡΠΎΡΡΠΉ ΡΡΠΈΠ²ΠΈΠ°Π»ΡΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ Π½Π°
if ( this.type == 'MeshDepthMaterial' )
ΠΈ Π²ΡΠ°Π»Ρ - Π½Π΅Ρ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ. Π― ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Ρ, ΡΡΠΎ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π° ΡΡΠΎΠ³ΠΎ ΡΡΡΠ°ΡΠ½ΠΎΠ³ΠΎ Π³ΡΠ°ΡΠΈΠΊΠ° ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΡΠΎΡ ΠΆΠ΅ ΡΡΠΎΠ²Π΅Π½Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ.
Π·Π°Π±Π°Π²Π½ΠΎ ΡΠΎ, ΡΡΠΎ ΡΡΠ° Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ ΠΈΠΌΠ΅Π΅Ρ ΠΌΠ΅ΡΡΠΎ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΌΠ΅ΡΠΎΠ΄Π΅ toJSON. Π― ΠΈΠΌΠ΅Ρ Π² Π²ΠΈΠ΄Ρ, Π½Π΅Π»ΡΠ·Ρ Π»ΠΈ Π²ΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ ΠΏΡΠΎΡΡΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ Π΅Π³ΠΎ Π² MeshDepthMaterial? ΡΡΠΎ-ΡΠΎ ΡΠΈΠΏΠ°
THREE.MeshDepthMaterial.prototype.toJSON = function () {
var output = THREE.Material.prototype.toJSON.apply(this);
if ( this.blending !== THREE.NormalBlending ) output.blending = this.blending;
if ( this.side !== THREE.FrontSide ) output.side = this.side;
@makc Π ΠΎΠ±ΡΠ΅ΠΌ, Π²Π΅Π·Π΄Π΅, Π³Π΄Π΅ ΠΌΡ Π΄Π΅Π»Π°Π΅ΠΌ instanceof
, ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΡΡ ΡΡΠΎΡ ΠΊΠΎΠ΄ Π² ΡΠ°ΠΌ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΉ ΠΊΠ»Π°ΡΡ. ΠΡΠΎ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ ΡΠ΄Π°Π»ΠΈΡΡ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ·Π»ΠΎΠ².
ΠΏΡΠΎΡΡΠΎ Ρ ΠΎΡΠ΅Π» ΡΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ Ρ ΠΎΡΡ AMD Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΠΈΠΊΠ»ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΡΡΠ»ΠΊΠΈ, ΠΌΠΎΠ΄ΡΠ»ΠΈ ES6 ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ https://github.com/ModuleLoader/es6-module-loader/wiki/Circular-References-&-Bindings
ΠΌΠ½Π΅ ΠΏΡΠΎΡΡΠΎ Π»ΡΠ±ΠΎΠΏΡΡΠ½ΠΎ ΡΠ·Π½Π°ΡΡ, ΠΏΠΎΠΌΠΈΠΌΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ (ΠΊΠΎΡΠΎΡΠ°Ρ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ΅ΡΠ΅Π½Π° ΠΏΡΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΠΎΠ³ΠΎ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠ³ΠΎ Π·Π°Π³ΡΡΠ·ΡΠΈΠΊΠ°, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, system.js ), ΠΊΠ°ΠΊΠΈΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΡΠΎΠ·Π΄Π°Π΅Ρ ΡΠΈΠΊΠ»ΠΈΡΠ΅ΡΠΊΠ°Ρ ΡΡΡΠ»ΠΊΠ° Π² three.js?
Π ΡΡΠ°ΡΡΡΡ, ΠΏΠΎΡ ΠΎΠΆΠ΅, ΡΡΠΎ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π°ΡΠ°ΠΊΠΎΠ²Π°ΡΡ ΡΡΠΎ ΠΏΠΎΡΡΠ°ΠΏΠ½ΠΎ. Π― Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ Π² ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΡ Π²ΡΠΏΡΡΠΊΠ°Ρ Π±ΡΠ»ΠΎ Π²Π½Π΅ΡΠ΅Π½ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ API, ΠΏΠΎΡΡΠΎΠΌΡ Ρ Π½Π΅ ΡΠ²Π΅ΡΠ΅Π½, ΡΡΠΎ ΡΡΠΎ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΎ.
Π ΡΠ»ΡΡΠ°ΡΡ
instanceof
(Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π² Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π΅) ΠΎΠ½ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½Ρ Π±Π΅Π· ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΡ
ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ.
Π― ΡΠΎΠΆΠ΅ ΠΏΠΎΠ΄ΠΏΠΈΡΡΠ²Π°ΡΡΡ Π·Π΄Π΅ΡΡ. ΠΠ°Π²Π°ΠΉΡΠ΅ ΡΠ°Π³ Π·Π° ΡΠ°Π³ΠΎΠΌ Π·Π΄Π΅ΡΡ.
Π― ΡΠΎΠ³Π»Π°ΡΠ΅Π½, ΡΡΠΎ ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠ΄Π°Π»ΠΈΡΡ Π²ΡΠ΅ Π½Π΅Π½ΡΠΆΠ½ΡΠ΅ ΡΠΈΠΊΠ»ΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»ΡΠ½Π°Ρ.
Π― ΡΠ°ΠΊΠΆΠ΅ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ Ρ @bhouston Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠ°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΎΡΠ΅Π½Ρ Π·Π°Π²ΠΈΡΠΈΡ Π΄ΡΡΠ³ ΠΎΡ Π΄ΡΡΠ³Π°, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Π΄Π΅Π»Π°Π΅Ρ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ.
ΠΠΎΠΆΠ΅Ρ ΠΊΡΠΎ-Π½ΠΈΠ±ΡΠ΄Ρ Π½Π°ΠΌΠ΅ΡΠΈΡΡ Π»Π΅Π³ΠΊΠΈΠ΅?? ΠΡΠ΅Π³Π΄Π° ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΠΈΠΌΠ΅ΡΡ ΠΌΠ΅Π½ΡΡΠ΅ ΡΠΈΠΊΠ»ΠΈΡΠ΅ΡΠΊΠΈΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ, Π΅ΡΠ»ΠΈ ΡΡΠΎ Π½Π΅ ΠΌΠ΅ΡΠ°Π΅Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅. ΠΠΎΠ·ΠΆΠ΅ ΠΌΡ ΡΠΌΠΎΠΆΠ΅ΠΌ ΡΠ²ΠΈΠ΄Π΅ΡΡ, ΡΡΠΎ Π΄Π΅Π»Π°ΡΡ Ρ ΠΎΡΡΠ°Π»ΡΠ½ΡΠΌΠΈ.
@ zz85 Π― ΡΠ°ΠΊΠΆΠ΅ ΡΡΠΎΠ»ΠΊΠ½ΡΠ»ΡΡ Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΠΉ ΡΠΈΠΊΠ»ΠΈΡΠ΅ΡΠΊΠΈΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ. Π ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ ΡΡΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°, ΠΊΠΎΠ³Π΄Π° ΠΌΡ ΠΏΡΡΠ°Π΅ΠΌΡΡ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ Π²Π½ΡΡΡΠΈ ΡΠ°ΠΉΠ»ΠΎΠ² Ρ ΡΠΈΠΊΠ»ΠΈΡΠ΅ΡΠΊΠΈΠΌΠΈ ΡΡΡΠ»ΠΊΠ°ΠΌΠΈ.
Material
ΠΈ Object3D
.ΠΠΎΡ ΠΊΠ°ΠΊ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ Mesh
. ΠΠΎΠΆΠ΅Ρ Π±ΡΡΡ, ΠΊΠ°ΠΊΠΈΠ΅-ΡΠΎ ΠΏΠΎΡΡΠΎΡΠΎΠ½Π½ΠΈΠ΅ Π΄Π΅ΠΏΡΡ, Π½ΠΎ Π½Π΅ ΡΠ»ΠΈΡΠΊΠΎΠΌ ΡΡΠΌΠ°ΡΡΠ΅Π΄ΡΠΈΠ΅.
Π¦ΠΈΡΠΊΡΠ»ΡΡ Ρ Object3D
ΠΈ Geometry
. Π‘ΡΡΠ»ΠΊΠ° Object3D -> Mesh
ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΡΡΡ Π² PR Π²ΡΡΠ΅. Π‘ΡΡΠ»ΠΊΠ° Mesh -> Geometry
Π² ΠΏΠΎΡΡΠ΄ΠΊΠ΅, b/c Mesh
ΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΎΠΌ Geometry
. ΠΠ³ΠΎ Π²ΡΠ΅ Π΅ΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°Π·ΠΎΡΠ²Π°ΡΡ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΎΠ½ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ ΡΠΈΠΏΠΎΠ² Π΄Π»Ρ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ, ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΠΎΠ³ΠΎ Π΄Π»Ρ ΠΊΠ»Π°ΡΡΠ° ( Geometry
/ BufferGeometry
).
Π§ΡΠΎ ΠΊΠ°ΡΠ°Π΅ΡΡΡ ΡΡΡΠ»ΠΊΠΈ Geometry -> Mesh
, ΡΠΎ ΠΎΠ½Π° Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΡΡ geometry.mergeMesh( mesh )
. Geometry
β ΡΡΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΡ Π±ΠΎΠ»Π΅Π΅ Π½ΠΈΠ·ΠΊΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ, ΡΠ΅ΠΌ Mesh
, ΠΏΠΎΡΡΠΎΠΌΡ Ρ Π±Ρ ΠΈΠ½Π²Π΅ΡΡΠΈΡΠΎΠ²Π°Π» Π΅Π΅ ΠΊΠ°ΠΊ mesh.mergeIntoGeometry( geo )
ΠΈ ΠΎΡΠΊΠ°Π·Π°Π»ΡΡ mergeMesh
.
ΠΡΠ»ΠΈ ΠΊΡΠΎ-ΡΠΎ ΠΏΠΎΠ»ΡΡΠΈΡ pr ΡΠ»ΠΈΡΠ½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΈΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ· Π½ΠΈΡ , Π΄Π°ΠΉΡΠ΅ ΠΌΠ½Π΅ Π·Π½Π°ΡΡ, ΠΈ Ρ ΠΎΠ±Π½ΠΎΠ²Π»Ρ Π³ΡΠ°ΡΠΈΠΊ, ΡΡΠΎΠ±Ρ ΠΎΡΡΠ°Π·ΠΈΡΡ ΡΠ΅ΠΊΡΡΠ΅Π΅ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄Π΅Π».
@bhouston @gero3 Π― Π½Π΅ ΡΠ²Π΅ΡΠ΅Π½, ΡΡΠΎ ΡΠΈΠΊΠ»ΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠ°ΠΊΠΎΠΉ ΠΆΠ΅ ΡΡΠΎΠ²Π΅Π½Ρ ΡΠ΄ΠΎΠ±ΡΡΠ²Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ/ΠΏΠΎΠ»Π΅Π·Π½ΠΎΡΡΠΈ Π΄Π»Ρ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ. Π― ΠΌΠΎΠ³Ρ ΠΎΡΠΈΠ±Π°ΡΡΡΡ, Π½ΠΎ Π½Π΅Π»ΡΠ·Ρ Π»ΠΈ ΠΎΡΡΠ°Π²ΠΈΡΡ Vector3 ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΈΠ·ΠΎΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ/Π½Π΅ΠΎΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½Π½ΡΠΌ ΠΎΠ± ΠΎΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅ ΠΈ ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ ΠΏΡΠΎΡΠΎΡΠΈΠΏ, ΡΡΠΎΠ±Ρ ΡΠ°Π·ΠΌΠ΅ΡΡΠΈΡΡ Matrix4 Π² ΠΌΠΎΠ΄ΡΠ»Π΅ Matrix4? ΠΡΠΎ ΠΈΠΌΠ΅Π΅Ρ ΡΠΌΡΡΠ» Π΄Π»Ρ ΠΌΠ΅Π½Ρ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΡΠ°Π»ΡΠ½ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΠ°ΡΡΠΈΡΡ Π±ΠΎΠ»Π΅Π΅ ΡΠ»ΠΎΠΆΠ½Ρ, ΡΠ΅ΠΌ ΠΠ΅ΠΊΡΠΎΡΡ. Π― Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ Π»ΡΡΡΠ΅ ΠΈΠΌΠ΅ΡΡ ΡΠ΅ΡΠΊΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΉ ΠΏΠΎΡΡΠ΄ΠΎΠΊ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΡΠΎΠ·Π΄Π°ΡΡΡΡ ΠΏΡΠΎΡΠΎΡΠΈΠΏΡ ΠΈ ΠΊΠ»Π°ΡΡΡ, ΡΡΠΎΠ±Ρ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠΈΡΡ Π½Π΅ΡΠ΄Π°ΡΠΈ.
@bhouston @gero3 ΠΡΠΌΠ°Ρ, ΠΌΡ ΡΠΌΠΎΠΆΠ΅ΠΌ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ Π²ΠΎΠΎΠ±ΡΠ΅ Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ API. Π― ΠΏΠΎΠΊΠΎΠ²ΡΡΡΡΡΡ ΠΈ ΠΏΠΎΡΠΌΠΎΡΡΡ, ΡΡΠΎ ΠΊ ΡΠ΅ΠΌΡ.
ΡΡΠΎ ΠΊΠ°ΡΠ°Π΅ΡΡΡ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΠΊΠΈ, Ρ Π΄ΡΠΌΠ°Ρ, Π²Ρ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ ΠΏΡΠΎΡΡΠΎ ΡΠΎΠ±ΡΠ°ΡΡ Π²ΡΠ΅ Β«Π±Π»ΠΎΠΊΠ½ΠΎΡΡΒ» Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΌΠ΅ΡΡΠ΅. Π½ΠΎ Ρ ΡΠ²Π΅ΡΠ΅Π½, ΡΡΠΎ Π½Π΅ Π±ΡΠ΄Π΅Ρ Π½ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡΠΈΠ³ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π³ΡΠ°ΡΠ° 3js, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π½Π΅ Π±ΡΠ»ΠΎ Π±Ρ ΠΈ Vector3, ΠΈ Matrix4.
ΠΡΠ»ΠΈ Π΅ΡΡΡ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π½Π΅ ΠΌΠ΅Π½ΡΠ΅Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΈΠ»ΠΈ API ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, Ρ ΡΠΎΠ»ΡΠΊΠΎ Π·Π°.
@coballast Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΡΠ΄Π°Π»ΠΈΡΡ ΡΠΈΠΊΠ»ΠΈΡΠ΅ΡΠΊΡΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ API, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΎΠ±Π° ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄Ρ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΠ΅ Π΄ΡΡΠ³ΠΎΠΉ ΡΠΈΠΏ. Vector3
Matrix4
Π§ΡΠΎ ΠΊΠ°ΡΠ°Π΅ΡΡΡ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΠΈ Π±ΡΠ°ΡΠ·Π΅ΡΠ°, Π½Π°ΡΠ΅ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ β ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΡΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΎΠ² ΡΠ°Π±ΠΎΡΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π²Π½Π΅ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΊΠ»Π°ΡΡΠ° (Π·Π°ΡΡΠ°Π²ΠΈΡΡ ΠΈΡ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΡ ΠΏΡΠΈ ΠΏΠ΅ΡΠ²ΠΎΠΌ Π·Π°ΠΏΡΡΠΊΠ΅). Π‘Π΄Π΅Π»Π°ΠΉΡΠ΅ ΡΡΠΎ Π»Π΅Π½ΠΈΠ²ΡΠΌ , ΠΊΠ°ΠΊ ΡΡΠΎ . ΠΡΠΎ Π½Π΅ ΠΏΠΎΠ²Π»ΠΈΡΠ΅Ρ Π½Π° API ΠΈΠ»ΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ.
Π― Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ ΡΠ°ΠΊΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² ΠΏΠΎΡΡΠ΄ΠΊΠ΅ Π²Π΅ΡΠ΅ΠΉ.
@kumavis ΠΡ ! Π΄Π°. Π₯ΠΎΡΠΎΡΠΎ, ΡΠ΅ΠΏΠ΅ΡΡ Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ. ΠΡΠΎ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ.
Π― ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Ρ ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ THREE Π½Π° Π±ΠΎΠ»Π΅Π΅ ΠΌΠ΅Π»ΠΊΠΈΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ Ρ ΡΡΠ΅Π±ΡΠ΅ΠΌΠΎΠΉ ΡΡΡΡΠΊΡΡΡΠΎΠΉ ΠΏΠΎ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΏΡΠΈΡΠΈΠ½Π°ΠΌ:
var Alert = require('react-bootstrap/lib/Alert');
, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΡΡΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠΉ Π·Π°Π³ΡΡΠ·ΠΊΠΈ.OrbitControls.js
, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΡΠ°ΠΌ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ THREE, ΠΏΠΎΠΌΠ΅ΡΠ°Ρ ΡΠ΅Π±Ρ Π² THREE.OrbitControls
. ΠΡΠΎ Π°Π½ΡΠΈ-ΡΠ°Π±Π»ΠΎΠ½ Π² ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠ°Ρ
javascript, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΎΠ½ ΡΡΠ΅Π±ΡΠ΅Ρ ΠΏΡΠΈΡΡΡΡΡΠ²ΠΈΡ THREE Π² Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΈΠΌΠ΅Π½ Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΡΠ±ΠΎΡΠΊΠΈ, Π° Π½Π΅ Π΄Π»Ρ ΡΠ°ΠΉΠ»ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π² Π½Π΅ΠΌ Π½ΡΠΆΠ΄Π°ΡΡΡΡ. THREE ΡΠ°ΠΊΠΆΠ΅ Π΄Π΅Π»Π°Π΅Ρ ΡΡΠΎ Π²Π½ΡΡΡΠΈ, Π²ΡΠ΅Π³Π΄Π° ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΡΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½ THREE, ΡΡΠΎ Π½Π΅ ΠΈΠ΄Π΅Π°Π»ΡΠ½ΠΎ Π΄Π»Ρ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ
ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ THREE.ΠΏΠΎΡΡΠ°Π²ΠΈΠ² ΡΠ΅Π±Ρ Π½Π° THREE.OrbitControls
Π½ΠΎ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΡΠ°Π³ΠΌΠ΅Π½Ρ ΠΊΠΎΠ΄Π° Π² 3js Π΄Π΅Π»Π°Π΅Ρ ΡΡΠΎ?
@DelvarWorld Π½Π°ΠΏΠΈΡΠ°Π»:
Π― ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Ρ ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ THREE Π½Π° Π±ΠΎΠ»Π΅Π΅ ΠΌΠ΅Π»ΠΊΠΈΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ Ρ ΡΡΠ΅Π±ΡΠ΅ΠΌΠΎΠΉ ΡΡΡΡΠΊΡΡΡΠΎΠΉ ΠΏΠΎ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΏΡΠΈΡΠΈΠ½Π°ΠΌ:
Π Π°Π½ΡΡΠ΅ Ρ Π΄ΡΠΌΠ°Π», ΡΡΠΎ ΡΡΠΎ Ρ ΠΎΡΠΎΡΠ°Ρ ΠΈΠ΄Π΅Ρ, ΡΡΠΎΠ±Ρ ΡΠ°Π·Π±ΠΈΡΡ Π΅Π³ΠΎ, Π½ΠΎ ΡΠ΅ΠΉΡΠ°Ρ Π² ThreeJS Π΅ΡΡΡ ΠΏΡΠΎΡΡΠΎΡΠ°. ΠΠ½ Π±ΠΎΠ»Π΅Π΅ ΡΠ΄ΠΎΠ±Π΅Π½ Π΄Π»Ρ Π½ΠΎΠ²ΠΈΡΠΊΠΎΠ² Π² 3D Π² ΡΠΎΠΌ Π²ΠΈΠ΄Π΅, Π² ΠΊΠ°ΠΊΠΎΠΌ ΠΎΠ½ Π΅ΡΡΡ ΡΠ΅ΠΉΡΠ°Ρ, ΠΈ ΡΡΠΎ Π±ΡΠ»ΠΎ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠΎΠΌ Π΄Π»Ρ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ². ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ThreeJS, Π½Π΅ Π½ΡΠΆΠ΄Π°ΡΡΡ Π² ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅ (ΠΊΠΎΡΠΎΡΡΡ ΠΌΠ½ΠΎΠ³ΠΎ, ΠΈ Π½Π΅ Π²ΡΠ΅ ΠΎΠ½ΠΈ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΡ).
ΠΠ°ΠΊ ΠΈ @makc , Ρ ΡΠ°ΠΊΠΆΠ΅ ΠΎΠ·Π°Π΄Π°ΡΠ΅Π½ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ @DelvarWorld Π½Π΅ ΠΏΠΎΠΌΠ΅ΡΠ°ΡΡ Π²Π΅ΡΠΈ Π² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½ THREE.
ΠΠ΄Π΅ / ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Π±ΡΠ΄ΡΡ Π²ΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ?
ΠΠ½Π΅ ΠΊΠ°ΠΆΠ΅ΡΡΡ Ρ ΠΎΡΠΎΡΠΈΠΌ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠΌ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ, Π’Π Π, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ Π²ΡΠ΅ Π΅Π³ΠΎ ΡΠ°ΡΡΠΈ (ΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ/ΠΏΠ»Π°Π³ΠΈΠ½Ρ).
Π― ΡΠΎΠ³Π»Π°ΡΠ΅Π½ Ρ @DelvarWorld Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΌΠ΅ΡΠΎΠ΄ ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΡ Π½Π° Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠΌ ΡΡΠΎΠ²Π½Π΅ Π²ΡΠ΅Π΄Π΅Π½ Π΄Π»Ρ Π·Π΄ΠΎΡΠΎΠ²ΡΡ ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠΉ Π±Π°Π·Ρ - ΡΡΠΎ ΡΠ²ΠΎΠ΅Π³ΠΎ ΡΠΎΠ΄Π° ΡΠΎΠ½ΠΊΠΈΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ Π΅Π³ΠΎ Π½Π° Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠΌ ΡΡΠΎΠ²Π½Π΅ ΡΠ°ΠΌΠΎ ΠΏΠΎ ΡΠ΅Π±Π΅ Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΠΉ, ΡΡΠΎ ΡΠΊΡΡΡΡΠΉ Π³ΡΠ°Ρ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΠΏΡΠΈΠ΅ΠΌΡ, Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡΠΈΠ΅ ΠΈΠ·-Π·Π° Π΄ΠΎΡΡΡΠΏΠ½ΠΎΡΡΠΈ ΡΠ°ΠΉΠ»Π° global.
ΠΠΎ ΡΡΠΎΡ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°Π΅ΡΡΡ Π²Π½ΡΡΡΠ΅Π½Π½Π΅ΠΉ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΎΠΉ ΠΈ ΡΡΡΡΠΊΡΡΡΠΎΠΉ ΠΊΠΎΠ΄Π°. Π§ΡΠΎ ΠΊΠ°ΡΠ°Π΅ΡΡΡ Π΄ΠΎΡΡΠ°Π²ΠΊΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π² Π²ΠΈΠ΄Π΅ ΠΏΠ°ΠΊΠ΅ΡΠ° ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, ΡΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ Π²ΡΠ΅Ρ ΠΊΠ»Π°ΡΡΠΎΠ² Π² Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠΌ THREE ΠΈΠΌΠ΅Π΅Ρ Π΄Π»Ρ ΠΌΠ΅Π½Ρ ΡΠΌΡΡΠ».
ΠΡΡΡΠ΅ΡΠ½ΡΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΏΡΠΈ Π΄Π΅ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ json-ΡΡΠ΅Π½Ρ THREE.js Π·Π°ΠΏΠΈΡΠΈ ΠΌΠΎΠ³ΡΡ ΠΏΡΠΎΡΡΠΎ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»ΡΡΡ ΡΠ²ΠΎΠΉ ΠΊΠ»Π°ΡΡ Π² Π²ΠΈΠ΄Π΅ ΡΡΡΠΎΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·Π²Π»Π΅ΡΡ ΠΈΠ· Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠ³ΠΎ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ: THREE[ obj.type ]
. ΠΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Ρ ΠΊΠ»Π°ΡΡΠ°ΠΌΠΈ, ΠΊΠΎΡΠΎΡΡΡ
Π½Π΅Ρ Π² ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ three.js, Π΅ΡΠ»ΠΈ Π²Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΠ΅ ΠΈΡ
Π² THREE
ΠΏΠ΅ΡΠ΅Π΄ Π΄Π΅ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ. ΠΠ΅ ΡΠ²Π΅ΡΠ΅Π½, ΠΊΠ°ΠΊ Π»ΡΡΡΠ΅ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ ΡΡΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π±Π΅Π· Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠ³ΠΎ THREE
.
ΠΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Ρ ΠΊΠ»Π°ΡΡΠ°ΠΌΠΈ, ΠΊΠΎΡΠΎΡΡΡ Π½Π΅Ρ Π² ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ three.js, Π΅ΡΠ»ΠΈ Π²Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΠ΅ ΠΈΡ Π² THREE ΠΏΠ΅ΡΠ΅Π΄ Π΄Π΅ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ. ΠΠ΅ ΡΠ²Π΅ΡΠ΅Π½, ΠΊΠ°ΠΊ Π»ΡΡΡΠ΅ Π²ΡΠ΅Π³ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ ΡΡΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π±Π΅Π· Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠ³ΠΎ THREE.
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎΡ ΡΠ°Π±Π»ΠΎΠ½ (ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ Π΅Π³ΠΎ Π²Π°ΡΠΈΠ°Π½Ρ), Π΅ΡΠ»ΠΈ Π²ΡΠ΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΌ:
var objectType = require( "THREE." + obj.type );
Π ES6 Π΅ΡΡΡ ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, ΠΊΠ°ΡΠ°ΡΡΠΈΡ ΡΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ. Π ΡΡΠΎΡ ΠΌΠΎΠΌΠ΅Π½Ρ Ρ Π±Ρ ΠΏΠ΅ΡΠ΅ΡΠΌΠΎΡΡΠ΅Π» ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΠΎΡΡΡ ThreeJS.
ΠΡΡΡΠΎΠ΅Π½Π½Π°Ρ Π²Π΅ΡΡΠΈΡ three (ΡΠ°ΠΉΠ» javascript, ΠΊΠΎΡΠΎΡΡΠΉ Π»ΡΠ΄ΠΈ ΠΌΠΎΠ³ΡΡ Π·Π°Π³ΡΡΠ·ΠΈΡΡ Π²ΡΡΡΠ½ΡΡ) ΠΏΠΎ-ΠΏΡΠ΅ΠΆΠ½Π΅ΠΌΡ Π±ΡΠ΄Π΅Ρ ΠΈΠΌΠ΅ΡΡ Π²ΡΠ΅ Π² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΈΠΌΠ΅Π½ three. Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ Ρ ΡΠ°ΠΉΠ»ΠΎΠΌ ΡΠΎΡΠΊΠΈ Π²Ρ ΠΎΠ΄Π° Π΄Π»Ρ ΡΠ±ΠΎΡΠΊΠΈ:
var THREE = {
Geometry: require("./geometry"),
ΠΈ Ρ. Π΄., ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎ-ΠΏΡΠ΅ΠΆΠ½Π΅ΠΌΡ Π±ΡΠ΄ΡΡ ΠΏΠΎΠ»Π΅Π·Π½Ρ Π½ΠΎΠ²ΠΈΡΠΊΠ°ΠΌ ΠΈ Ρ ΠΊΠΎΡΠΎΡΡΠΌΠΈ Π±ΡΠ΄Π΅Ρ Π»Π΅Π³ΠΊΠΎ Π½Π°ΡΠ°ΡΡ ΡΠ°Π±ΠΎΡΡ.
ΠΠ»Ρ ΡΠ΅Ρ , ΠΊΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΡΠΈ ΠΈΠ· npm ΠΈ requirejs/browserify/webpack Π² ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΡΠ±ΠΎΡΠΊΠ΅ javascript, ΠΌΡ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ-ΡΠΎ Π²ΡΠΎΠ΄Π΅
var Scene = require("three/scene"),
Camera = require("three/camera"),
ΠΈ Ρ. Π΄., ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠΊΡΠ°ΡΠΈΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ· ΡΡΠ΅Ρ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠ², Π²ΡΡΡΠΎΠ΅Π½Π½ΡΡ Π² ΠΏΠ°ΠΊΠ΅Ρ ΡΠ°Π·ΠΌΠ΅ΡΠ° ΠΊΠ»ΠΈΠ΅Π½ΡΠ°. Π― ΠΌΠΎΠ³Ρ ΠΎΡΠΈΠ±Π°ΡΡΡΡ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π½Π΅ Π·Π½Π°Ρ, ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΈΠ· ΡΡΠ΅Ρ ΡΠ²Π»ΡΠ΅ΡΡΡ Β«ΡΠ΄ΡΠΎΠΌΒ». ΠΠ΄Π½Π°ΠΊΠΎ ΡΠ΅ΠΉΡΠ°Ρ ΡΡΠΎ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π² ΡΠ°ΠΉΠ»Π΅ three Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ require.
Π² Π»ΡΠ±ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΉ ΡΠ°Π±Π»ΠΎΠ½ ΡΡΠ΅Π±ΡΠ΅Ρ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ, ΠΈ Π²ΠΌΠ΅ΡΡΠΎ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ Π²Π΅ΡΡ Π²Π°Ρ ΠΊΠΎΠ΄ ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π» Π΄ΡΡΠ³ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ (ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΡΡ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΡ Π’Π Π, ΠΏΠ»ΠΎΡ
ΠΎ), Π²Π°Ρ ΠΊΠΎΠ΄ ΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡΠΌ ΠΈ ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΡΠΌ ΠΈ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΡΡΠΎ Π΅ΠΌΡ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ, Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ°ΠΌΠΈ require
, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΈΡΡ
ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄ React .
Π― Π½Π΅ Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ ΠΌΠΎΡ ΠΏΠΎΠΏΡΡΠΊΠ° ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΏΠΎΠ»Π½ΡΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ Π² ΠΏΠΎΠ»ΡΠ·Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ° require/module Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π² ΠΠ½ΡΠ΅ΡΠ½Π΅ΡΠ΅ Π΅ΡΡΡ ΠΌΠ½ΠΎΠ³ΠΎ Ρ ΠΎΡΠΎΡΠΈΡ ΡΠ΅ΡΡΡΡΠΎΠ² ΠΏΠΎ ΡΡΠΎΠΌΡ ΠΏΠΎΠ²ΠΎΠ΄Ρ. ΠΠΎ ΠΏΠ»ΠΎΡ ΠΎ ΠΏΠΎΠ±ΡΠΆΠ΄Π°ΡΡ Π΄ΡΡΠ³ΠΈΡ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½ THREE Π΄Π»Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ², ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΠΊ OrbitControls.
ΠΡΠΎΡΡΠΎ ΠΈΠΌΠ΅ΠΉΡΠ΅ Π² Π²ΠΈΠ΄Ρ, @DelvarWorld , ΡΡΠΎ ES6 ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎ Π²Π²ΠΎΠ΄ΠΈΡ ΠΌΠΎΠ΄ΡΠ»ΠΈ Π² JavaScript Ρ ΠΎΡΠ΅Π½Ρ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠΌ ΠΈ ΠΎΡΠ»ΠΈΡΠ½ΡΠΌ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠΎΠΌ:
@bhouston ΠΎ Π΄Π°, ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ, Ρ Π½Π΅ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ Ρ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΈΠΌΠΏΠΎΡΡΠ° (ΠΈΠΌΠΏΠΎΡΡ, Π²Π΅ΡΠΎΡΡΠ½ΠΎ, Π»ΡΡΡΠΈΠΉ Π²ΡΠ±ΠΎΡ), ΠΏΡΠΎΡΡΠΎ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Ρ ΡΠ°Π±Π»ΠΎΠ½ ΠΌΠΎΠ΄ΡΠ»Ρ Π² ΡΠ΅Π»ΠΎΠΌ.
@bhouston @DelvarWorld @kumavis ΠΠ΄ΠΈΠ½ ΠΈΠ· ΠΌΠΎΠΈΡ Π΄ΠΎΠ»Π³ΠΎΡΡΠΎΡΠ½ΡΡ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² β Π½Π°ΠΏΠΈΡΠ°ΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΊΠΎΠ½Π²Π΅ΡΡΠ΅Ρ es5 -> es6, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ΅Ρ Π²ΠΌΠ΅ΡΠ°ΡΡ ΠΈ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²ΡΠ²Π°ΡΡ ΠΌΠΎΠ΄ΡΠ»ΠΈ commonjs/amd Π² es6, ΠΈ, Π½Π°Π΄Π΅ΡΡΡ, ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΡΠΈΡΠΎΠ²Π°ΡΡ ΠΈ ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΠ°ΡΡ Π±ΠΎΠ»ΡΡΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ javascript Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΉ es6, ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΠΊ ΠΊΠ»Π°ΡΡΡ/Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΡ. ΠΈ ΡΠ°ΠΊ Π΄Π°Π»Π΅Π΅. ΠΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π±ΡΠ°ΡΠ·Π΅ΡΠ°, ΡΠ°ΠΊΠΎΠ΅ ΠΊΠ°ΠΊ es6ify, ΠΏΠΎΠΊΠ° Π±ΡΠ°ΡΠ·Π΅ΡΡ Π΄ΠΎΠ³ΠΎΠ½ΡΡΡ ΡΡΠ°Π½Π΄Π°ΡΡ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΈΡΡ ΠΊΠΎΠ΄ Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ. ΠΠ΅ΡΠ΅Ρ ΠΎΠ΄ THREE ΠΊ Π±ΡΠ°ΡΠ·Π΅ΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π½Π° Π²Π½ΡΡΡΠ΅Π½Π½Π΅ΠΌ ΡΡΠΎΠ²Π½Π΅ β Ρ ΠΎΡΠΎΡΠΈΠΉ ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠ°Π³ Π΄Π»Ρ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠΈ Π΅Π³ΠΎ ΠΊ Π²Π²ΠΎΠ΄Ρ Π² ΡΠ°ΠΊΠΎΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ.
ΠΡΠΎ Π½Π΅ ΡΠΎ, ΡΡΠΎ Ρ (Π²ΠΈΠ΄ΠΈΠΌΠΎ, ΠΎΡΠ΅Π½Ρ ΠΏΠ»ΠΎΡ ΠΎ) ΠΏΡΡΠ°Π»ΡΡ ΡΠ΄Π΅Π»Π°ΡΡ. Π― Ρ ΠΎΡΡ ΡΠ΄Π°Π»ΠΈΡΡ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π±ΠΎΠ»ΡΡΠ΅ ΡΡΠΈΡ ΡΠΈΠΊΠ»ΠΈΡΠ΅ΡΠΊΠΈΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ, Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ ΠΊΠ°ΠΊΠΈΡ -Π»ΠΈΠ±ΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Ρ ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΠΎΡΡΡΡ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Ρ ΡΡΠΈΡΠ°Ρ, ΡΡΠΎ ΡΡΠΎ ΡΠ΄Π΅Π»Π°Π΅Ρ THREE Π±ΠΎΠ»Π΅Π΅ ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΡΠΌ, Π³ΠΈΠ±ΠΊΠΈΠΌ ΠΈ, Π²Π΅ΡΠΎΡΡΠ½ΠΎ, ΡΡΡΡΠ°Π½ΠΈΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΎΡΠΈΠ±ΠΎΠΊ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΡΠΈΡΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ±ΠΎΡΠ½ΠΎΠ³ΠΎ ΡΡΡΠ΅ΠΊΡΠ°.
@coballast https://github.com/mrdoob/three.js/pull/6252 Π±ΡΠ» ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½, ΡΡΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠΎΠΊΡΠ°ΡΠΈΡΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠΈΠΊΠ»ΠΈΡΠ΅ΡΠΊΠΈΡ ΠΎΡΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. ΠΡΠΌΠ°Π΅ΡΠ΅, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ Π½ΠΎΠ²ΡΠΉ Π³ΡΠ°Ρ ΠΎΡΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ? ΠΠΎΠΆΠ΅Ρ Π±ΡΡΡ, ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ ΡΡΠΈΠ»ΠΈΡΠΎΠΉ Π² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ° ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ
ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅: ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
Π² Vector3
Matrix4
, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌΡΡ
Π»Π΅Π½ΠΈΠ²ΠΎ ΠΏΡΠΈ ΠΏΠ΅ΡΠ²ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ, Π° Π½Π΅ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ
ΠΊΡΠΎ-Π½ΠΈΠ±ΡΠ΄Ρ Ρ ΠΎΡΠ΅Ρ ΡΡΠ°ΡΡ Π²ΠΎΠ»ΠΎΠ½ΡΠ΅ΡΠΎΠΌ? Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ Π±ΡΡΡΡΠΎ
ΠΡΠ°ΡΠΈΠΊ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½. http://jsbin.com/medezu/3/
ΠΠΎΡ ΡΠΊΡΠΈΠ½ΡΠΎΡ:
Π― ΡΠ°Π΄ ΡΠΎΠΎΠ±ΡΠΈΡΡ, ΡΡΠΎ ΠΎΠ³ΡΠΎΠΌΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠΈΠΊΠ»ΠΎΠ² Object3Ds Π±ΡΠ»ΠΎ ΡΡΡΡΠ°Π½Π΅Π½ΠΎ. Π₯ΠΎΡΠΎΡΠ°Ρ ΡΠ°Π±ΠΎΡΠ° @kumavis!
Π²Π°Ρ, ΡΡΠΎ ΡΠ° ΠΆΠ΅ ΠΊΠΎΠ΄ΠΎΠ²Π°Ρ Π±Π°Π·Π°? ΡΡΠΌΠ°ΡΡΠ΅Π΄ΡΠΈΠΉ
ΠΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π½Π°Π΄ ΡΠ΅ΠΌ, ΡΡΠΎΠ±Ρ ΡΠ΄Π΅Π»Π°ΡΡ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΡ Π³ΡΠ°ΡΠΎΠ² ΡΠ°ΡΡΡΡ ΡΡΠΈΠ»ΠΈΡΡ.
ΠΡΠΈ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½ΠΈΠΈ ΡΠΎΠ»ΡΠΊΠΎ Π³ΡΠ°ΡΠ° Shape
ΠΈ Geometry
ΠΊΠ°ΠΆΡΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠΌΠΈ Π΄Π΅ΡΠ΅Π²ΡΡΠΌΠΈ ΠΊΠ»Π°ΡΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°Π·Π³Π°Π΄Π°ΡΡ.
@coballast Π΄ΡΠΌΠ°Π΅ΡΡ, ΡΡ ΡΠΏΡΠ°Π²ΠΈΡΡΡΡ Ρ ΡΡΠΈΠΌ?
ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π² Vector3 Matrix4, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌΡΡ Π»Π΅Π½ΠΈΠ²ΠΎ ΠΏΡΠΈ ΠΏΠ΅ΡΠ²ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ, Π° Π½Π΅ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ
ΡΡΠΎ Π±ΡΠ΄Π΅Ρ PR ΠΏΡΠΎΡΠΈΠ² Π²ΡΡΠ΅ΡΡΠΎΡΡΠ΅Π³ΠΎ dev
, Π° Π½Π΅ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅
Π’Π°ΠΊΠΆΠ΅ Ρ Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ½ΠΈΠ·ΠΈΡΡ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Ρ "Π‘Π΅ΡΡΠ΅Π·Π½ΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Ρ ΡΠΈΠΊΠ»ΠΈΡΠ΅ΡΠΊΠΈΠΌΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡΠΌΠΈ" Π½Π° "ΡΠΈΠΊΠ»ΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ" - ΡΠΈΡΡΠ°ΡΠΈΡ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ»ΡΡΡΠΈΠ»Π°ΡΡ!
@kumavis ΠΠΎΠ½Π΅ΡΠ½ΠΎ. ΠΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π½Π°Π΄ ΡΡΠΈΠΌ, ΠΊΠΎΠ³Π΄Π° Π²ΡΠ΅ΠΌΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ.
ΠΠΎΡ ΡΠ΅ΠΊΡΡΠ΅Π΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΎΡΠΈΡΡΠΊΠΈ Π²Π·Π°ΠΈΠΌΠΎΠ·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ, ΠΊΠ°ΠΊ Ρ Π΅Π³ΠΎ Π²ΠΈΠΆΡ:
(ΡΡΡΠ΅Π»ΠΊΠΈ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΈ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΡΠ΄Π°Π»ΠΈΡΡ )
ΠΡΠΈ ΡΠ·Π»Ρ ΡΠ²ΡΠ·Π°Π½Ρ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠΎΠ±ΠΎΠΉ, Π½ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡ Π·Π° ΡΡΠ΅Ρ ΡΡΠΎΠ³ΠΎ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎΠ΅ ΡΠ΄ΠΎΠ±ΡΡΠ²ΠΎ.
ΠΠ°ΠΆΠ΅ΡΡΡ, ΡΡΠΎ Shape ΠΈΠΌΠ΅Π΅Ρ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ Ρ ExtrudeGeometry
ΠΈ ShapeGeometry
ΡΠ΅ΡΠ΅Π· ΡΠ°ΠΊΠΎΠΉ ΠΊΠΎΠ΄:
// Convenience method to return ExtrudeGeometry
THREE.Shape.prototype.extrude = function ( options ) {
var extruded = new THREE.ExtrudeGeometry( this, options );
return extruded;
};
// Convenience method to return ShapeGeometry
THREE.Shape.prototype.makeGeometry = function ( options ) {
var geometry = new THREE.ShapeGeometry( this, options );
return geometry;
};
Π’Π΅ΠΏΠ΅ΡΡ ΠΊΠ°ΠΆΠ΅ΡΡΡ, ΡΡΠΎ Shape
ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠΎΠ΄ΠΊΠ»Π°ΡΡΠΎΠΌ Path
, Π° ExtrudeGeometry
ΠΈ ShapeGeometry
ΡΠ²Π»ΡΡΡΡΡ ΠΏΠΎΠ΄ΠΊΠ»Π°ΡΡΠ°ΠΌΠΈ Geometry
. ΠΡΠ°ΠΊ, Π²Ρ Π·Π½Π°Π΅ΡΠ΅, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²ΡΡΡΠ½ΠΈΡΡ, ΠΊΠ°ΠΊΠΈΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΡΠ΄Π°Π»Π΅Π½Ρ Π² ΠΈΠ΄Π΅Π°Π»ΡΠ½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅.
ΠΠ°, ΡΡΠΎ ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΊ ΡΠΎΠΉ ΠΆΠ΅ ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠΈ, ΡΡΠΎ ΠΈ Vector3
<-> Matrix4
. ΠΠ½ΠΈ ΡΠ²ΡΠ·Π°Π½Ρ Π΄Π»Ρ ΡΠ΄ΠΎΠ±ΡΡΠ²Π°. Π― Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ ΡΡΠΎ ΠΏΠ»ΠΎΡ
Π°Ρ ΠΈΠ΄Π΅Ρ, Π½ΠΎ Π½Π΅ ΡΡΠΎΠΈΡ Ρ Π½Π΅ΠΉ Π±ΠΎΡΠΎΡΡΡΡ. Π― ΠΎΡΠΌΠ΅ΡΡ ΡΡΠΎ ΠΊΠ°ΠΊ Π·Π°Π²Π΅ΡΡΠ΅Π½Π½ΠΎΠ΅
Shape -> FontUtils
ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π°Π»ΠΈΡΡ, ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΠ² ΡΠ°ΠΊΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ, ΠΊΠ°ΠΊ triangulate
, Π² Π±ΠΎΠ»Π΅Π΅ ΠΎΠ±ΡΠΈΠ΅ ΡΡΠΈΠ»ΠΈΡΡ. ΠΠΎ ΡΡΠΎ Π½Π΅ Π±ΠΎΠ»ΡΡΠ°Ρ ΠΏΠΎΠ±Π΅Π΄Π°. Π‘ΠΎΠ±ΠΈΡΠ°ΡΡΡ ΠΎΡΠΌΠ΅ΡΠΈΡΡ Π΅Π³ΠΎ ΠΊΠ°ΠΊ Π·Π°Π²Π΅ΡΡΠ΅Π½Π½ΡΠΉ.
Box3 -> BufferGeometry
ΠΈ Box3 -> Geometry
ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΎΡΠΈΡΠ΅Π½Ρ.
ΠΡΠΎ Π΅ΡΠ΅ ΠΎΠ΄ΠΈΠ½ ΡΠ»ΡΡΠ°ΠΉ, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΊΠ»Π°ΡΡΠ° Π½Π΅ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΠΊΠ»Π°ΡΡΠ°.
setFromObject: function () {
// Computes the world-axis-aligned bounding box of an object (including its children),
// accounting for both the object's, and childrens', world transforms
/* ... */
if ( geometry instanceof THREE.Geometry ) {
/* ... */
} else if ( geometry instanceof THREE.BufferGeometry && geometry.attributes[ 'position' ] !== undefined ) {
/* ... */
}
/* ... */
}
Π ΠΎΠ±ΠΎΠΈΡ
ΡΠ»ΡΡΠ°ΡΡ
ΡΡΠΎ ΠΏΡΠΎΡΡΠΎ ΠΏΠΎΠΏΡΡΠΊΠ° ΠΏΠ΅ΡΠ΅Π±ΡΠ°ΡΡ Π²Π΅ΡΡΠΈΠ½Ρ/ΠΏΠΎΠ·ΠΈΡΠΈΠΈ Π³Π΅ΠΎΠΌΠ΅ΡΡΠΈΠΈ worldCoordinate. ΠΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ, ΡΠΈΠ»ΡΠ½ΠΎ Π»ΠΈ ΡΠΏΡΠΎΡΡΠΈΡ ΠΊΠΎΠ΄ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π»Π΅Π½ΠΈΠ²ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° vertices
Π½Π° BufferGeometry
, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΎΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠΎ ΠΌΠ΅ΡΠ΅ ΠΈΡ
Π·Π°ΠΏΡΠΎΡΠ°. ΠΠ΅ ΡΠ²Π΅ΡΠ΅Π½ Π½Π°ΡΡΠ΅Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ.
Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Ρ ΠΌΡ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Geometry.computeBoundingBox
:
Geometry
BufferGeometry
Box3 ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ½ΡΠΌ ΠΌΠ΅ΡΡΠΎΠΌ ΠΏΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ ΡΠ±ΠΎΡΠΊΠΈ browserify. Π‘ΠΌ. ΠΏΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΡ Π² coballast/threejs-browserify-conversion-utility#21.
@kumavis ΠΠ΅ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ Π²Ρ ΠΈΠ·Π»ΠΎΠΆΠΈΡΡ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΠΌΠΎΠ΅ Π²Π°ΠΌΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ Box3/Geometry/BufferGeometry? ΠΡΠ»ΠΈ Π±ΡΡΡΡΠΎ, ΡΠΎ ΠΌΠΎΠ³Ρ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ.
Π― Π½Π΅ ΠΌΠΎΠ³Ρ ΡΠΌΠΎΡΡΠ΅ΡΡ Π½Π° ΡΡΠΎ ΠΏΡΡΠΌΠΎ ΡΠ΅ΠΉΡΠ°Ρ, Π½ΠΎ Ρ Π±Ρ Π½Π°ΡΠ°Π» Ρ ΠΌΠΎΠ΅Π³ΠΎ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡ Π²ΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ geo.computeBoundingBox
ΠΊΠ°ΠΊ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ Π½Π° Geometry
ΠΈ BufferGeometry
Π²ΠΌΠ΅ΡΡΠΎ if/else Π·Π΄Π΅ΡΡ . ΠΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ box3.setFromObj
Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΡΠ·Π²Π°ΡΡ geometry.computeBoundingBox
, Π° Π·Π°ΡΠ΅ΠΌ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΡΠΎΠ·Π΄Π°Π½Π½ΠΎΠ³ΠΎ box3.
ΠΡΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠ΄Π°Π»ΠΈΡΡ ΠΊΠΎΠ½Π΅Ρ Box3 -> BufferGeometry
ΠΈ Box3 -> Geometry
ΠΊΡΡΠ³Π»ΡΡ
ΠΎΡΠΏΠ΅ΡΠ°ΡΠΊΠΎΠ². ΠΠ°ΠΉΡΠ΅ ΠΌΠ½Π΅ Π·Π½Π°ΡΡ, Π΅ΡΠ»ΠΈ Ρ ΡΡΠΎ-ΡΠΎ ΡΠΏΡΡΡΠΈΠ».
Π₯ΠΌ, ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ, ΠΏΠΎΠ»ΡΡΠΈΠ²ΡΠΈΠΉΡΡ ΠΊΠΎΠ΄ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π·Π°ΠΏΡΡΠ°Π½, ΡΡΠΎ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ Π·Π΄Π΅ΡΡ ΠΈΠΌΠ΅Π΅Ρ ΡΠΌΡΡΠ»? Box3.setFromObject
Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°ΡΡ, Π½ΠΎ ΡΡΠΎ Π½Π΅ Π²Π°ΡΠΈΠ°Π½Ρ. Geo's Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΌΠ΅ΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡ box3, Ρ ΠΌΠ΅Π½Ρ Ρ ΡΡΠΈΠΌ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Π½Π΅Ρ. ΠΠ°, Ρ Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ Box3.setFromObject
Π΄ΠΎΠ»ΠΆΠ½Ρ Π·Π°ΠΏΡΠΎΡΠΈΡΡ Ρ Π³Π΅ΠΎΠ»ΠΎΠΊΠ°ΡΠΈΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°ΡΡΡΡ ΡΠ°ΠΌΠΊΡ/ΡΠΊΡΡΠ΅Π½ΡΡ, Π½ΠΎ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΈΠΌ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΏΠΎΠΏΡΠΎΡΠΈΡΡ Object3D
/ Mesh
ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΠ°ΠΌΠΊΡ/ΡΠΊΡΡΠ΅Π½ΡΡ.
ΠΈΠ·Π²ΠΈΠ½ΠΈΡΠ΅ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΡΡΠΌΠ±ΡΡΠ½ΠΎ. ΠΠ°ΠΉ ΠΌΠ½Π΅ Π·Π½Π°ΡΡ, ΡΡΠΎ ΡΡ Π΄ΡΠΌΠ°Π΅ΡΡ.
ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΅Π»Π΅Π²Π°Π½ΡΠ½ΠΎ: #6546
ΠΠ΅Π· ΡΠ΅Π³ΠΎ-ΡΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΠΊΡΠΈΠΏΡΠΎΠ² Π·Π°Π³ΡΡΠ·ΡΠΈΠΊΠ°.
Π‘ΡΠ΄Ρ ΠΏΠΎ ΠΌΠΎΠΈΠΌ ΡΠ΅ΡΡΠ°ΠΌ, ΡΠΈΠΊΠ»ΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ Π½Π΅ ΡΠ²Π»ΡΡΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΠΉ Π΄Π»Ρ commonJSification. Π‘ Π½ΠΈΠΌΠΈ Π½ΡΠΆΠ½ΠΎ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΠΎΠ±ΡΠ°ΡΠ°ΡΡΡΡ, ΠΈ, ΠΊΠ°ΠΊ ΡΠΆΠ΅ Π³ΠΎΠ²ΠΎΡΠΈΠ»ΠΎΡΡ ΡΠ°Π½Π΅Π΅ Π² ΡΡΠΎΠΉ Π²Π΅ΡΠΊΠ΅, ΠΎΠ½ΠΈ Π΄Π΅Π»Π°ΡΡ Π³ΡΠ°Ρ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ Π±Π΅ΡΠΏΠΎΡΡΠ΄ΠΎΡΠ½ΡΠΌ, Π½ΠΎ ΠΎΠ½ΠΈ Π½Π΅ ΠΌΠ΅ΡΠ°ΡΡ THREE.js ΡΠ°Π±ΠΎΡΠ°ΡΡ Π² ΠΎΠ±ΡΡΠ½ΡΡ ΡΡΠ΅Π΄Π°Ρ JS (ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ, ΠΏΡΠΈ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠΈ).
Π― ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ ΠΎΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°Π» ΠΏΠΎΠ»Π½ΡΡ Π²Π΅ΡΡΠΈΡ commonjs Π½Π° npm ΠΊΠ°ΠΊ three.cjs , ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΡΠΈ ΡΡΠ°Π½ΡΠΏΠΈΠ»ΡΡΠΎΡΠ° commonjs.
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅: ΡΡΠΎΠ±Ρ ΡΡΠΎ ΡΡΠ°Π±ΠΎΡΠ°Π»ΠΎ, ΠΌΠ½Π΅ ΠΏΡΠΈΡΠ»ΠΎΡΡ Π²ΡΡΡΠ½ΡΡ Π²ΡΠ±ΠΈΡΠ°ΡΡ #6546 Π½Π° ΠΌΠ°ΡΡΠ΅ΡΠ΅. Π₯ΠΎΡΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ Ρ ΠΎΡΠΎΡΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π² node.js, ΠΎΠ½ΠΈ Π½Π΅ ΠΌΠΎΠ³ΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π² Browserify (ΠΈΠ»ΠΈ Π»ΡΠ±ΠΎΠΌ Π΄ΡΡΠ³ΠΎΠΌ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ΅ cjs Π΄Π»Ρ Π±ΡΠ°ΡΠ·Π΅ΡΠ°), ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΈΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π°Π½Π°Π»ΠΈΠ· Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ.
ΠΡΠΎΡΠΌΠΎΡΡΠΈΡΠ΅ Π΄ΠΎΠΊΠ°Π·Π°ΡΠ΅Π»ΡΡΡΠ²ΠΎ: http://requirebin.com/?gist=b7fe528d8059a7403960
@kamicane FYI - Π²ΠΎΡ Π³Π΄Π΅ Π’Π Π Π±ΡΠ»ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΊ Raycaster
(ΡΠ°Π½Π΅Π΅ Ray
).
Π― ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ (Π΄Π»Ρ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠ΅Π½ΠΈΡ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΡ ΡΡΠ΅ΡΠ΅ΠΊ Π² Π±ΡΠ°ΡΠ·Π΅ΡΠ°Ρ ), ΠΎΠ΄Π½Π°ΠΊΠΎ ΡΡΠΎΡ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ Π»ΠΈΡΠ½ΠΈΠΉ ΠΈ Π΄Π΅Π»Π°Π΅Ρ Π²Π΅ΡΡ ΡΠ°ΠΉΠ» ΠΏΠΎΠ΄ΠΏΠ°Π΄Π°ΡΡΠΈΠΌ ΠΏΠΎΠ΄ ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΡ Π²ΡΡΠΈΡΠ»ΡΠ΅ΠΌΡΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ. Π₯ΠΎΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ ΡΠ΄Π°Π»Π΅Π½ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΠΉ AST, ΠΎΠ½ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΡΠ»Π΅Π½Π΅ΠΏΡΠΎΠ±ΠΈΠ²Π°Π΅ΠΌΡΠΌ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ (Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΠΎΠ³ΠΎ, ΡΡΠΎ Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅ΡΡΡ Π² Π°ΡΠ³ΡΠΌΠ΅Π½Ρ, ΡΠΈΡΠ°Π΅ΡΡΡ ΠΈΠ· Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° ΠΈ Ρ.Β Π΄.). Π‘ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π°Π½Π°Π»ΠΈΠ· ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠΌ. Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΡΡΠ½ΠΎΠ΅ Π²ΠΌΠ΅ΡΠ°ΡΠ΅Π»ΡΡΡΠ²ΠΎ.
Π’Π΅ΠΏΠ΅ΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΊΠ»Π°ΡΡ Raycaster
ΡΡΠ°Π» Π±ΠΎΠ»Π΅Π΅ Π»Π΅Π³ΠΊΠΈΠΌ, ΠΌΡ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ ΠΏΠΎΠΏΡΡΠ°ΡΡΡΡ ΡΠ΄Π΅Π»Π°ΡΡ Π΅Π³ΠΎ ΠΏΠΎΡ
ΠΎΠΆΠΈΠΌ Π½Π° ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅ ΠΊΠ»Π°ΡΡΡ.
@mrdoob , @Mugen87 ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ Rollup, ΡΡΠΎΠ±Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅ ΡΠ°ΡΡΠΈ Three.js, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π°ΠΌ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π½ΡΠΆΠ½Ρ. ΠΠΎΠ³Π΄Π° ΠΌΡ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌ ΡΠ±ΠΎΡΠΊΡ, ΠΌΡ ΠΏΠΎ-ΠΏΡΠ΅ΠΆΠ½Π΅ΠΌΡ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅:
(!) Circular dependency: node_modules/three/src/math/Vector3.js -> node_modules/three/src/math/Matrix4.js -> node_modules/three/src/math/Vector3.js
(!) Circular dependency: node_modules/three/src/math/Vector3.js -> node_modules/three/src/math/Quaternion.js -> node_modules/three/src/math/Vector3.js
(!) Circular dependency: node_modules/three/src/math/Sphere.js -> node_modules/three/src/math/Box3.js -> node_modules/three/src/math/Sphere.js
(!) Circular dependency: node_modules/three/src/objects/LineSegments.js -> node_modules/three/src/objects/Line.js -> node_modules/three/src/objects/LineSegments.js
ΠΡΡΡ Π»ΠΈ ΡΠΈΠΊΠ»ΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ Π² Three.js ΠΈΠ»ΠΈ ΠΌΡ Π΄Π΅Π»Π°Π΅ΠΌ ΡΡΠΎ-ΡΠΎ Π½Π΅ ΡΠ°ΠΊ?
Vector3 ΠΈ Matrix4 ΠΏΡΠΈΠ²ΡΠ·Π°Π½Ρ Π΄ΡΡΠ³ ΠΊ Π΄ΡΡΠ³Ρ, Π΅ΡΠ»ΠΈ ΡΡΠ½ΡΡΡ ΠΎΠ΄ΠΈΠ½, ΡΠΎ Π½Π°Π΄ΠΎ ΡΡΠ½ΡΡΡ ΠΈ Π΄ΡΡΠ³ΠΎΠΉ. Π¦ΠΈΠΊΠ»ΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½Ρ.
@bhouston Π΄Π°, Ρ Π²ΠΈΠΆΡ, ΡΠΏΠ°ΡΠΈΠ±ΠΎ Π·Π° ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΡ. ΠΠ°, ΡΠΈΠΊΠ»ΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½Ρ, ΠΈ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Π½Π΅ ΡΠΎΠ·Π΄Π°Π΅Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌ, Π½ΠΎ Ρ Π½Π΅ ΡΠ²Π΅ΡΠ΅Π½, ΡΡΠΎ ΡΠΈΠΊΠ»ΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ β ΡΡΠΎ Ρ
ΠΎΡΠΎΡΠ°Ρ ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°. Vector3
Π·Π°Π²ΠΈΡΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΡ Matrix4
ΠΈΠ·-Π·Π° multiplyMatrices
ΠΈ getInverse
, ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΡΠΌ. (https://github.com/mrdoob/three.js/ blob/dev/src/math/Vector3.js#L315)
@roomle-build ΠΠ°, ΡΡΠ²Π°ΠΊ, ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠΎΠΌΡ, ΡΡΠΎ ΠΎΠ½ ΡΠ²Π½ΠΎ ΡΡΡΠ»Π°Π΅ΡΡΡ Π½Π° ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ Matrix4? ΠΊΠ°ΠΊ Π½Π°ΡΡΠ΅Ρ
applyMatrix4: function ( m ) {
var x = this.x, y = this.y, z = this.z;
var e = m.elements;
var w = 1 / ( e[ 3 ] * x + e[ 7 ] * y + e[ 11 ] * z + e[ 15 ] );
this.x = ( e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z + e[ 12 ] ) * w;
this.y = ( e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z + e[ 13 ] ) * w;
this.z = ( e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z + e[ 14 ] ) * w;
return this;
},
?
Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ { elements: [....] } ΠΈ ΡΡΠΎ ΡΡΠ°Π±ΠΎΡΠ°Π΅Ρ, Π½ΠΎ ΠΌΡ Π²ΡΠ΅ Π·Π½Π°Π΅ΠΌ, ΡΡΠΎ ΡΠ°ΠΌ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ Matrix4
ΠΠ°ΡΠ½Π΅ΠΌ Ρ Vector3
.
Vector3
Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ Matrix4
ΠΈΠ·-Π·Π° project
ΠΈ unproject
:
project: function () {
var matrix = new Matrix4();
return function project( camera ) {
matrix.multiplyMatrices( camera.projectionMatrix, matrix.getInverse( camera.matrixWorld ) );
return this.applyMatrix4( matrix );
};
}(),
unproject: function () {
var matrix = new Matrix4();
return function unproject( camera ) {
matrix.multiplyMatrices( camera.matrixWorld, matrix.getInverse( camera.projectionMatrix ) );
return this.applyMatrix4( matrix );
};
}(),
Vector3
Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ Quaternion
ΠΈΠ·-Π·Π° applyEuler
ΠΈ applyAxisAngle
:
applyEuler: function () {
var quaternion = new Quaternion();
return function applyEuler( euler ) {
if ( ! ( euler && euler.isEuler ) ) {
console.error( 'THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order.' );
}
return this.applyQuaternion( quaternion.setFromEuler( euler ) );
};
}(),
applyAxisAngle: function () {
var quaternion = new Quaternion();
return function applyAxisAngle( axis, angle ) {
return this.applyQuaternion( quaternion.setFromAxisAngle( axis, angle ) );
};
}(),
ΠΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡ?
Π― Π½Π΅ ΡΠ²Π΅ΡΠ΅Π½, ΡΡΠΎ Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ ΡΠ΄Π°Π»ΡΡΡ ΠΊΡΡΠ³ΠΎΠ²ΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ. ΠΠΎ Ρ ΠΌΠΎΠ³ Π±Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΡΡ ΡΠ΅Π±Π΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ multiplyMatrices
Π² ΠΌΠΎΠ΄ΡΠ»Ρ Math
. ΠΠ°ΡΠ΅ΠΌ ΠΏΠΎΠ΄ΠΏΠΈΡΡ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡΡ Π½Π° multiplyMatrices( a: Matrix4, b: Matrix4, result: Matrix4 ): Matrix4
. ΠΠ½ΡΡΡΠΈ Vector3
Π²Ρ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ Π·Π°ΡΠ΅ΠΌ import { multiplyMatrices } from './Math';
ΡΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π±Ρ ΡΠ΄Π΅Π»Π°ΡΡ Π² Matrix4
(ΡΡΠΎΠ±Ρ ΡΠΎΡ
ΡΠ°Π½ΠΈΡΡ ΠΏΠΎΠ²Π΅ΡΡ
Π½ΠΎΡΡΡ API Matrix4
ΡΠ°ΠΊΠΎΠΉ ΠΆΠ΅).
Π― ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ Π±Π΅Π³Π»ΠΎ ΠΏΡΠΎΡΠΌΠΎΡΡΠ΅Π» (Π½Π΅ ΡΠΌΠΎΡΡΠ΅Π» Π½Π° ΡΠ»ΡΡΠ°ΠΉ Quaternian
- ΡΠΎΠ»ΡΠΊΠΎ Vec3/Mat4
), ΠΈ Ρ ΡΠ°ΠΊΠΆΠ΅ Π½Π΅ ΡΠ²Π΅ΡΠ΅Π½ Π² Π²Π»ΠΈΡΠ½ΠΈΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΠ²ΠΈΡΡ
Π΄Π»Ρ ΠΎΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΡΠ°ΡΡΠΈ Π±Π°Π·Ρ ΠΊΠΎΠ΄Π°. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, Ρ ΡΠ°ΠΊΠΆΠ΅ Π½Π΅ ΡΠ²Π΅ΡΠ΅Π½, ΡΡΠΎ Π°Π±ΡΠΎΠ»ΡΡΠ½ΠΎ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ΄Π°Π»ΡΡΡ ΡΡΠΈ ΡΠΈΠΊΠ»ΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ. ΠΡΠΎΡΡΠΎ Ρ
ΠΎΡΠ΅Π» ΠΏΠΎΠ΄Π΅Π»ΠΈΡΡΡΡ ΡΠ²ΠΎΠΈΠΌΠΈ ΠΌΡΡΠ»ΡΠΌΠΈ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ @mrdoob ΠΏΠΎΠΏΡΠΎΡΠΈΠ» ΡΠΎΠ²Π΅ΡΠ°
@roomle-build, ΡΠ°ΠΊ ΡΡΠΎ Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ ΡΠΎΠ·Π΄Π°Π²Π°ΠΉΡΠ΅ Π±ΠΎΠ»ΡΡΠ΅ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ, ΡΡΠΎΠ±Ρ Π½Π΅ Π±ΡΠ»ΠΎ ΠΊΡΡΠ³ΠΎΠ²ΡΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ, Π½ΠΎ Π²Ρ Π²ΡΠ΅ ΡΠ°Π²Π½ΠΎ ΡΠΎΠ±ΠΈΡΠ°Π΅ΡΠ΅ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π²ΡΠ΅ ΡΡΠΈ ΠΌΠΎΠ΄ΡΠ»ΠΈ? ΡΡΠΎ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΈΠΌΠ΅Π»ΠΎ Π±Ρ Π±ΠΎΠ»ΡΡΠ΅ ΡΠΌΡΡΠ»Π°, Π΅ΡΠ»ΠΈ Π±Ρ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΌΠ΅ΡΠΎΠ΄ Π±ΡΠ» ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΌ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΌ, ΡΠΎΠ³Π΄Π° Π²Ρ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅ΡΠ΅ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅, Π½ΠΎ ΡΡΠΎ Π±ΡΠ΄Π΅Ρ ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ.
@makc Π½Π΅ ΡΠΎΠ²ΡΠ΅ΠΌ. ΠΡΠΎ Π±ΡΠ΄Π΅Ρ ΠΎΠ΄ΠΈΠ½ Π±ΠΎΠ»ΡΡΠΎΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎΠΌ ΠΌΠ°Π»Π΅Π½ΡΠΊΠΈΡ Β«Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΡΡ Β» ΡΡΠ½ΠΊΡΠΈΠΉ. ΠΡΠΎ ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈ Π²ΡΡΡΡΡ ΠΈΠ²Π°Π½ΠΈΠΈ Π΄Π΅ΡΠ΅Π²ΡΠ΅Π² ΠΈ Ρ. Π΄. ΠΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΡΠ°ΠΊ:
export const multiplyMatrices( a, b, result ) {Β // ... DO STUFF ... // }
export const getInverse( /* ... */ ) {Β // ... DO STUFF ... // }
// ...
// ...
Π ΠΏΠΎΡΡΠ΅Π±Π»ΡΡΡΠΈΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ Π±ΡΠ΄Π΅Ρ Π΄Π΅Π»Π°ΡΡ ΡΡΠΎ-ΡΠΎ Π²ΡΠΎΠ΄Π΅:
import { Matrix4 } from './Matrix4.js';
import { multiplyMatrices } from './math';
const result = new Matrix4( );
multiplyMatrices( a, b, result );
ΠΠΎΠ³Π΄Π° Π²ΡΠ΅ Π²ΠΌΠ΅ΡΡΠ΅ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΡΠ΅ΡΡΡ, rollup ΡΠ²ΠΎΡΠΈΡ ΡΡΠ΄Π΅ΡΠ° ΠΈ ΡΠΎΠ·Π΄Π°Π΅Ρ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΠΉ ΠΏΠ°ΠΊΠ΅Ρ.
ΠΡΠΎ ΡΠΎ, ΡΡΠΎ Π΄Π΅Π»Π°ΡΡ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ. ΠΠ° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ RxJS ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠΈΠ» ΡΠ²ΠΎΡ Β«Π»ΠΎΠ³ΠΈΠΊΡΒ» import
ΡΠ°ΠΊΠΆΠ΅ Π½Π° ΠΎΠΏΠΈΡΠ°Π½Π½ΡΠΉ ΠΌΠ½ΠΎΠΉ ΡΠ°Π±Π»ΠΎΠ½. Π’Π°ΠΌ ΡΡΠΎ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠ°ΠΊ:
import { flatMap, map, tap } from 'rxjs/operators';
myObject.run().pipe(
tap(result => doSomething()),
flatMap(() => doSomethingElse()),
map(() => doAnotherThing())
);
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΎΡΠΈΡΠ°ΡΡ ΠΎ ΡΠΎΠΌ, Β«ΠΏΠΎΡΠ΅ΠΌΡ ΠΈ ΠΊΠ°ΠΊΒ» ΠΎΠ½ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΈ ΡΡΠΎΡ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π» Π² RxJS 6, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π² Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡΡ Π±Π»ΠΎΠ³Π°: https://auth0.com/blog/whats-new-in-rxjs-6/
ΠΠΎ, ΠΊΠ°ΠΊ Ρ ΡΠΆΠ΅ ΡΠΊΠ°Π·Π°Π», ΡΡΠΎ Π²ΡΠ΅Π³ΠΎ Π»ΠΈΡΡ ΠΌΡΡΠ»Ρ, ΠΈ Ρ Π½Π΅ ΡΠ²Π΅ΡΠ΅Π½ Π²ΠΎ Π²ΡΠ΅Ρ
ΠΏΠΎΡΠ»Π΅Π΄ΡΡΠ²ΠΈΡΡ
, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΈΠΌΠ΅ΡΡ Π΄Π»Ρ ΠΎΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΡΠ°ΡΡΠΈ ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠΉ Π±Π°Π·Ρ. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΡΠ΅ΠΊΡΡΠΈΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ math
Π½Π΅ Β«ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²Π»Π΅Π½Β» Π΄Π»Ρ ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ. Π Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ Π²ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΏΡΠΈΠΊΡΠ΅ΠΏΠ»Π΅Π½Ρ Β«ΠΊΠ°ΠΊ Π±Ρ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΒ». ΠΡΠΎ ΡΠ°ΠΊΠΆΠ΅ Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π°Π³ΡΠ΅Π³Π°ΡΠΈΠΈ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΡΡ ΡΠΎ, ΡΡΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ...
@roomle-build Ρ ΠΌ, ΡΠ°ΠΊ Π²Ρ Π³ΠΎΠ²ΠΎΡΠΈΡΠ΅, ΡΡΠΎ ΡΠ²Π΅ΡΡΡΠ²Π°Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ½ΡΡΡ, Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π»ΠΈ ΠΊΠΎΠ΄Ρ Π² ΡΠΎΠΉ ΠΆΠ΅ ΠΎΠ±Π»Π°ΡΡΠΈ Π½Π΅ Π½ΡΠΆΠ½Π° Π²ΡΡ ΠΎΠ±Π»Π°ΡΡΡ, Ρ ΠΎΡΠΎΡΠΎ.
ΠΡ Π³ΠΎΠ²ΠΎΡΠΈΡΠ΅ ΠΎ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Π΅ ΠΊ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠΌΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Ρ (ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ), Π° Π½Π΅ ΠΊ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΠΎ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Ρ (ΠΎΠ±ΡΠ΅ΠΊΡ ΠΈΠΌΠ΅Π΅Ρ ΡΡΠ½ΠΊΡΠΈΠΈ-ΡΠ»Π΅Π½Ρ). ΠΡΠΎ ΡΠ΅Π°Π»ΡΠ½Π°Ρ Π²Π΅ΡΡ, Π½ΠΎ, ΡΡΠΈΡΡΠ²Π°Ρ, ΡΡΠΎ Three.JS ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΠΎ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½, ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠ°ΠΊΠΎΠ³ΠΎ ΡΠΈΠΏΠ° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΡΠ²Π»ΡΠ΅ΡΡΡ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ Π±ΠΎΠ»ΡΡΠΎΠΉ, ΠΈ ΠΎΠ½ ΡΠ»ΠΎΠΌΠ°Π» Π±Ρ Π²Π΅ΡΡ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠΉ ΠΊΠΎΠ΄.
Π― Π½Π΅ ΡΠ²Π΅ΡΠ΅Π½, ΡΡΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ Π² ΠΏΠΎΠ»ΡΠ·Ρ ΡΡΠΎΠ³ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π½Π°ΡΡΠΎΠ»ΡΠΊΠΎ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½Ρ Π½Π° Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ, ΡΡΠΎΠ±Ρ ΠΎΠΏΡΠ°Π²Π΄Π°ΡΡ ΠΎΡΠΊΠ°Π· ΠΎΡ ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠΉ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΠΈ.
@makc Π½Π΅ ΡΠΎΠ²ΡΠ΅ΠΌ. ΠΡΠΎ Π±ΡΠ΄Π΅Ρ ΠΎΠ΄ΠΈΠ½ Π±ΠΎΠ»ΡΡΠΎΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎΠΌ ΠΌΠ°Π»Π΅Π½ΡΠΊΠΈΡ Β«Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΡΡ Β» ΡΡΠ½ΠΊΡΠΈΠΉ. ΠΡΠΎ ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈ Π²ΡΡΡΡΡ ΠΈΠ²Π°Π½ΠΈΠΈ Π΄Π΅ΡΠ΅Π²ΡΠ΅Π² ΠΈ Ρ. Π΄. ΠΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΡΠ°ΠΊ:
ΠΡΠ»ΠΈ ΡΡΠΎ ΡΠΎ, ΡΡΠΎ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅ΡΡΡ, ΡΡΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΠΎΠΏΠΈΡΠ°Π½ΠΎ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ. ΠΡΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Three.JS ΠΎΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΠΎ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΡΡΠΈΠ»Ρ Π΄ΠΈΠ·Π°ΠΉΠ½Π° ΠΊ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠΌΡ Π΄ΠΈΠ·Π°ΠΉΠ½Ρ.
@roomle-build Ρ ΠΌ, ΡΠ°ΠΊ Π²Ρ Π³ΠΎΠ²ΠΎΡΠΈΡΠ΅, ΡΡΠΎ ΡΠ²Π΅ΡΡΡΠ²Π°Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ½ΡΡΡ, Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π»ΠΈ ΠΊΠΎΠ΄Ρ Π² ΡΠΎΠΉ ΠΆΠ΅ ΠΎΠ±Π»Π°ΡΡΠΈ Π½Π΅ Π½ΡΠΆΠ½Π° Π²ΡΡ ΠΎΠ±Π»Π°ΡΡΡ, Ρ ΠΎΡΠΎΡΠΎ.
yes rollup ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ, ΠΊΠ°ΠΊ Π²ΡΠ΅ ΠΈΠΌΠΏΠΎΡΡΡ ΡΠΎΠΎΡΠ½ΠΎΡΡΡΡΡ Π΄ΡΡΠ³ Ρ Π΄ΡΡΠ³ΠΎΠΌ, ΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ Π²ΡΡΡΡΡ ΠΈΠ²Π°Π½ΠΈΠ΅ Π΄Π΅ΡΠ΅Π²ΡΠ΅Π², ΡΡΡΡΠ°Π½Π΅Π½ΠΈΠ΅ Π½Π΅ΡΠ°Π±ΠΎΡΠ°ΡΡΠ΅Π³ΠΎ ΠΊΠΎΠ΄Π° ΠΈ Ρ. Π΄. ΠΠΎΠ²ΡΠ΅ Π²Π΅ΡΡΠΈΠΈ rollup ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ Β«ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ°ΡΠΈΡΒ» ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΡΡΠ³ΠΈΡ ΠΏΡΠΈΡΡΠ½ΡΡ Π²Π΅ΡΠ΅ΠΉ. ΠΠΎ ΡΠ΅ΠΊΡΡΠ°Ρ ΡΡΡΡΠΊΡΡΡΠ° ΠΏΡΠΎΠ΅ΠΊΡΠ° Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π²ΡΠ΅ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π° ΡΡΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ.
ΠΡ Π³ΠΎΠ²ΠΎΡΠΈΡΠ΅ ΠΎ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Π΅ ΠΊ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠΌΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Ρ (ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ), Π° Π½Π΅ ΠΊ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΠΎ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Ρ (ΠΎΠ±ΡΠ΅ΠΊΡ ΠΈΠΌΠ΅Π΅Ρ ΡΡΠ½ΠΊΡΠΈΠΈ-ΡΠ»Π΅Π½Ρ). ΠΡΠΎ ΡΠ΅Π°Π»ΡΠ½Π°Ρ Π²Π΅ΡΡ, Π½ΠΎ, ΡΡΠΈΡΡΠ²Π°Ρ, ΡΡΠΎ Three.JS ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΠΎ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½, ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠ°ΠΊΠΎΠ³ΠΎ ΡΠΈΠΏΠ° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΡΠ²Π»ΡΠ΅ΡΡΡ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ Π±ΠΎΠ»ΡΡΠΎΠΉ, ΠΈ ΠΎΠ½ ΡΠ»ΠΎΠΌΠ°Π» Π±Ρ Π²Π΅ΡΡ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠΉ ΠΊΠΎΠ΄.
Π― Π½Π΅ Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ ΡΡΠΈ Π΄Π²Π΅ ΠΏΠ°ΡΠ°Π΄ΠΈΠ³ΠΌΡ ΠΈΡΠΊΠ»ΡΡΠ°ΡΡ Π΄ΡΡΠ³ Π΄ΡΡΠ³Π°. Π― Π΄ΡΠΌΠ°Ρ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΌΠ΅ΡΠΈΠ²Π°ΡΡ ΠΈ ΡΠΎΡΠ΅ΡΠ°ΡΡ ΡΡΠΈ Π΄Π²Π΅ ΠΏΠ°ΡΠ°Π΄ΠΈΠ³ΠΌΡ. Π― ΡΠ°ΠΊΠΆΠ΅ Π½Π΅ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Ρ ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ Π½Π° ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅. Π― ΠΏΡΠΎΡΡΠΎ Ρ
ΠΎΡΠ΅Π» ΠΎΠΏΠΈΡΠ°ΡΡ ΡΠΏΠΎΡΠΎΠ± ΠΈΠ·Π±Π°Π²Π»Π΅Π½ΠΈΡ ΠΎΡ ΡΠΈΠΊΠ»ΠΈΡΠ΅ΡΠΊΠΎΠΉ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ. ΠΡ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡΡ ΠΌΠ΅ΡΠΎΠ΄ multiplyMatrices
ΠΊ ΠΎΠ±ΡΠ΅ΠΊΡΡ Math
. ΠΠΎ Π΅ΡΠ»ΠΈ ΠΊΡΠΎ-ΡΠΎ ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΡΠ²Π°Π΅Ρ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠ΅ Π²Π΅ΡΠΈ, ΠΈΠΌΠ΅Π΅Ρ ΡΠΌΡΡΠ» ΠΏΠΎΠ΄ΡΠΌΠ°ΡΡ ΠΎΠ± ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ ES6. ΠΠΎ, ΠΊΠ°ΠΊ Ρ ΡΠΆΠ΅ ΡΠΊΠ°Π·Π°Π», Ρ Π½Π΅ ΡΠΊΡΠΏΠ΅ΡΡ ΠΏΠΎ ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠΉ Π±Π°Π·Π΅ Three.js, ΠΈ ΡΡΠΎ Π±ΡΠ»Π° ΠΏΡΠΎΡΡΠΎ ΠΌΡΡΠ»Ρ, ΠΊΠ°ΠΊ ΡΡΡΡΠ°Π½ΠΈΡΡ ΡΠΈΠΊΠ»ΠΈΡΠ΅ΡΠΊΡΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ. Π― Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ Three.js β ΠΎΡΠ»ΠΈΡΠ½ΡΠΉ ΠΏΡΠΎΠ΅ΠΊΡ Ρ ΠΎΡΠ»ΠΈΡΠ½ΠΎΠΉ ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠΉ Π±Π°Π·ΠΎΠΉ, ΠΈ Ρ Π½Π΅ Ρ
ΠΎΡΡ Π²ΠΎΡΡΠ°ΡΡ. Π’Π°ΠΊ ΡΡΠΎ Π½Π°Π΄Π΅ΡΡΡ, Π½ΠΈΠΊΡΠΎ Π½Π΅ ΠΎΠ±ΠΈΠ΄ΠΈΡΡΡ Π½Π° ΠΌΠΎΠΈ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ π
Π― Π½Π΅ ΡΠ²Π΅ΡΠ΅Π½, ΡΡΠΎ ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΎΠ±ΡΡΠΆΠ΄Π°ΡΡ Π΄ΠΈΠ·Π°ΠΉΠ½Π΅ΡΡΠΊΠΈΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π² Π²ΡΠΏΡΡΠΊΠ΅. Π£ Π²Π°Ρ Π΅ΡΡΡ ΠΌΠ΅ΡΡΠΎ, Π³Π΄Π΅ ΡΠ°ΠΊΠΈΠ΅ Π²Π΅ΡΠΈ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡ Π»ΡΡΡΠ΅?
ΠΡΡΠ°ΡΠΈ, gl-matrix β ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½Π°Ρ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠ°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°: https://github.com/toji/gl-matrix/tree/master/src/gl-matrix .
@roomle-ΡΠ±ΠΎΡΠΊΠ°
Π Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ Π²ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΏΡΠΈΠΊΡΠ΅ΠΏΠ»Π΅Π½Ρ Β«ΠΊΠ°ΠΊ Π±Ρ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΒ».
ΠΠ°ΠΊ ΠΆΠ΅ ΡΠ°ΠΊ?
@mrdoob Π― ΡΡΠΈΡΠ°Ρ, ΡΡΠΎ Ρ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΌ Π΄ΠΈΠ·Π°ΠΉΠ½ΠΎΠΌ gl-matrix ΠΊΠ°ΠΆΠ΄Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ, ΡΠΊΠ°ΠΆΠ΅ΠΌ, vec3 (Π² ΡΠ°ΠΉΠ»Π΅ vec3, Π½Π° ΠΊΠΎΡΠΎΡΡΠΉ Ρ ΡΡΡΠ»Π°Π»ΡΡ Π² ΡΠ²ΠΎΠ΅ΠΌ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΌ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ) ΡΠΊΡΠΏΠΎΡΡΠΈΡΡΠ΅ΡΡΡ ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡΠ°Π»ΡΠ½ΠΎ. ΠΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²Π°ΠΌ Π²ΡΠ±ΠΈΡΠ°ΡΡ, ΠΊΠ°ΠΊΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ. ΠΠ°ΠΌ Π½Π΅ Π½ΡΠΆΠ½ΠΎ Π±ΡΠ°ΡΡ Ρ ΡΠΎΠ±ΠΎΠΉ Π²ΡΠ΅ vec3.
ΠΠ°ΠΊ ΠΈ Π² ΡΠ»ΡΡΠ°Π΅ Ρ Three.JS, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ½ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΠΎ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ Π΄ΠΈΠ·Π°ΠΉΠ½, Π²ΡΠ΅ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π΄Π»Ρ Vector3 ΠΏΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½Ρ ΠΊ ΠΏΡΠΎΡΠΎΡΠΈΠΏΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Vector3, ΠΈ Π²Ρ ΠΈΠΌΠΏΠΎΡΡΠΈΡΡΠ΅ΡΠ΅ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ°ΠΌ ΠΊΠ»Π°ΡΡ Vector3.
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π² Three.JS ΠΈΠΌΠΏΠΎΡΡΠΈΡΡΡΡΡΡ ΡΠ΅Π»ΡΠ΅ ΠΊΠ»Π°ΡΡΡ, ΡΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ ΠΏΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠΌ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π΅ Π²Ρ ΠΈΠΌΠΏΠΎΡΡΠΈΡΡΠ΅ΡΠ΅ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ.
(ΠΡΠ΅ ΠΎΠ΄Π½Π° ΠΎΡΠ΅Π½Ρ ΠΏΠΎΠ»Π΅Π·Π½Π°Ρ Π²Π΅ΡΡ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ gl-matrix Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ Π²ΡΠ΅ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ Π΄ΡΡΠ³ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ, @toji Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ Π²ΡΡΡΠΎΠΈΠ» ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ Π²Π΅ΡΡΠΈΡ Π²ΡΠ΅ΠΉ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΠΊΠΈ Π² ΠΊΠ°ΠΆΠ΄ΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ. ΠΠ΅ΡΠΎΡΡΠ½ΠΎ, ΡΡΠΎ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎ Ρ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ ΡΠΊΠΎΡΠΎΡΡΠΈ. Π½ΠΎ ΡΡΠΎ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΡΠΎΠΌΡ, ΡΡΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ ΡΠ»ΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ.)
Π― Π½Π΅ Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΡΠ΅ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²Π°ΡΡ ΡΡΡ ΡΠ°ΡΡΡ Three.JS, Π·Π° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΈΠ·Π±Π°Π²Π»Π΅Π½ΠΈΡ ΠΎΡ Π»ΡΠ±ΡΡ ΡΡΡΠ»ΠΎΠΊ Π² /math Π½Π° Π΄ΡΡΠ³ΠΈΠ΅ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΈ Π² three.js. ΠΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠ°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΠΌΠ°Π»Π°, ΠΈ Π² ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π΅ Π²ΡΠ΅ΠΌΡ ΠΎΠ½Π° Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΏΠΎΡΠ²Π»ΡΠ΅ΡΡΡ Π² ΠΌΠΎΠΈΡ ΡΠ΅ΡΡΠ°Ρ ΠΏΠΎ ΠΏΡΠΎΡΠΈΠ»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ. ΠΠ°, ΠΎΠ½ Π½Π΅ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π΅Π½, Π½ΠΎ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π±Π»ΠΈΠ·ΠΎΠΊ, ΡΠΎΡ ΡΠ°Π½ΡΡ ΡΠ΄ΠΎΠ±ΠΎΡΠΈΡΠ°Π΅ΠΌΠΎΡΡΡ ΠΈ ΠΏΡΠΎΡΡΠΎΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ.
@bhouston ΠΠΎΠ½ΡΠ». ΠΠΎΠ»ΡΡΠΎΠ΅ ΡΠΏΠ°ΡΠΈΠ±ΠΎ Π·Π° ΠΎΠ±ΡΡΡΠ½Π΅Π½ΠΈΠ΅! π
Π― ΠΏΡΠΎΡΡΠΎ Ρ
ΠΎΡΠ΅Π» ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΡ ΡΠ΅ΠΌΡ. ΠΠΎ Ρ Ρ
ΠΎΡΡ Π²Π΅ΡΠ½ΡΡΡΡΡ ΠΎΡ importing function vs importing classes
ΠΊ ΡΠ΅ΠΌΠ΅ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΡ cyclic dependencies
. (Π’Π°ΠΊΠΆΠ΅ Ρ Π½Π΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ, ΠΏΠΎΡΠ΅ΠΌΡ import { someFunction } from 'SomeModule'
ΠΌΠ΅Π½Π΅Π΅ ΡΠ΅ΠΌΠΎΠ½ΡΠΎΠΏΡΠΈΠ³ΠΎΠ΄Π΅Π½, ΡΠ΅ΠΌ import SomeClass from 'SomeModule'
, Π½ΠΎ ΡΡΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎ Π½Π΅ ΡΠ΅ΠΌΠ° Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π²ΡΠΏΡΡΠΊΠ°/ΡΠ°Π·Π³ΠΎΠ²ΠΎΡΠ°.
Π§ΡΠΎΠ±Ρ ΡΡΡΡΠ°Π½ΠΈΡΡ ΡΠΈΠΊΠ»ΠΈΡΠ΅ΡΠΊΡΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ, ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π±Ρ ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ ΠΊΠ»Π°ΡΡ. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡΡ ΠΌΠ΅ΡΠΎΠ΄ multiplyMatrices
ΠΊ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΌΡ ΠΊΠ»Π°ΡΡΡ ΠΈΠ»ΠΈ ΡΠΎΠ·Π΄Π°ΡΡ ΠΊΠ»Π°ΡΡ-ΠΌΠ½ΠΎΠΆΠΈΡΠ΅Π»Ρ Ρ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ multiplyMatrices
. ΠΠΎ, ΠΊΠ°ΠΊ Ρ ΡΠΆΠ΅ Π³ΠΎΠ²ΠΎΡΠΈΠ», Ρ Π½Π΅ ΡΠ²Π΅ΡΠ΅Π½, ΡΡΠΎ Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΡΠ΄Π°Π»ΡΡΡ ΡΠΈΠΊΠ»ΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ. ΠΡΠ»ΠΈ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΈΠ½ΡΡΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π½Π΅ ΡΠ΄Π°Π»ΡΡΡ ΠΈΡ
, Ρ Π΄ΡΠΌΠ°Ρ, ΡΡΠΎΡ Π²ΠΎΠΏΡΠΎΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π·Π°ΠΊΡΡΡ π
ΠΠΎΡΠ»Π΅ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΡ #19137 ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΊΡΡΡΡ π.
@ Mugen87 Π²Π°Ρ, 5 Π»Π΅Ρ! ΠΏΠΎΠ·Π΄ΡΠ°Π²Π»ΡΡ Ρ ΡΠ΅ΠΌ, ΡΡΠΎ Π½Π°ΠΊΠΎΠ½Π΅Ρ ΠΏΠΎΠΏΠ°Π» Π² ΡΠ΅Π»Ρ :fire: :clap:
ΠΠ½Π΅ ΡΠΎΠ³Π΄Π° Π±ΡΠ»ΠΎ ΠΎΡΠ΅Π½Ρ Π²Π΅ΡΠ΅Π»ΠΎ Π΄Π΅Π»Π°ΡΡ ΡΡΠΈ Π³ΡΠ°ΡΠΈΠΊΠΈ :smile_cat:
Π‘Π°ΠΌΡΠΉ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ
@ Mugen87 Π²Π°Ρ, 5 Π»Π΅Ρ! ΠΏΠΎΠ·Π΄ΡΠ°Π²Π»ΡΡ Ρ ΡΠ΅ΠΌ, ΡΡΠΎ Π½Π°ΠΊΠΎΠ½Π΅Ρ ΠΏΠΎΠΏΠ°Π» Π² ΡΠ΅Π»Ρ :fire: :clap:
ΠΠ½Π΅ ΡΠΎΠ³Π΄Π° Π±ΡΠ»ΠΎ ΠΎΡΠ΅Π½Ρ Π²Π΅ΡΠ΅Π»ΠΎ Π΄Π΅Π»Π°ΡΡ ΡΡΠΈ Π³ΡΠ°ΡΠΈΠΊΠΈ :smile_cat: