рд╕реБрдирд┐рдпреЗ рд╕рдм рд▓реЛрдЧред
@kumavis рдФрд░ рдореИрдВ THREE.js рдХреЛ рдмреНрд░рд╛рдЙрдЬрд░рд╛рдЗрдЬрд╝ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдкрд░ рд▓реЗ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреБрд╢рд▓ рддрд░реАрдХрд╛ рдЦреЛрдЬрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдореЗрдВ рдХрдбрд╝реА рдореЗрд╣рдирдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред рд╣рдордиреЗ рдЕрдЪреНрдЫреА рдкреНрд░рдЧрддрд┐ рдХреА рд╣реИ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╕рднреА рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдмреНрд░рд╛рдЙрдЬрд░рд╛рдЗрдЬ рдмрд┐рд▓реНрдб рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЧрд▓реНрдк рдХреЗ рд╕рд╛рде рддреАрди.рдорд┐рди.рдЬреЗрдПрд╕ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИрдВред
рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдЙрджрд╛рд╣рд░рдг рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдо рдХреЗ рд╡рд┐рдкрд░реАрдд рдмреНрд░рд╛рдЙрдЬрд░рд╛рдЗрдЬрд╝ рдЪрдХреНрд░реАрдп рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЛ рд╕рдВрднрд╛рд▓ рдирд╣реАрдВ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рддреАрди.рдЬреЗрдПрд╕ рдореЗрдВ рдХрдИ рд╣реИрдВред
рдореИрдВрдиреЗ рдпрд╣рд╛рдВ рдирд┐рд░реНрднрд░рддрд╛ рд╕рдВрдмрдВрдзреЛрдВ рдХреЛ рджрд░реНрд╢рд╛рддреЗ рд╣реБрдП рдПрдХ рдЗрдВрдЯрд░реЗрдХреНрдЯрд┐рд╡ рдЧреНрд░рд╛рдл рдмрдирд╛рдпрд╛ рд╣реИред
рдЬрдм рддрдХ рдпреЗ рдЙрд▓рдЭ рдирд╣реАрдВ рдЬрд╛рддреЗ, рд╣рдо THREE.js рдХреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░рд╛рдЗрдЬрд╝ рдмрд┐рд▓реНрдб рдореЗрдВ рдирд╣реАрдВ рд▓реЗ рдЬрд╛ рд╕рдХреЗрдВрдЧреЗред
рдореИрдВ рдЗрд╕реЗ browserify рдХреА рдХрдореА рдирд╣реАрдВ рдорд╛рдирддрд╛, рдмрд▓реНрдХрд┐ THREE.js рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдорд╕реНрдпрд╛ рдорд╛рдирддрд╛ рд╣реВрдВред рд╕рд░реНрдХреБрд▓рд░ рдирд┐рд░реНрднрд░рддрд╛ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдореЗрдВ рдПрдХ рдмреБрд░реА рдЪреАрдЬ рд╣реИ, рдФрд░ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдЬрдиреНрдо рджреЗрддреА рд╣реИред
рдпрд╣ рдХрд╛рдлреА рдЙрд▓рдЭреА рд╣реБрдИ рдЧрд╛рдБрда рд╣реИ
http://jsbin.com/medezu/2/edit?html ,js,output
@coballast рдХреНрдпрд╛ рдЖрдк рдЙрд╕ рдХреЛрдб рдХреЛ рдкреЛрд╕реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЖрдкрдиреЗ рдирд┐рд░реНрднрд░рддрд╛ рдЬреЗрд╕рди рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдерд╛?
рдмрд╕ рдкрд╣рд▓реЗ рд╕реЗ рддреИрдпрд╛рд░ рддреАрди.min.js рдлрд╝рд╛рдЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред Browserfy рдХреЗ рднреАрддрд░ рддреАрди.js рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЖрдк рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд▓рд╛рдн рдХреЗ рдЕрдкрдиреЗ рдЬреАрд╡рди рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рдХрдард┐рди рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВред
рдореИрдВ рдЕрдиреБрднрд╡ рд╕реЗ рдмреЛрд▓рддрд╛ рд╣реВрдВ, рдЗрд╕рдореЗрдВ рд╣рдо рддреАрди.рдЬреЗрдПрд╕ рдХреЗ рдПрдирдкреАрдПрдо рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд╣рдо рдЗрд╕реЗ рдХреЗрд╡рд▓ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдкреИрдХреЗрдЬ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдХреЙрдордирдЬреЗрдПрд╕ рд╕реНрдЯрд╛рдЗрд▓ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рд▓рдкреЗрдЯрддреЗ рд╣реИрдВред рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдмреНрд░рд╛рдЙрдЬрд╝рд░рдлреА рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░реЗрдЧрд╛ рдФрд░ рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧ рдЗрд╕реЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВред
рдЗрд╕ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдЧрд╛рдБрда рдХреЛ рдЦреЛрд▓рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИред
@ рдХреБрдорд╛рд╡рд┐рд╕ рдореИрдВрдиреЗ рдЕрднреА рдирд┐рд░реНрднрд░рддрд╛ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рд╣реИред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдиреЗ рдлрд┐рд░ рдЧреНрд░рд╛рдл рдЙрддреНрдкрдиреНрди рдХрд┐рдпрд╛:
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 рдЗрд╕рдХреЗ рддреАрди рдХреЗ рд╕реНрд╡рд╛рд╕реНрдереНрдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╣реИред рдЬреЗрдПрд╕ рдХреЛрдбрдмреЗрд╕
рдореИрдВ рд╕рд┐рд░реНрдл рдЗрддрдирд╛ рдЬрд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдЧрдгрд┐рдд рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ, рдЬрд┐рд╕рдХреА рдореИрдВрдиреЗ рдХрд╛рдлреА рдорджрдж рдХреА рд╣реИ, рд╕рднреА рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдЪрдХреНрд░реАрдп рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рдЖрджрд░реНрд╢ рд╣реИрдВред рдХреНрдпреЛрдВрдХрд┐ рдореИрдЯреНрд░рд┐рдХреНрд╕ 4 рдкрд░ рдлрд╝рдВрдХреНрд╢рди рд╡реЗрдХреНрдЯрд░ 3 рдХреЛ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рд╡реЗрдХреНрдЯрд░ 3 рдореИрдЯреНрд░рд┐рдХреНрд╕ 4 рджреНрд╡рд╛рд░рд╛ рд░реВрдкрд╛рдВрддрд░рд┐рдд рд╣реЛрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдЧрдгрд┐рдд рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рд╕рднреА рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЛ рдПрдХ рддрд░рд╣ рд╕реЗ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдЙрд╕ рд╣рд┐рд╕реНрд╕реЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рдкрд░реЗрд╢рд╛рдиреА рд╣реЛрдЧреАред
рдЕрдм рдореИрдВ рдЗрд╕ рдмрд╛рдд рдХреА рд╡рдХрд╛рд▓рдд рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдЧрдгрд┐рдд рдкреБрд╕реНрддрдХрд╛рд▓рдп рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдХрд┐рд╕реА рдЕрдиреНрдп рднрд╛рдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рд╣реИ - рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрд╕ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рд▓реАрдХ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдЙрд╕ рдЕрд░реНрде рдореЗрдВ рдореИрдВ рдЕрдВрддрд░-рдореЙрдбреНрдпреВрд▓ рдЪрдХреНрд░реАрдп рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореЙрдбреНрдпреВрд▓ рдХреЗ рднреАрддрд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рдмреАрдЪ рд╕рднреА рдЪрдХреНрд░реАрдп рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдирд╣реАрдВ рд╣рдЯрд╛ рд░рд╣рд╛ рд╣реВрдВред
рдпрд╣рд╛рдБ рдПрдХ рдорд╛рдорд▓рд╛ рд╣реИ рдЬреЛ рд╕реВрдХреНрд╖реНрдо рдЬрдЯрд┐рд▓рддрд╛рдУрдВ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред рд╕реНрдкрд╖реНрдЯ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣рд╛рдБ рдореИрдВ рд╕реНрд╡рдпрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдЖрд▓реЛрдЪрдирд╛ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ, рдмрд▓реНрдХрд┐ рджреБрд╖реНрдкреНрд░рднрд╛рд╡реЛрдВ рдХреАред
Vector3
рдФрд░ Matrix4
рдПрдХ рдЪрдХреНрд░реАрдп рдирд┐рд░реНрднрд░рддрд╛ рдмрдирд╛рддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдХрдИ рдкреНрд░рдХрд╛рд░ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдПрдХ рджреВрд╕рд░реЗ рдХреЛ рдЗрдирдкреБрдЯ рдпрд╛ рдЖрдЙрдЯрдкреБрдЯ рдкреНрд░рдХрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рджреЛрдиреЛрдВ рдХреЛ рдереНрд░реА.рдЬреЗрдПрд╕ рдХреА рд╕рд╛рдорд╛рдиреНрдп рд╢реИрд▓реА рдХреЗ рд╕рд╛рде рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдХреНрд░реИрдЪ рд╡реИрд░рд┐рдПрдмрд▓ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдИрдЖрдИрдПрдлрдИ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ред
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
рдЕрднреА рддрдХ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИред рдЕрдм рд╕реНрдХреНрд░реИрдЪ рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕ рдХрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рддрд╛рддреНрдХрд╛рд▓рд┐рдХрддрд╛ рд╕рдордп рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИред рдпрд╣рд╛рдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЯреЗрдХрдЕрд╡реЗ рдпрд╣ рд╣реИ рдХрд┐ рд╡рд░реНрддрдорд╛рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЗрд╕ рдХреНрд░рдо рдкрд░ рдЯрд┐рдХрд╛ рд╣реИ рдХрд┐ рдмрд┐рд▓реНрдб рд╕рд┐рд╕реНрдЯрдо рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдПрдХ рд╕рд╛рде рдЬреЛрдбрд╝рддрд╛ рд╣реИред рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рджреВрд░ рдХрд╛ рдпреБрдЧреНрдорди рд╣реИ, рдФрд░ рдмрд┐рд▓реНрдб рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдпрд╛ рдлрд╛рдЗрд▓реЛрдВ рдХрд╛ рдирд╛рдо рдЗрд╕ рддрд░рд╣ рд╕реЗ рдмрджрд▓рдирд╛ рдХрд┐ рдпрд╣ рдХреЙрдиреНрд╕реИрдЯ рдСрд░реНрдбрд░ рдХреЛ рдмрджрд▓ рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдХреЛрдИ рд╕реНрдкрд╖реНрдЯ рдХрдиреЗрдХреНрд╢рди рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред
рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рддрд░реАрдХрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЧрд╛рдБрда рдмрдЧ рдореЗрдВ рдкреНрд░рдХрдЯ рд╣реЛрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЬрдмрдХрд┐ рд╣рдо рдЗрд╕ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдореБрджреНрджреЗ рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдПрдкреАрдЖрдИ рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдмреНрд░реЗрдХрд┐рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
рд╣рдореНрдо... рдореИрдВрдиреЗ ILM рдХреЗ C++ рдЧрдгрд┐рдд рдкреБрд╕реНрддрдХрд╛рд▓рдп рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реА, рдЬрд┐рд╕реЗ рдореИрдВ рдЧрдгрд┐рдд рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╕реНрд╡рд░реНрдг рдорд╛рдирдХ рдорд╛рдирддрд╛ рд╣реВрдБред рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд░реВрдк рд╕реЗ, рд╡реЗ рдЪрдХреНрд░реАрдп рдирд╣реАрдВ рд╣реИрдВред рдЙрдирдХреЗ рдкрд╛рд╕ рдореВрд▓ рд░реВрдк рд╕реЗ рд╕рд░рд▓ рд╕реЗ рдЬрдЯрд┐рд▓ рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреНрд░рдо рд╣реИ рдЬрд┐рд╕реЗ рд╡реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдмрд╣реБрдд рд╕рд╛рд╡рдзрд╛рдиреА рд╕реЗ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:
https://github.com/openexr/openexr/tree/master/IlmBase/Imath
рдЧрдгрд┐рдд рдФрд░ рдлрд┐рд░ Vec рд╕рдмрд╕реЗ рд╕рд░рд▓ рд▓рдЧрддрд╛ рд╣реИред
рдирд┐рд░реНрднрд░рддрд╛ рдЧреНрд░рд╛рдл рдкрд░ рдФрд░ рдЕрд╡рд▓реЛрдХрди:
Material
s рдореЗрдВ рдЙрдирдХреЗ рдЖрдзрд╛рд░ рд╡рд░реНрдЧ рдХреЗ рд╕рд╛рде рджреЛ-рддрд░рдлрд╝рд╛ рд╡рд┐рд╡рд░рдг рд╣реИрдВ
рджреЗрдЦрдиреЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рд▓реЗрдХрд┐рди рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ Geometry
s рдХрд╛ рдЖрдзрд╛рд░ рд╡рд░реНрдЧ рдкрд░ рдЕрдЪреНрдЫрд╛ рдПрдХрддрд░рдлрд╛ рд╡рд┐рд╡рд░рдг рд╣реИ
Light
s рдФрд░ Camera
s рдХреА рд╕реНрдерд┐рддрд┐ рд╕рдорд╛рди рд╣реИ - рдЙрдирдХреЗ рдЖрдзрд╛рд░ рд╡рд░реНрдЧ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдЕрдЪреНрдЫрд╛ рд╣реИ, рд▓реЗрдХрд┐рди Object3D
рдХреА рдирд┐рд░реНрднрд░рддрд╛ _рдЙрди рдкрд░_ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд▓рдЧрддреА рд╣реИред
Curve
s Path
s Line
s рдЕрдЪреНрдЫреЗ рд▓рдЧрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди Shape
рдереЛрдбрд╝рд╛ рдЙрд▓рдЭрд╛ рд╣реБрдЖ рд╣реИред
@ рдХреЛрдмрд▓рд╛рд╕реНрдЯ рдзрдиреНрдпрд╡рд╛рдж! рдпрд╣ рдорд╣рд╛рди рдЕрдВрддрд░реНрджреГрд╖реНрдЯрд┐ рд╣реИред
рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЦреБрдж рдХреЛ рдЬреЛрдбрд╝рдирд╛ :)
рдмреАрдЯреАрдбрдмреНрд▓реНрдпреВ, рдореИрдВрдиреЗ рдЙрд╕ рддрд░рд╣ рд╕реЗ рджреЗрдЦрд╛ рд╣реИ рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рд╕рд╛рдордЧреНрд░реА MeshDepthMaterial рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдПред рдпрд╣ рд╕рд░рд▓ рд╣реИ
if ( this instanceof THREE.MeshDepthMaterial )
рдЬрд┐рд╕реЗ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рддреБрдЪреНрдЫ рд╣реИ
if ( this.type == 'MeshDepthMaterial' )
рдФрд░ рд╡реЛрдЗрд▓рд╛ - рдХреЛрдИ рдирд┐рд░реНрднрд░рддрд╛ рдирд╣реАрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдбрд░рд╛рд╡рдиреЗ рдЧреНрд░рд╛рдл рдХрд╛ рдЖрдзрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╕рдорд╛рди рд╕реНрддрд░ рдХреА рд╕рдорд╕реНрдпрд╛ рд╣реИред
рдордЬреЗрджрд╛рд░ рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдирд┐рд░реНрднрд░рддрд╛ рд╕рд┐рдВрдЧрд▓ рдЯреВJSON рдореЗрдердб рдореЗрдВ рд╣реЛрддреА рд╣реИред рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ, рдХреНрдпрд╛ рдЗрд╕реЗ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рд╕рд┐рд░реНрдл 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
рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд╣рдореЗрдВ рдЙрд╕ рдХреЛрдб рдХреЛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд░реНрдЧ рдореЗрдВ рд╣реА рд▓реЗ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдмрд╣реБрдд рд╕рд╛рд░реА рдЧрд╛рдВрдареЛрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ред
рд╕рд┐рд░реНрдл рдпрд╣ рдХрд╣рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдХрд┐ рдПрдПрдордбреА рдкрд░рд┐рдкрддреНрд░ рд╕рдВрджрд░реНрднреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, ES6 рдореЙрдбреНрдпреВрд▓ рдХрд░рддрд╛ рд╣реИ https://github.com/ModuleLoader/es6-module-loader/wiki/Circular-References-&-Bindings
рдореИрдВ рдирд┐рд░реНрднрд░рддрд╛ рд╕рдорд╛рдзрд╛рди рд╕рдорд╕реНрдпрд╛ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдЙрддреНрд╕реБрдХ рд╣реВрдВ (рдЬрд┐рд╕реЗ рдореЙрдбреНрдпреВрд▓ рд╕рд┐рд╕реНрдЯрдо рд▓реЛрдбрд░ рдЬреИрд╕реЗ рд╕рд┐рд╕реНрдЯрдо.рдЬреЗрдПрд╕ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ), рдереНрд░реА.рдЬреЗрдПрд╕ рдореЗрдВ рд╕рд░реНрдХреБрд▓рд░ рд░реЗрдлрд░реЗрдВрд╕рд┐рдВрдЧ рд╕реЗ рдХреМрди рд╕реЗ рдореБрджреНрджреЗ рдмрдирддреЗ рд╣реИрдВ?
рд╕реМрднрд╛рдЧреНрдп рд╕реЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕ рдкрд░ рдЪрд░рдгреЛрдВ рдореЗрдВ рд╣рдорд▓рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкрд┐рдЫрд▓реЗ рд░рд┐рд▓реАрдЬ рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдПрдкреАрдЖрдИ рдмреНрд░реЗрдХрд┐рдВрдЧ рдмрджрд▓рд╛рд╡ рдХрд┐рдП рдЧрдП рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рд╕рд╡рд╛рд▓ рд╕реЗ рдмрд╛рд╣рд░ рд╣реИред
instanceof
рдорд╛рдорд▓реЛрдВ (рд╢рд╛рдпрдж рдмрд╣реБрдордд) рдХреЗ рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рддреЛрдбрд╝рдиреЗ рдХреЗ рд╕рд╛рде рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдореИрдВ рдпрд╣рд╛рдВ рд╕рджрд╕реНрдпрддрд╛ рднреА рд▓реЗ рд░рд╣рд╛ рд╣реВрдВред рдЖрдЗрдП рдпрд╣рд╛рдВ рдХрджрдо рд╕реЗ рдХрджрдо рдорд┐рд▓рд╛рдХрд░ рдЪрд▓рддреЗ рд╣реИрдВред
рдореИрдВ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ рд╣рдореЗрдВ рд╕рд╛рдордЧреНрд░реА рдХреА рддрд░рд╣ рд╕рднреА рдЕрдирд╛рд╡рд╢реНрдпрдХ рдЪрдХреНрд░реАрдп рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рд╣рдЯрд╛ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдореИрдВ @bhouston рд╕реЗ рднреА рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ рдЧрдгрд┐рдд рдкреБрд╕реНрддрдХрд╛рд▓рдп рдПрдХ рджреВрд╕рд░реЗ рдкрд░ рдмрд╣реБрдд рдирд┐рд░реНрднрд░ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдмрд╛рддрдЪреАрдд рд╡рд╣ рд╣реИ рдЬреЛ рдЧрдгрд┐рдд рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рдЙрдкрдпреЛрдЧреА рдмрдирд╛рддреА рд╣реИред
рдХреНрдпрд╛ рдХреЛрдИ рдЖрд╕рд╛рди рд▓реЛрдЧреЛрдВ рдХрд╛ рдирдХреНрд╢рд╛ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИ ?? рдХрдо рдЪрдХреНрд░реАрдп рдирд┐рд░реНрднрд░рддрд╛ рд╣реЛрдирд╛ рд╣рдореЗрд╢рд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ рдпрджрд┐ рдпрд╣ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдмрд╛рдзрд╛ рдирд╣реАрдВ рдбрд╛рд▓рддрд╛ рд╣реИред рд╣рдо рдмрд╛рдж рдореЗрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рджреВрд╕рд░реЛрдВ рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИред
@ zz85 рдореИрдВрдиреЗ рдкрд░рд┐рдкрддреНрд░ рдирд┐рд░реНрднрд░рддрд╛ рдХреА рд╕рдорд╕реНрдпрд╛ рдореЗрдВ рднреА рднрд╛рдЧ рд▓рд┐рдпрд╛ рд╣реИред рдпрд╣ рдЬреНрдпрд╛рджрд╛рддрд░ рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ рдЬрдм рд╣рдо рд╕рд░реНрдХреБрд▓рд░ рд╕рдВрджрд░реНрднрд┐рдд рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рдЕрдВрджрд░ рдХреБрдЫ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдкреВрд░реНрд╡-рдирд┐рд░реНрдорд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣реЗ рд╣реИрдВред
Material
рдФрд░ Object3D
рдкрд░ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╕рд░реНрдХреБрд▓рд░ рдбрд┐рдкреНрд╕ рдХреЛ рд╕рд╛рдлрд╝ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПредрдпрд╣рд╛рдБ Mesh
рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рдмрд╛рд╣рд░реА рдЕрд╡рддрд░рдг рд╣реЛрдВ рд▓реЗрдХрд┐рди рдмрд╣реБрдд рдЕрдзрд┐рдХ рдкрд╛рдЧрд▓ рди рд╣реЛрдВред
Object3D
рдФрд░ Geometry
рдХреЗ рд╕рд╛рде рдкрд░рд┐рдкрддреНрд░ред рдЙрдкрд░реЛрдХреНрдд рдкреАрдЖрд░ рдореЗрдВ Object3D -> Mesh
рд╕рдВрджрд░реНрдн рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред Mesh -> Geometry
рд╕рдВрджрд░реНрдн рдареАрдХ рд╣реИ, b/c Mesh
Geometry
рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕реЗ рдЕрднреА рднреА b/c рд╕реЗ рддреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рд╡рд░реНрдЧ-рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡реНрдпрд╡рд╣рд╛рд░ ( Geometry
/ BufferGeometry
) рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдк-рдЪреЗрдХрд┐рдВрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИред
рдЬрд╣рд╛рдВ рддрдХ Geometry -> Mesh
рд╕рдВрджрд░реНрдн рдХреА рдмрд╛рдд рд╣реИ, рддреЛ рдпрд╣ geometry.mergeMesh( mesh )
рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рд╣реИред Geometry
Mesh
рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдирд┐рдЪрд▓реЗ рд╕реНрддрд░ рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕реЗ mesh.mergeIntoGeometry( geo )
рдХреЗ рд░реВрдк рдореЗрдВ рдЙрд▓рдЯрд╛ рдХрд░ рджреВрдВрдЧрд╛ рдФрд░ mergeMesh
рдХреЛ рд╣рдЯрд╛ рджреВрдВрдЧрд╛ред
рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЛ рдкреАрдЖрд░ рдорд░реНрдЬ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдЗрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдХреЛ рдареАрдХ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдореБрдЭреЗ рдмрддрд╛рдПрдВ рдФрд░ рдореИрдВ рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреЛ рджрд░реНрд╢рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЧреНрд░рд╛рдл рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░реВрдВрдЧрд╛ред
@ рдмреМрд╕реНрдЯрди @ рдЬреАрд░реЛ 3 рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЧрдгрд┐рдд рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рд╕реНрддрд░ рдХреА рдЙрдкрдпреЛрдЧрд┐рддрд╛/рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЪрдХреНрд░реАрдп рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдореИрдВ рдЧрд▓рдд рд╣реЛ рд╕рдХрддрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣рдо рд╡реЗрдХреНрдЯрд░3 рдХреЛ рдмрд╛рдХреА рд╕рд┐рд╕реНрдЯрдо рд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ/рдЕрдирднрд┐рдЬреНрдЮ рдирд╣реАрдВ рд░рдЦ рд╕рдХрддреЗ рдереЗ рдФрд░ рдореИрдЯреНрд░рд┐рдХреНрд╕ 4 рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдореИрдЯреНрд░рд┐рдХреНрд╕ 4 рдХреЛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреЗ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рдереЗ? рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдЕрд╡рдзрд╛рд░рдгрд╛рддреНрдордХ рд░реВрдк рд╕реЗ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдореИрдЯреНрд░рд┐рд╕реЗрд╕ рд╡реЗрдХреНрдЯрд░реЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЖрджреЗрд╢ рд╣реЛрдирд╛ рдмреЗрд╣рддрд░ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рджреБрд░реНрдШрдЯрдирд╛рдУрдВ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдФрд░ рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
@ рдмреМрд╕реНрдЯрди @ рдЬреАрд░реЛ 3 рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдПрдкреАрдЖрдИ рдХреЛ рдмрджрд▓реЗ рдмрд┐рдирд╛ рдРрд╕рд╛ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдореИрдВ рдЪрд╛рд░реЛрдВ рдУрд░ рдкреНрд░рд╣рд╛рд░ рдХрд░реВрдБрдЧрд╛ рдФрд░ рджреЗрдЦреВрдБрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рд╣реИред
рдЧрдгрд┐рдд рдХреА рдмрд╛рдд рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рд╕рднреА "рд╕реНрдХреНрд░реИрдЪ рдкреИрдб" рдПрдХ рд╣реА рд╕реНрдерд╛рди рдкрд░ рдмреИрда рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдореИрдВ рд╢рд░реНрдд рд▓рдЧрд╛рддрд╛ рд╣реВрдВ рдХрд┐ 3js рдХрд╛ рдПрдХ рднреА рдкреНрд░рдпреЛрдЧ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдЧреНрд░рд╛рдл рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдЬрд┐рд╕рдореЗрдВ рд╡реЗрдХреНрдЯрд░ 3 рдФрд░ рдореИрдЯреНрд░рд┐рдХреНрд╕ 4 рджреЛрдиреЛрдВ рдирд╣реАрдВ рд╣реЛрдВрдЧреЗ
рдпрджрд┐ рдХреЛрдИ рд╕рдорд╛рдзрд╛рди рд╣реИ рдЬреЛ рдЧрдгрд┐рдд рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдпрд╛ рдПрдкреАрдЖрдИ рдХреЛ рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИ, рддреЛ рдореИрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реВрдВред
@coblast рдПрдХ рдПрдкреАрдЖрдИ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдЪрдХреНрд░реАрдп рдбреАрдкреА рдХреЛ рд╣рдЯрд╛ рдирд╣реАрдВ рд╕рдХрддрд╛ рд╣реИ, рдмреА/рд╕реА рджреЛрдиреЛрдВ рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рддрд░реАрдХреЛрдВ рдХреЛ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред Vector3
Matrix4
рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛрдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреА рдмрд╛рдд рд╣реИ, рддреЛ рд╣рдорд╛рд░реА рдПрдХрдорд╛рддреНрд░ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╕реНрдХреНрд░реИрдЪ рд╡рд░реНрд░реНрд╕ рдкрд░ рдЗрдВрд╕реНрдЯреЗрдВрдЯреЗрд╢рди рдХреЛ рдХреНрд▓рд╛рд╕-рдбреЗрдлрд┐рдирд┐рд╢рди рдЯрд╛рдЗрдо рд╕реЗ рдмрд╛рд╣рд░ рд▓реЗ рдЬрд╛рдиреЗ рдХреА рд╣реИ (рдкрд╣рд▓реЗ рд░рди рдкрд░ рдЙрдиреНрд╣реЗрдВ рдЗрдВрд╕реНрдЯреЗрдВрдЯ рдХрд░реЗрдВ)ред рдЗрд╕ рддрд░рд╣ рдЖрд▓рд╕реА рдмрдирд╛рдУ ред рдЗрд╕рдХрд╛ API рдпрд╛ perf рдкрд░ рдХреЛрдИ рдкреНрд░рднрд╛рд╡ рдирд╣реАрдВ рдкрдбрд╝реЗрдЧрд╛ред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдмрджрд▓рд╛рд╡ рдареАрдХ рд╣реИрдВред
@ рдХреБрдорд╛рд╡рд┐рд╕ рдЖрд╣! рд╣рд╛рдВред рдЕрдЪреНрдЫрд╛ рдЕрдм рдореИрдВ рд╕рдордЭ рдЧрдпрд╛ред рдпрд╣ рдХрд╛рдлреА рдЖрд╕рд╛рди рд╣реИред
рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░рдгреЛрдВ рд╕реЗ рдЖрд╡рд╢реНрдпрдХ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕рд╛рде рддреАрди рдЫреЛрдЯреЗ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реЛрдиреЗ рдХрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реВрдВ:
var Alert = require('react-bootstrap/lib/Alert');
рдЬреИрд╕реА рдЪреАрдЬреЗрдВ рдХрд░рдиреЗ рджреЗрддрд╛ рд╣реИ рдЬреЛ рдкреНрд░рддреНрдпреЗрдХ рдмреВрдЯрд╕реНрдЯреНрд░реИрдк рдореЙрдбреНрдпреВрд▓ рдХреЛ рдмрдВрдбрд▓ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИредOrbitControls.js
рдЬреЛ рд╕реНрд╡рдпрдВ рдХреЛ THREE.OrbitControls
рдкрд░ рдбрд╛рд▓рддреЗ рд╣реБрдП, рддреАрди рд╡реИрд╢реНрд╡рд┐рдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдЖрдзреБрдирд┐рдХ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдврд╛рдВрдЪреЗ рдореЗрдВ рдПрдХ рд╡рд┐рд░реЛрдзреА рдкреИрдЯрд░реНрди рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдлрд╛рдЗрд▓реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрдЬрд╛рдп, рдирд┐рд░реНрдорд╛рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╡реИрд╢реНрд╡рд┐рдХ рдирд╛рдорд╕реНрдерд╛рди рдкрд░ рддреАрди рдЙрдкрд╕реНрдерд┐рдд рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рддреАрди рднреА рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдРрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ, рд╣рдореЗрд╢рд╛ рддреАрди рдирд╛рдорд╕реНрдерд╛рди рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рддреАрди рдореЙрдбреНрдпреВрд▓ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрджрд░реНрд╢ рдирд╣реАрдВ рд╣реИредрдЦреБрдж рдХреЛ рддреАрди рдкрд░ рд░рдЦрдирд╛ред OrbitControls
рд▓реЗрдХрд┐рди 3js рдореЗрдВ рдХреЛрдб рдХрд╛ рдкреНрд░рддреНрдпреЗрдХ рдЯреБрдХрдбрд╝рд╛ рдРрд╕рд╛ рдХрд░рддрд╛ рд╣реИ?
@DelvarWorld рдиреЗ рд▓рд┐рдЦрд╛:
рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░рдгреЛрдВ рд╕реЗ рдЖрд╡рд╢реНрдпрдХ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕рд╛рде рддреАрди рдЫреЛрдЯреЗ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реЛрдиреЗ рдХрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реВрдВ:
рдореБрдЭреЗ рд▓рдЧрддрд╛ рдерд╛ рдХрд┐ рдЗрд╕реЗ рддреЛрдбрд╝рдирд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рдерд╛, рд▓реЗрдХрд┐рди рдереНрд░реАрдЬреЗрдПрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рд▓рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЕрднреА рд╣реИред рдпрд╣ 3рдбреА рдореЗрдВ рдирдП рд▓реЛрдЧреЛрдВ рджреНрд╡рд╛рд░рд╛ рдЗрд╕ рд░реВрдк рдореЗрдВ рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧреА рд╣реИ рдХрд┐ рдпрд╣ рдЕрднреА рд╣реИ рдФрд░ рдпрд╣ рджреЗрд╡ рдЯреАрдо рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд░рд╣реА рд╣реИред рдЖрдк рдореЙрдбреНрдпреВрд▓ рд╕рд┐рд╕реНрдЯрдо рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд┐рдирд╛ рдереНрд░реАрдЬреЗрдПрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдЬрд┐рдирдореЗрдВ рд╕реЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╣реИрдВ, рдФрд░ рд╡реЗ рд╕рднреА рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдВрдЧрдд рдирд╣реАрдВ рд╣реИрдВред)
@makc рдХреА рддрд░рд╣, рдореИрдВ рднреА @DelvarWorld рдХреЗ рддреАрди рдирд╛рдорд╕реНрдерд╛рдиреЛрдВ рдореЗрдВ рдЪреАрдЬреЛрдВ рдХреЛ рди рд░рдЦрдиреЗ рдХреЗ рд╕реБрдЭрд╛рд╡ рд╕реЗ рд╣реИрд░рд╛рди рд╣реВрдВред
рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рд╡реЗ рдХрд╣рд╛рдБ/рдХреИрд╕реЗ рд╣реЛрдВрдЧреЗ?
рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рд╡реИрд╢реНрд╡рд┐рдХ рд╡рд╕реНрддреБ, рддреАрди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫреЗ рдкреИрдЯрд░реНрди рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЗрд╕рдХреЗ рд╕рднреА рднрд╛рдЧ (рдФрд░ рд╕рдВрднрд╡рддрдГ рдХреБрдЫ рдПрдХреНрд╕рдЯреЗрдВрд╢рди/рдкреНрд▓рдЧрдЗрдиреНрд╕) рд╣реИрдВред
рдореИрдВ @DelvarWorld рд╕реЗ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ рдкреБрдЯ-рдСрди-рдж-рдЧреНрд▓реЛрдмрд▓ рддрдХрдиреАрдХ рдХреЛрдбрдмреЗрд╕ рдХреЗ рд╕реНрд╡рд╛рд╕реНрдереНрдп рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫреА рдирд╣реАрдВ рд╣реИ - рдпрд╣ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╕реВрдХреНрд╖реНрдо рддрд░реНрдХ рд╣реИ b/c рдЗрд╕реЗ рд╡реИрд╢реНрд╡рд┐рдХ рдкрд░ рд░рдЦрдирд╛ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рдХреА рдЫрд┐рдкреА рдирд┐рд░реНрднрд░рддрд╛ рдЧреНрд░рд╛рдл, рдФрд░ рдЕрдиреНрдп рдкреНрд░рдерд╛рдПрдВ рдЬреЛ рд╡реИрд╢реНрд╡рд┐рдХ рдЙрдкрд▓рдмреНрдз рд╣реЛрдиреЗ рд╕реЗ рдирд┐рдХрд▓рддреА рд╣реИрдВред
рд▓реЗрдХрд┐рди рд╡рд╣ рддрд░реНрдХ рдЬреНрдпрд╛рджрд╛рддрд░ рдЖрдВрддрд░рд┐рдХ рд╡рд┐рдХрд╛рд╕ рдФрд░ рдХреЛрдб рд╕рдВрд░рдЪрдирд╛ рддрдХ рд╣реА рд╕реАрдорд┐рдд рд╣реИред рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рдПрдХ рд╕реНрдерд┐рд░ рдХреЛрдб рдмрдВрдбрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд┐рддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рднреА рд╡рд░реНрдЧреЛрдВ рдХреЛ рд╡реИрд╢реНрд╡рд┐рдХ рддреАрди рдкрд░ рд░рдЦрдирд╛ рдореЗрд░реЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред
рдПрдХ рдХрд╛рдЙрдВрдЯрд░ рддрд░реНрдХ рдпрд╣ рд╣реИ рдХрд┐ рдЬрдм рдПрдХ рддреАрди.рдЬреЗрдПрд╕ рджреГрд╢реНрдп рдЬреЗрд╕рди рдХреЛ deserializing, рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпрд╛рдВ рдХреЗрд╡рд▓ рдЕрдкрдиреА рдХрдХреНрд╖рд╛ рдХреЛ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рдХрд░ рд╕рдХрддреА рд╣реИрдВ рдЬрд┐рд╕реЗ рд╡реИрд╢реНрд╡рд┐рдХ рд╕реЗ рдЦреАрдВрдЪрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: THREE[ obj.type ]
ред рдпрд╣ рдЙрди рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдорд╛рдирдХ рддреАрди.js lib рдореЗрдВ рдирд╣реАрдВ рд╣реИрдВ, рдЬрдм рддрдХ рдХрд┐ рдЖрдк рдЙрдиреНрд╣реЗрдВ deserialize рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ THREE
рдкрд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ THREE
рд╡реИрд╢реНрд╡рд┐рдХ рдХреЗ рдмрд┐рдирд╛ рдХреИрд╕реЗ рдмрджрд▓рд╛ рдЬрд╛рдПред
рдпрд╣ рдЙрди рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдорд╛рдирдХ рддреАрди.рдЬреЗрдПрд╕ рд▓рд┐рдм рдореЗрдВ рдирд╣реАрдВ рд╣реИрдВ, рдЬрдм рддрдХ рдХрд┐ рдЖрдк рдЙрдиреНрд╣реЗрдВ рдбрд┐рд╕реЗрд░рд┐рдПрд▓рд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рддреАрди рдкрд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдереНрд░реА рдЧреНрд▓реЛрдмрд▓ рдХреЗ рдмрд┐рдирд╛ рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдХреИрд╕реЗ рдмрджрд▓рд╛ рдЬрд╛рдПред
рдпрджрд┐ рд╕рдм рдХреБрдЫ рдПрдХ рдореЙрдбреНрдпреВрд▓ рд╣реИ рддреЛ рдЖрдк рдпрд╣ рдкреИрдЯрд░реНрди (рдпрд╛ рдЗрд╕рдХреЗ рдХреБрдЫ рдкреНрд░рдХрд╛рд░) рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
var objectType = require( "THREE." + obj.type );
рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ ES6 рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рд╕рд╛рд░реЗ рдмрджрд▓рд╛рд╡ рдЖ рд░рд╣реЗ рд╣реИрдВред рдореИрдВ рдЙрд╕ рд╕рдордп рдереНрд░реАрдЬреЗрдПрд╕ рдХреА рдкреНрд░рддрд┐рд░реВрдкрдХрддрд╛ рдкрд░ рдлрд┐рд░ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░реВрдВрдЧрд╛ред
рддреАрди рдХрд╛ рдирд┐рд░реНрдорд┐рдд рд╕рдВрд╕реНрдХрд░рдг (рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдлрд╝рд╛рдЗрд▓ рдЬрд┐рд╕реЗ рд▓реЛрдЧ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ) рдореЗрдВ рдЕрднреА рднреА рддреАрди рдирд╛рдорд╕реНрдерд╛рди рдкрд░ рд╕рдм рдХреБрдЫ рд╣реЛрдЧрд╛ред рдЖрдк рдЗрд╕реЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
var THREE = {
Geometry: require("./geometry"),
рдЖрджрд┐, рдЬреЛ рдЕрднреА рднреА рдирд╡рд╛рдЧрдВрддреБрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛, рдФрд░ рдЖрд░рдВрдн рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ред
рдЖрдзреБрдирд┐рдХ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрд┐рд▓реНрдб рдореЗрдВ npm рдФрд░ requjs/browserify/webpack рд╕реЗ рддреАрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЛрдВ рдХреЗ рд▓рд┐рдП, рд╣рдо рдХреБрдЫ рдРрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
var Scene = require("three/scene"),
Camera = require("three/camera"),
рдЖрджрд┐, рдЬреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рдЖрдХрд╛рд░ рдмрдВрдбрд▓ рдореЗрдВ рдирд┐рд░реНрдорд┐рдд рддреАрди рдХреЗ рдЖрдХрд╛рд░ рдореЗрдВ рд╕реЗ рдХреБрдЫ рдореЗрдВ рдХрдЯреМрддреА рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдореИрдВ рдЧрд▓рдд рд╣реЛ рд╕рдХрддрд╛ рдерд╛ рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рддреАрди рдореЗрдВ рд╕реЗ рдХрд┐рддрдирд╛ "рдХреЛрд░" рд╣реИред рдЕрднреА, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдЕрд╕рдВрднрд╡ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рддреАрди рдЖрд╡рд╢реНрдпрдХ рдХрдердиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред
рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдЖрдзреБрдирд┐рдХ рдкреИрдЯрд░реНрди рдХреЗ рд▓рд┐рдП рдореЙрдбреНрдпреВрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдФрд░ рдЖрдкрдХреЗ рд╕рднреА рдХреЛрдб рдХреЛ рдПрдХ рдФрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп (рд╡реИрд╢реНрд╡рд┐рдХ рддреАрди рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдирд╛, рдЦрд░рд╛рдм), рдЖрдкрдХрд╛ рдХреЛрдб рд╕реНрд╡рддрдВрддреНрд░ рдФрд░ рдореЙрдбреНрдпреВрд▓рд░ рд╣реИ, рдФрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ require
рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдЪрд╛рд╣рд┐рдП, рдЬреИрд╕реЗ рд░рд┐рдПрдХреНрдЯ рд╕реЛрд░реНрд╕ рдХреЛрдб ред
рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдореИрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛/рдореЙрдбреНрдпреВрд▓ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреВрд░реНрдг рддрд░реНрдХ рджреЗрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдСрдирд▓рд╛рдЗрди рдХрдИ рдЕрдЪреНрдЫреЗ рд╕рдВрд╕рд╛рдзрди рд╣реИрдВред рд▓реЗрдХрд┐рди рджреВрд╕рд░реЛрдВ рдХреЛ OrbitControls рдЬреИрд╕реЗ рдкреНрд▓рдЧрдЗрдиреНрд╕ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рддреАрди рдирд╛рдо рд╕реНрдерд╛рди рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рдирд╛ рдмреБрд░рд╛ рд╣реИред
рдмрд╕ @DelvarWorld рд╕реЗ рдЕрд╡рдЧрдд рд░рд╣реЗрдВ рдХрд┐ ES6 рдПрдХ рдмрд╣реБрдд рд╣реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдФрд░ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд╕рд╛рде рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рддреМрд░ рдкрд░ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдореЙрдбреНрдпреВрд▓ рдкреЗрд╢ рдХрд░рддрд╛ рд╣реИ:
@bhouston рдУрд╣ рд╣рд╛рдБ рдкреВрд░реА рддрд░рд╣ рд╕реЗ, рдореИрдВ рдмрдирд╛рдо рдЖрдпрд╛рдд рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рд▓рд┐рдП рдЕрдЬреНрдЮреЗрдп рд╣реВрдВ (рдЖрдпрд╛рдд рд╢рд╛рдпрдж рдмреЗрд╣рддрд░ рд╡рд┐рдХрд▓реНрдк рд╣реИ), рдмрд╕ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдореЙрдбреНрдпреВрд▓ рдкреИрдЯрд░реНрди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред
@bhouston @DelvarWorld @kumavis рдореЗрд░реА рд▓рдВрдмреА рдЕрд╡рдзрд┐ рдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд es5 -> es6 рдХрдирд╡рд░реНрдЯрд░ рд▓рд┐рдЦрдирд╛ рд╣реИ рдЬреЛ рдЖрдо/рдПрдПрдордбреА рдореЙрдбреНрдпреВрд▓ рдХреЛ es6 рдореЗрдВ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдФрд░ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдХрдХреНрд╖рд╛рдУрдВ/рдЬреЗрдирд░реЗрдЯрд░ рдЬреИрд╕реЗ рдИрдПрд╕ 6 рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрд╣реБрдд рд╕реА рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рдкрд╣рдЪрд╛рди рдФрд░ рдкреБрдирд░реНрд▓реЗрдЦрди рдХрд░реЗрдВ рдФрд░ рдЗрд╕реА рддрд░рд╣ред рдЬрдм рдмреНрд░рд╛рдЙрдЬрд░ рдЙрдкрднреЛрдЧ рдХреЗ рд▓рд┐рдП рдХреЛрдб рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рдирдХ рддрдХ рдкрд╣реБрдВрдЪ рд░рд╣реЗ рд╣реЛрдВ, рддреЛ рдХреЛрдИ es6ify рдЬреИрд╕реЗ рдмреНрд░рд╛рдЙрдЬрд░рд╛рдЗрдЬ рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдХреЗрд╡рд▓ рдЖрдВрддрд░рд┐рдХ рд╕реНрддрд░ рдкрд░ рдмреНрд░рд╛рдЙрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдереНрд░реА рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рдРрд╕реЗ рдЯреВрд▓ рдХреЗ рдЗрдирдкреБрдЯ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рдкрд╣рд▓рд╛ рдХрджрдо рд╣реИред
рдпрд╣ рдЙрд╕ рдмрд┐рдВрджреБ рдХреЗ рдмрдЧрд▓ рдореЗрдВ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ (рдЬрд╛рд╣рд┐рд░рд╛ рддреМрд░ рдкрд░ рдмрд╣реБрдд рдЦрд░рд╛рдм) рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рдерд╛ред рдореИрдВ рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рд╕рдХреЗ рдЗрди рдЪрдХреНрд░реАрдп рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЛ рд╣рдЯрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдХрд┐рд╕реА рднреА рдореЙрдбреНрдпреВрд▓рд░рд┐рдЯреА рдЪрд┐рдВрддрд╛рдУрдВ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░, рдХреНрдпреЛрдВрдХрд┐ рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рдпрд╣ рддреАрди рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рд╕реНрдерд┐рд░, рд▓рдЪреАрд▓рд╛ рдмрдирд╛ рджреЗрдЧрд╛, рдФрд░ рд╢рд╛рдпрдж рд╕реБрдЦрдж рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реА рдмрдЧ рдХреЛ рдЦрддреНрдо рдХрд░ рджреЗрдЧрд╛ред
@coballast https://github.com/mrdoob/three.js/pull/6252 рд╡рд┐рд▓рдп рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЪрдХреНрд░реАрдп рдбрд┐рдкреЛ рдореЗрдВ рдХрдЯреМрддреА рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдПрдХ рдирдпрд╛ рдбреАрдкреА рдЧреНрд░рд╛рдл рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рд╢рд╛рдпрдж рдЗрд╕реЗ рд░реВрдкрд╛рдВрддрд░рдг рдЙрдкрдХрд░рдг рд░реЗрдкреЛ рдореЗрдВ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдмрдирд╛рдПрдВ
рдЕрдЧрд▓рд╛ рд╣реИ: рд╕реНрдХреНрд░реИрдЪ рд╡рд╛рд░реНрд╕ рдмрдирд╛рдирд╛ Vector3
Matrix4
рдкрд╣рд▓реЗ рдЙрдкрдпреЛрдЧ рдкрд░ рдЖрд▓рд╕реА рдкрд░рд┐рднрд╛рд╖рд┐рдд, рдкрд░рд┐рднрд╛рд╖рд╛ рд╕рдордп рдкрд░ рдирд╣реАрдВ
рдХреЛрдИ рд╕реНрд╡рдпрдВрд╕реЗрд╡рдХ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ? рдЬрд▓реНрджреА рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП
рдЧреНрд░рд╛рдл рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред http://jsbin.com/medezu/3/
рдпрд╣рд╛рдБ рдПрдХ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рд╣реИ:
рдореБрдЭреЗ рдпрд╣ рдмрддрд╛рддреЗ рд╣реБрдП рдЦреБрд╢реА рд╣реЛ рд░рд╣реА рд╣реИ рдХрд┐ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ Object3Ds рд╕рд░реНрдХрд┐рд▓ рдбрд┐рдкреЛ рд╕рдорд╛рдкреНрдд рдХрд░ рджрд┐рдП рдЧрдП рд╣реИрдВред рдЕрдЪреНрдЫрд╛ рдХрд╛рдо @kumavis!
рд╡рд╛рд╣ рдХреНрдпрд╛ рд╡рд╣реА рдХреЛрдбрдмреЗрд╕ рд╣реИ? рдкрд╛рдЧрд▓
рдЧреНрд░рд╛рдл рдЬрдирд░реЗрд╢рди рдХреЛ рдпреВрдЯрд┐рд▓рд┐рдЯреА рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдмрдирд╛рдиреЗ рдкрд░ рдХрд╛рдо рдХрд░реЗрдВрдЧреЗред
рдЕрдХреЗрд▓реЗ рдЧреНрд░рд╛рдл рдХреЗ рдирд┐рд░реАрдХреНрд╖рдг рдкрд░, Shape
рдФрд░ Geometry
рд╕рдВрднрд╡ рд╡рд░реНрдЧ рдХреЗ рдкреЗрдбрд╝ рдкреНрд░рддреАрдд рд╣реЛрддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╕реБрд▓рдЭрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
@coballast рдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕реЗ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ?
рд╡реЗрдХреНрдЯрд░ 3 рдореИрдЯреНрд░рд┐рдХреНрд╕ 4 рдореЗрдВ рд╕реНрдХреНрд░реИрдЪ рд╡рд░реНрд░реНрд╕ рдмрдирд╛рдирд╛ рдкрд╣рд▓реЗ рдЙрдкрдпреЛрдЧ рдкрд░ рдЖрд▓рд╕реА рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдкрд░рд┐рднрд╛рд╖рд╛ рд╕рдордп рдкрд░ рдирд╣реАрдВ
рдпрд╣ рдПрдХ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд╡рд┐рдкрд░реАрдд рдЕрдкрд╕реНрдЯреНрд░реАрдо dev
рдХреЗ рдЦрд┐рд▓рд╛рдл рдПрдХ рдкреАрдЖрд░ рд╣реЛрдЧрд╛
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо "рдЧрдВрднреАрд░ рдЪрдХреНрд░реАрдп рдирд┐рд░реНрднрд░рддрд╛ рд╕рдорд╕реНрдпрд╛рдУрдВ" рд╕реЗ "рдЪрдХреНрд░реАрдп рдирд┐рд░реНрднрд░рддрд╛" рдХреЗ рдореБрджреНрджреЗ рдХреЗ рд╢реАрд░реНрд╖рдХ рдХреЛ рдбрд╛рдЙрдирдЧреНрд░реЗрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдмрд╣реБрдд рд╕реБрдзрд╛рд░ рд╣реБрдЖ рд╣реИ!
@ рдХреБрдорд╛рд╡рд┐рд╕ рдирд┐рд╢реНрдЪрд┐рдд рдмрд╛рддред рд╕рдордп рдорд┐рд▓рдиреЗ рдкрд░ рдЗрд╕ рдкрд░ рдХрд╛рдо рдХрд░реЗрдВрдЧреЗред
рдпрд╣рд╛рдБ рдЕрдиреНрдпреЛрдиреНрдпрд╛рд╢реНрд░рдп рд╕рдлрд╛рдИ рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдБ:
(рддреАрд░ рдРрд╕реЗ рдХрдиреЗрдХреНрд╢рди рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЙрдкрдпреБрдХреНрдд рд╣реЛрдиреЗ рдкрд░ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП)
рдпреЗ рдиреЛрдбреНрд╕ рдЖрдкрд╕ рдореЗрдВ рдЬреБрдбрд╝реЗ рд╣реБрдП рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд░реНрдпрд╛рдкреНрдд рд╕реБрд╡рд┐рдзрд╛ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред
рдЖрдХрд╛рд░ рдЗрд╕ рддрд░рд╣ рдХреЛрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ 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 ) {
/* ... */
}
/* ... */
}
рджреЛрдиреЛрдВ рд╣реА рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдпрд╣ рд╡рд┐рд╢реНрд╡ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреБрдирд░рд╛рд╡реГрддрд┐ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдЬреНрдпрд╛рдорд┐рддрд┐ рдХреЗ рдХреЛрдиреЗ/рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЛ рд╕рдордиреНрд╡рдпрд┐рдд рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ $#$ BufferGeometry
рдкрд░ рдЖрд▓рд╕реА vertices
рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреЛ рдмрд╣реБрдд рд╕рд░рд▓ рдХрд░реЗрдЧрд╛ рдЬреЛ рдорд╛рдиреЛрдВ рдХреЛ рдЕрдиреБрд░реЛрдз рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрдЦрддрд╛ рд╣реИред рдкреВрд░реНрдг рдкреНрд░рднрд╛рд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИред
рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ, рд╣рдо рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ Geometry.computeBoundingBox
:
Geometry
BufferGeometry
рдмреНрд░рд╛рдЙрдЬрд░рд╛рдЗрдЬрд╝ рдмрд┐рд▓реНрдб рдЪрд▓рд╛рддреЗ рд╕рдордп Box3 рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╕реНрдерд╛рди рд╣реИред рдХреЛрдмрд▓рд╛рд╕реНрдЯ/рдереНрд░реАрдЬреЗрдПрд╕-рдмреНрд░рд╛рдЙрдЬрд╝рд░рд╛рдЗрдЬрд╝-рд░реВрдкрд╛рдВрддрд░рдг-рдЙрдкрдпреЛрдЧрд┐рддрд╛#21 рдореЗрдВ рдиреЛрдЯреНрд╕ рджреЗрдЦреЗрдВред
@kumavis рдХреНрдпрд╛ рдЖрдк Box3/рдЬреНрдпреЛрдореЗрдЯреНрд░реА/рдмрдлрд░рдЬрд┐рдпреЛрдореЗрдЯреНрд░реА рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдЕрдиреБрд╢рдВрд╕рд┐рдд рд╕рдорд╛рдзрд╛рди рдХреА рд░реВрдкрд░реЗрдЦрд╛ рддреИрдпрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ? рдЕрдЧрд░ рдпрд╣ рдЬрд▓реНрджреА рд╣реИ, рддреЛ рдореИрдВ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред
рдореИрдВ рдЗрд╕реЗ рдЕрднреА рдирд╣реАрдВ рджреЗрдЦ рд╕рдХрддрд╛, рд▓реЗрдХрд┐рди рдореИрдВ рдКрдкрд░ рджрд┐рдП рдЧрдП рдЕрдкрдиреЗ рд╕реБрдЭрд╛рд╡ рдХреЗ рд╕рд╛рде geo.computeBoundingBox
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╢реБрд░реВ рдХрд░реВрдВрдЧрд╛ рдЬреИрд╕рд╛ рдХрд┐ Geometry
рдФрд░ BufferGeometry
рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдпрджрд┐/рдЕрдиреНрдп рдХреЗ рд╕реНрдерд╛рди рдкрд░ рдпрд╣рд╛рдВ . рдЗрд╕рдХреЗ рдмрдЬрд╛рдп box3.setFromObj
рдХреЛ geometry.computeBoundingBox
рдкрд░ рдХреЙрд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдлрд┐рд░ рдЙрддреНрдкрд╛рджрд┐рдд рдмреЙрдХреНрд╕ 3 рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдкреИрд░рд╛ рд╕реЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЗрд╕рд╕реЗ рд╕рд░реНрдХреБрд▓рд░ рдбрд┐рдкреНрд╕ рдХреЗ Box3 -> BufferGeometry
рдФрд░ Box3 -> Geometry
рдХреЗ рдЕрдВрдд рдХреЛ рд╣рдЯрд╛ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЕрдЧрд░ рдореБрдЭреЗ рдХреБрдЫ рдпрд╛рдж рдЖ рд░рд╣рд╛ рд╣реИ рддреЛ рдореБрдЭреЗ рдмрддрд╛рдПрдВред
рд╣рдореНрдо рд╢рд╛рдпрдж рдкрд░рд┐рдгрд╛рдореА рдХреЛрдб рдереЛрдбрд╝рд╛ рдЬрдЯрд┐рд▓ рд╣реИ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣рд╛рдВ рдХреНрдпрд╛ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ? Box3.setFromObject
рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдпрд╣ рдХреЛрдИ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реИред рдЬрд┐рдпреЛ рдХреЛ рдмреЙрдХреНрд╕3 рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдореБрдЭреЗ рдЗрд╕рд╕реЗ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред рд╣рд╛рдБ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ Box3.setFromObject
рдХреЛ рдЬрд┐рдпреЛ рд╕реЗ рдмрд╛рдЙрдВрдбрд┐рдВрдЧ рдмреЙрдХреНрд╕ / рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рд▓рд┐рдП рдкреВрдЫрдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдмрд╛рдЙрдВрдбрд┐рдВрдЧ рдмреЙрдХреНрд╕ / рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рд▓рд┐рдП Object3D
/ Mesh
рдкреВрдЫрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдереЛрдбрд╝рд╛ рдЙрдЧреНрд░ рд╣реЛ рдЧрдпрд╛ред рдореБрдЭреЗ рдмрддрд╛рдПрдВ рдХрд┐ рдЖрдкрдХрд╛ рдХреНрдпрд╛ рд╕реЛрдЪрдирд╛ рд╣реИред
рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ: #6546
рдРрд╕рд╛ рдХреБрдЫ рдХреЗ рдмрд┐рдирд╛, рд▓реЛрдбрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реЗ рдЙрди рдЧрддрд┐рд╢реАрд▓ рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИред
рдореЗрд░реЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдЪрдХреНрд░реАрдп рдирд┐рд░реНрднрд░рддрд╛ рд╕рд╛рдорд╛рдиреНрдп рдЬреЗрдПрд╕реАрдлрд┐рдХреЗрд╢рди рдХреЗ рд╕рд╛рде рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред рдЙрдиреНрд╣реЗрдВ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдВрднрд╛рд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рдЗрд╕ рдзрд╛рдЧреЗ рдореЗрдВ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ, рд╡реЗ рдирд┐рд░реНрднрд░рддрд╛ рдЧреНрд░рд╛рдл рдХреЛ рдХрд╛рдлреА рдЧрдбрд╝рдмрдбрд╝ рдХрд░ рджреЗрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реЗ рддреАрди рдЬреЗрдПрд╕ рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рдЬреЗрдПрд╕ рд╡рд╛рддрд╛рд╡рд░рдг (рдЬрдм рд░реВрдкрд╛рдВрддрд░рд┐рдд, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ) рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рд╕реЗ рдирд╣реАрдВ рд░реЛрдХрддреЗ рд╣реИрдВред
рдореИрдВрдиреЗ рдЕрдкрдиреЗ рддреАрди рдХреЙрдордирдЬ рдЯреНрд░рд╛рдВрд╕рдкрд┐рд▓рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ npm рдкрд░ рддреАрди.cjs рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдкреВрд░реНрдг рд╕рд╛рдорд╛рдиреНрдп рд╕рдВрд╕реНрдХрд░рдг рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдпрд╛ рд╣реИ
рдиреЛрдЯ: рдЗрд╕рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдорд╛рд╕реНрдЯрд░ рдкрд░ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЪреЗрд░реАрдкрд┐рдХ # 6546 рдХрд░рдирд╛ рдкрдбрд╝рд╛ред рдЬрдмрдХрд┐ рдЧрддрд┐рд╢реАрд▓ рдирд┐рд░реНрднрд░рддрд╛рдПрдВ node.js рдореЗрдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддреА рд╣реИрдВ, рд╡реЗ Browserify (рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп cjs рд╕реЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЯреВрд▓) рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рдХреНрдпреЛрдВрдХрд┐ рдЙрдиреНрд╣реЗрдВ рд╕реНрдерд┐рд░ рдирд┐рд░реНрднрд░рддрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
рдмреНрд░рд╛рдЙрдЬрд░рд╛рдЗрдЬрд╝ рдкреНрд░реВрдл: http://requirebin.com/?gist=b7fe528d8059a7403960
@kamicane FYI - рдпрд╣рд╛рдВ рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдВ рддреАрди рдХреЛ рдЕрдЬреНрдЮрд╛рдд рдлрд╝рдВрдХреНрд╢рди рдХреЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ Raycaster
(рдкреВрд░реНрд╡ рдореЗрдВ Ray
) рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛ред
рдореИрдВ рдПрдХ рдЕрдЬреНрдЮрд╛рдд рдлрд╝рдВрдХреНрд╢рди (рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рд╡реИрд╢реНрд╡рд┐рдХ рд▓реАрдХ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП) рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рд╕рдордЭрддрд╛ рд╣реВрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рддрд░реНрдХ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╣реИ, рдФрд░ рдкреВрд░реА рдлрд╝рд╛рдЗрд▓ рдЧрдгрдирд╛ рдХреА рдЧрдИ рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреА рд╢реНрд░реЗрдгреА рдореЗрдВ рдЖрддреА рд╣реИред рдЬрдмрдХрд┐ рдПрдПрд╕рдЯреА рд╕рдВрд╢реЛрдзрдиреЛрдВ рдХреЗ рд╕рд╛рде рддрд░реНрдХ рдХреЛ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рд╣рдЯрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╣ рдХрднреА рднреА рдмреБрд▓реЗрдЯрдкреНрд░реВрдл рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (рддрд░реНрдХ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рд▓рд┐рдЦрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рддрд░реНрдХ рд╕реЗ рдкрдврд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЖрджрд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░)ред рд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рд▓рдЧрднрдЧ рдЕрд╕рдВрднрд╡ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдореИрдиреНрдпреБрдЕрд▓ рд╣рд╕реНрддрдХреНрд╖реЗрдк рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдЕрдм рдЬрдмрдХрд┐ Raycaster
рдЕрдзрд┐рдХ рд╣рд▓реНрдХрд╛ рд╣реИ, рд╣рдо рдЗрд╕реЗ рдмрд╛рдХреА рд╡рд░реНрдЧреЛрдВ рдХреА рддрд░рд╣ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рджреЗ рд╕рдХрддреЗ рд╣реИрдВред
@mrdoob , @ Mugen87 рд╣рдо рд░реЛрд▓рдЕрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рддреАрди.рдЬреЗрдПрд╕ рдХреЗ рдЙрди рд╣рд┐рд╕реНрд╕реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рдирдХреА рд╣рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЬрдм рд╣рдо рдмрд┐рд▓реНрдЯ рдЪрд▓рд╛рддреЗ рд╣реИрдВ рддрдм рднреА рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЪреЗрддрд╛рд╡рдиреА рдорд┐рд▓рддреА рд╣реИ:
(!) 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 рдореЗрдВ рдЕрднреА рднреА рд╕рд░реНрдХреБрд▓рд░ рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реА рд╣реИрдВ рдпрд╛ рд╣рдо рдХреБрдЫ рдЧрд▓рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ?
рд╡реЗрдХреНрдЯрд░ 3 рдФрд░ рдореИрдЯреНрд░рд┐рдХреНрд╕ 4 рдПрдХ рджреВрд╕рд░реЗ рд╕реЗ рдмрдВрдзреЗ рд╣реИрдВ, рдпрджрд┐ рдЖрдк рдПрдХ рдореЗрдВ рдЦреАрдВрдЪрддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рджреВрд╕рд░реЗ рдореЗрдВ рдЦреАрдВрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ рдкрд░рд┐рдкрддреНрд░ рдирд┐рд░реНрднрд░рддрд╛ рдХреА рдЕрдиреБрдорддрд┐ рджреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдПред
@bhouston рд╣рд╛рдБ, рдореИрдВ рджреЗрдЦрддрд╛ рд╣реВрдБ, рд╕рдВрдХреЗрдд рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рд╣рд╛рдВ рд╕рд░реНрдХреБрд▓рд░ рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИ рдФрд░ рд░реЛрд▓рдЕрдк рдХреЛрдИ рдкрд░реЗрд╢рд╛рдиреА рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╕рд░реНрдХреБрд▓рд░ рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЕрдЪреНрдЫрд╛ рдЕрднреНрдпрд╛рд╕ рд╣реИ рдпрд╛ рдирд╣реАрдВред Vector3
рдХреЗрд╡рд▓ Matrix4
рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ multiplyMatrices
рдФрд░ getInverse
рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рджреЗрдЦреЗрдВ (https://github.com/mrdoob/three.js/ рдмреНрд▓реЙрдм/рджреЗрд╡/src/math/Vector3.js#L315)
@ рд░реВрдорд▓-рдмрд┐рд▓реНрдб рдЖрдИрдбреАрдХреЗ, рдпрд╛рд░, рд╕рд┐рд░реНрдл рдЗрд╕рд▓рд┐рдП рдХрд┐ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдореИрдЯреНрд░рд┐рдХреНрд╕ 4 рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХрд╛ рд╕рдВрджрд░реНрдн рджреЗрддрд╛ рд╣реИ? рдХрд┐рд╕ рдмрд╛рд░реЗ рдореЗрдВ
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;
},
?
рдЖрдк рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк {рддрддреНрд╡: [...]} рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдпрд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рд╣рдо рд╕рднреА рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рд╡рд╣рд╛рдВ рдореИрдЯреНрд░рд┐рдХреНрд╕ 4 рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИ
рдЖрдЗрдП 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
( Matrix4
рдХреА рдПрдкреАрдЖрдИ рд╕рддрд╣ рдХреЛ рд╕рдорд╛рди рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП) рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдореИрдВрдиреЗ рдмрд╕ рдПрдХ рддреНрд╡рд░рд┐рдд рдирдЬрд╝рд░ рдбрд╛рд▓реА ( Quaternian
рдорд╛рдорд▓реЗ рдХреЛ рдирд╣реАрдВ рджреЗрдЦрд╛ - рдХреЗрд╡рд▓ Vec3/Mat4
) рдФрд░ рдореИрдВ рдмрд╛рдХреА рдХреЛрдб рдмреЗрд╕ рдХреЗ рд▓рд┐рдП рдкреНрд░рджрд░реНрд╢рди рдирд┐рд╣рд┐рддрд╛рд░реНрде рдФрд░ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреА рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реВрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдореБрдЭреЗ рдпрд╣ рднреА рд╡рд┐рд╢реНрд╡рд╛рд╕ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрди рдкрд░рд┐рдкрддреНрд░ рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЛ рд╣рдЯрд╛рдирд╛ рдмрд┐рд▓реНрдХреБрд▓ рдЬрд░реВрд░реА рд╣реИред рдмрд╕ рдЕрдкрдиреЗ рд╡рд┐рдЪрд╛рд░ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдХреНрдпреЛрдВрдХрд┐ @mrdoob рдиреЗ рд╕реБрдЭрд╛рд╡ рдорд╛рдВрдЧреЗ рдереЗ
@ рд░реВрдорд▓-рдмрд┐рд▓реНрдб рдореВрд▓ рд░реВрдк рд╕реЗ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдкрд░рд┐рдкрддреНрд░ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдореЙрдбреНрдпреВрд▓ рдмрдирд╛рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдк рдЕрднреА рднреА рдЙрди рд╕рднреА рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ? рдпрд╣ рд╢рд╛рдпрдж рдЕрдзрд┐рдХ рд╕рдордЭ рдореЗрдВ рдЖ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рдкреНрд░рддреНрдпреЗрдХ рдЧрдгрд┐рдд рд╡рд┐рдзрд┐ рдХрд╛ рдЕрдкрдирд╛ рдореЙрдбреНрдпреВрд▓ рд╣реЛрдЧрд╛, рддреЛ рдЖрдк рдХреЗрд╡рд▓ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЛ рдЦреАрдВрдЪ рд░рд╣реЗ рд╣реИрдВ рдЬрд┐рдирдХрд╛ рдЖрдк рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдореЙрдбреНрдпреВрд▓ рд╣реЛрдВрдЧреЗред
@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 );
рд╕рдм рдХреБрдЫ рдПрдХ рд╕рд╛рде рдмрдВрдбрд▓ рдХрд░рддреЗ рд╕рдордп, рд░реЛрд▓рдЕрдк рдЕрдкрдирд╛ рдЬрд╛рджреВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕рдмрд╕реЗ рдХреБрд╢рд▓ рдмрдВрдбрд▓ рдмрдирд╛рддрд╛ рд╣реИред
рдмрд╣реБрдд рд╕рд╛рд░реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рдкреБрд╕реНрддрдХрд╛рд▓рдп рдпрд╣реА рдХрд░ рд░рд╣реЗ рд╣реИрдВред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ 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
рдореЙрдбреНрдпреВрд▓ рдЗрд╕ рддрд░рд╣ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП "рддреИрдпрд╛рд░" рдирд╣реАрдВ рд╣реИред рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЧрдгрд┐рдд рдореЙрдбреНрдпреВрд▓ рдкрд░ рд╕рднреА рд╡рд┐рдзрд┐рдпрд╛рдВ "рд╕реНрдерд┐рд░ рдкреНрд░рдХрд╛рд░" рд╕реЗ рдЬреБрдбрд╝реА рд╣реБрдИ рд╣реИрдВред рдпрд╣ рд░реЛрд▓рдЕрдк рдХреЛ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рд╕реЗ рднреА рд░реЛрдХрддрд╛ рд╣реИ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ...
@ рд░реВрдорд▓-рдмрд┐рд▓реНрдб рд╣рдореНрдо рддреЛ рдЖрдк рдХрд╣ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рд░реЛрд▓рдЕрдк рд╕рдордЭ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рд╣реА рджрд╛рдпрд░реЗ рдореЗрдВ рдХреЛрдб рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреВрд░реЗ рджрд╛рдпрд░реЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЕрдЪреНрдЫрд╛ред
рдЖрдк рдСрдмреНрдЬреЗрдХреНрдЯ рдУрд░рд┐рдПрдВрдЯреЗрдб рдПрдкреНрд░реЛрдЪ (рдСрдмреНрдЬреЗрдХреНрдЯ рд╡рд╛рд▓реЗ рд╕рджрд╕реНрдп рдлрд╝рдВрдХреНрд╢рдВрд╕) рдХреЗ рдмрдЬрд╛рдп рдПрдХ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рджреГрд╖реНрдЯрд┐рдХреЛрдг (рдСрдмреНрдЬреЗрдХреНрдЯ рд▓реЗрдиреЗ рд╡рд╛рд▓реЗ рдлрд╝рдВрдХреНрд╢рди) рдХреА рдУрд░ рдмрдврд╝рдиреЗ рдХреА рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдпрд╣ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдмрд╛рдд рд╣реИ рд▓реЗрдХрд┐рди рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдереНрд░реА.рдЬреЗрдПрд╕ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдСрдмреНрдЬреЗрдХреНрдЯ-рдУрд░рд┐рдПрдВрдЯреЗрдб рд╣реИ, рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдПрдХ рд╣реИ рдмрд╣реБрдд рдмрдбрд╝рд╛ рдФрд░ рдпрд╣ рд╕рднреА рдореМрдЬреВрджрд╛ рдХреЛрдб рдХреЛ рддреЛрдбрд╝ рджреЗрдЧрд╛ред
рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕ рдмрджрд▓рд╛рд╡ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рддрд░реНрдХ рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рд╕рднреА рдкрд╢реНрдЪрдЧрд╛рдореА рд╕рдВрдЧрддрддрд╛ рдХреЛ рддреЛрдбрд╝рдиреЗ рдХрд╛ рдФрдЪрд┐рддреНрдп рд╕рд╛рдмрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВред
@makc рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд╣реАрдВред рдпрд╣ рдмрд╣реБрдд рд╕реЗ рдЫреЛрдЯреЗ "рд╕рд╣рд╛рдпрдХ" рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдмрдбрд╝рд╛ рдореЙрдбреНрдпреВрд▓ рд╣реЛрдЧрд╛ред рдпрд╣ рдкреЗрдбрд╝ рдХреЛ рд╣рд┐рд▓рд╛рдиреЗ рдЖрджрд┐ рдореЗрдВ рднреА рдорджрдж рдХрд░реЗрдЧрд╛ред рдПрдХ рдЧрдгрд┐рдд рдореЙрдбреНрдпреВрд▓ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ:
рдпрджрд┐ рдпрд╣ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдереНрд░реА.рдЬреЗрдПрд╕ рдХрд╛ рдбрд┐рдЬрд╝рд╛рдЗрди рдХреА рдСрдмреНрдЬреЗрдХреНрдЯ-рдУрд░рд┐рдПрдВрдЯреЗрдб рд╢реИрд▓реА рд╕реЗ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдбрд┐рдЬрд╝рд╛рдЗрди рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рд╣реИред
@ рд░реВрдорд▓-рдмрд┐рд▓реНрдб рд╣рдореНрдо рддреЛ рдЖрдк рдХрд╣ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рд░реЛрд▓рдЕрдк рд╕рдордЭ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рд╣реА рджрд╛рдпрд░реЗ рдореЗрдВ рдХреЛрдб рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреВрд░реЗ рджрд╛рдпрд░реЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЕрдЪреНрдЫрд╛ред
рд╣рд╛рдБ рд░реЛрд▓рдЕрдк рд╕рдордЭрддрд╛ рд╣реИ рдХрд┐ рд╕рднреА рдЖрдпрд╛рдд рдПрдХ-рджреВрд╕рд░реЗ рд╕реЗ рдХреИрд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИрдВ рдФрд░ рдЯреНрд░реА-рд╢реЗрдХрд┐рдВрдЧ, рдбреЗрдб рдХреЛрдб рдПрд▓рд┐рдорд┐рдиреЗрд╢рди рдЖрджрд┐ рдХрд░рддрд╛ рд╣реИред рд░реЛрд▓рдЕрдк рдХреЗ рдирдП рд╕рдВрд╕реНрдХрд░рдг "рдЪрдВрдХрд┐рдВрдЧ" рдФрд░ рдмрд╣реБрдд рд╕реА рдЕрдиреНрдп рдЕрдЪреНрдЫреА рдЪреАрдЬреЗрдВ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рд╡рд░реНрддрдорд╛рди рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕рдВрд░рдЪрдирд╛ рдЗрди рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рдкреВрд░рд╛ рд▓рд╛рдн рдирд╣реАрдВ рдЙрдард╛рддреА рд╣реИред
рдЖрдк рдСрдмреНрдЬреЗрдХреНрдЯ рдУрд░рд┐рдПрдВрдЯреЗрдб рдПрдкреНрд░реЛрдЪ (рдСрдмреНрдЬреЗрдХреНрдЯ рд╡рд╛рд▓реЗ рд╕рджрд╕реНрдп рдлрд╝рдВрдХреНрд╢рдВрд╕) рдХреЗ рдмрдЬрд╛рдп рдПрдХ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рджреГрд╖реНрдЯрд┐рдХреЛрдг (рдСрдмреНрдЬреЗрдХреНрдЯ рд▓реЗрдиреЗ рд╡рд╛рд▓реЗ рдлрд╝рдВрдХреНрд╢рди) рдХреА рдУрд░ рдмрдврд╝рдиреЗ рдХреА рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдпрд╣ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдмрд╛рдд рд╣реИ рд▓реЗрдХрд┐рди рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдереНрд░реА.рдЬреЗрдПрд╕ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдСрдмреНрдЬреЗрдХреНрдЯ-рдУрд░рд┐рдПрдВрдЯреЗрдб рд╣реИ, рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдПрдХ рд╣реИ рдмрд╣реБрдд рдмрдбрд╝рд╛ рдФрд░ рдпрд╣ рд╕рднреА рдореМрдЬреВрджрд╛ рдХреЛрдб рдХреЛ рддреЛрдбрд╝ рджреЗрдЧрд╛ред
рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпреЗ рджреЛрдиреЛрдВ рдкреНрд░рддрд┐рдорд╛рди рдкрд░рд╕реНрдкрд░ рдЕрдирдиреНрдп рд╣реИрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЗрди рджреЛ рдкреНрд░рддрд┐рдорд╛рдиреЛрдВ рдХреЛ рдорд┐рд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдореЗрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореИрдВ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЗрдВ рдмрджрд▓рдиреЗ рдХрд╛ рднреА рдкреНрд░рд╕реНрддрд╛рд╡ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реВрдВред рдореИрдВ рд╕рд┐рд░реНрдл рдЪрдХреНрд░реАрдп рдирд┐рд░реНрднрд░рддрд╛ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рдЖрдк multiplyMatrices
рд╡рд┐рдзрд┐ рдХреЛ Math
рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реЗ рднреА рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдХреЛрдИ рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕рд╛рдорд╛рди рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрддрд╛ рд╣реИ рддреЛ ES6 рдореЙрдбреНрдпреВрд▓ рдХреА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдХрд╣рд╛, рдореИрдВ рдереНрд░реА.рдЬреЗрдПрд╕ рдХреЛрдбрдмреЗрд╕ рдХрд╛ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рдирд╣реАрдВ рд╣реВрдВ рдФрд░ рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рд╡рд┐рдЪрд╛рд░ рдерд╛ рдХрд┐ рдЪрдХреНрд░реАрдп рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдХреИрд╕реЗ рдЦрддреНрдо рдХрд┐рдпрд╛ рдЬрд╛рдПред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ Three.js рдПрдХ рдмреЗрд╣рддрд░реАрди рдХреЛрдб рдмреЗрд╕ рд╡рд╛рд▓рд╛ рдПрдХ рд╢рд╛рдирджрд╛рд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╣реИ рдФрд░ рдореИрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛ред рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдореЗрд░реА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рд╕реЗ рдХрд┐рд╕реА рдХреЛ рдмреБрд░рд╛ рдирд╣реАрдВ рд▓рдЧреЗрдЧрд╛
рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдХрд┐рд╕реА рдореБрджреНрджреЗ рдореЗрдВ рдбрд┐рдЬрд╛рдЗрди рдирд┐рд░реНрдгрдпреЛрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреЛрдИ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдВ рдЗрд╕ рддрд░рд╣ рдХреА рдЪреАрдЬреЗрдВ рдмреЗрд╣рддрд░ рдлрд┐рдЯ рдмреИрдарддреА рд╣реИрдВ?
BTW gl-matrix рдПрдХ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдЧрдгрд┐рдд рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИ: https://github.com/toji/gl-matrix/tree/master/src/gl-matrix
@ рд░реВрдорд▓-рдмрд┐рд▓реНрдб
рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЧрдгрд┐рдд рдореЙрдбреНрдпреВрд▓ рдкрд░ рд╕рднреА рд╡рд┐рдзрд┐рдпрд╛рдВ "рд╕реНрдерд┐рд░ рдкреНрд░рдХрд╛рд░" рд╕реЗ рдЬреБрдбрд╝реА рд╣реБрдИ рд╣реИрдВред
рдРрд╕рд╛ рдХреИрд╕реЗ?
@mrdoob рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рдЧреНрд▓реЛ-рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдбрд┐рдЬрд╛рдЗрди рдХреЗ рд╕рд╛рде vec3 рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рдВрдХреНрд╢рди (vec3 рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдореИрдВрдиреЗ рдЕрдкрдиреА рдкрд┐рдЫрд▓реА рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рд▓рд┐рдВрдХ рдХрд┐рдпрд╛ рд╣реИ) рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдЖрдкрдХреЛ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреМрди рд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдЪреБрдирдиреЗ рдФрд░ рдЪреБрдирдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЖрдкрдХреЛ рд╕рднреА vec3 рд╕рд╛рде рд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
рдЬрд╣рд╛рдВ рдереНрд░реА.рдЬреЗрдПрд╕ рдХреЗ рд╕рд╛рде, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдСрдмреНрдЬреЗрдХреНрдЯ-рдУрд░рд┐рдПрдВрдЯреЗрдб рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рд╡реЗрдХреНрдЯрд░ 3 рдХреЗ рд▓рд┐рдП рд╕рднреА рдЧрдгрд┐рдд рдлрд╝рдВрдХреНрд╢рди рд╡реЗрдХреНрдЯрд░ 3 рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╕реЗ рдЬреБрдбрд╝реЗ рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдЖрдк рдХреЗрд╡рд▓ рд╡реЗрдХреНрдЯрд░ 3 рдХреНрд▓рд╛рд╕ рдХреЛ рд╣реА рдЖрдпрд╛рдд рдХрд░рддреЗ рд╣реИрдВред
рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдереНрд░реА.рдЬреЗрдПрд╕ рдореЗрдВ рдЖрдпрд╛рдд рдкреВрд░реЗ рд╡рд░реНрдЧ рдХреЗ рд╣реЛрддреЗ рд╣реИрдВ рдЬрдмрдХрд┐ рдПрдХ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде рдЖрдк рд╡реНрдпрдХреНрддрд┐рдЧрдд рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЖрдпрд╛рдд рдХрд░рддреЗ рд╣реИрдВред
(рдЧреНрд▓-рдореИрдЯреНрд░рд┐рдХреНрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рджреВрд╕рд░реА рдмрд╣реБрдд рд╕рд╛рдл рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рд╕рднреА рд╡реНрдпрдХреНрддрд┐рдЧрдд рдлрд╝рдВрдХреНрд╢рди рдЕрдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, @toji рдиреЗ рдореВрд▓ рд░реВрдк рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдСрдкрд░реЗрд╢рди рдореЗрдВ рд╕рднреА рдЧрдгрд┐рдд рдХреЗ рдПрдХ рдЕрдиреБрдХреВрд▓рд┐рдд рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд░реЗрдЦрд╛рдВрдХрд┐рдд рдХрд┐рдпрд╛ рд╣реИред рдпрд╣ рдЧрддрд┐ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдХрд╛рдлреА рдХреБрд╢рд▓ рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рдмрдирд╛рдП рд░рдЦрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред)
рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╣рдореЗрдВ рдереНрд░реА.рдЬреЗрдПрд╕ рдХреЗ рдЗрд╕ рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рд░рд┐рдлреИрдХреНрдЯрд░ рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рдереНрд░реА.рдЬреЗрдПрд╕ рдореЗрдВ рдЕрдиреНрдп рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдХреЗ рдХрд┐рд╕реА рднреА рд╕рдВрджрд░реНрдн рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдПред рдЧрдгрд┐рдд рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛рдлреА рдЫреЛрдЯрд╛ рд╣реИ рдФрд░ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрди рджрд┐рдиреЛрдВ рдореЗрд░реЗ рдкреНрд░реЛрдлрд╛рдЗрд▓рд┐рдВрдЧ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рдХрднреА рдирд╣реАрдВ рджрд┐рдЦрддрд╛ рд╣реИред рд╣рд╛рдВ, рдпрд╣ рдЕрдзрд┐рдХрддрдо рдХреБрд╢рд▓ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд░рдЦрд░рдЦрд╛рд╡ рдпреЛрдЧреНрдп рдкрдардиреАрдпрддрд╛ рдФрд░ рдЙрдкрдпреЛрдЧ рдореЗрдВ рдЖрд╕рд╛рдиреА рдХреЗ рджреМрд░рд╛рди рдпрд╣ рдХрд╛рдлреА рдХрд░реАрдм рд╣реИред
@ рдмреМрд╕реНрдЯрди рд╕рдордЭ рдЧрдпрд╛ред рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж! рдореИрдВ
рдореИрдВ рд╕рд┐рд░реНрдл рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдЕрдиреБрд╡рд░реНрддреА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рд▓реЗрдХрд┐рди рдореИрдВ importing function vs importing classes
рд╕реЗ cyclic dependencies
рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд╡рд┐рд╖рдп рдкрд░ рд╡рд╛рдкрд╕ рдЖрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред (рдореИрдВ рдпрд╣ рднреА рдирд╣реАрдВ рджреЗрдЦрддрд╛ рдХрд┐ import { someFunction } from 'SomeModule'
import SomeClass from 'SomeModule'
#$ рд╕реЗ рдХрдо рд░рдЦрд░рдЦрд╛рд╡ рдпреЛрдЧреНрдп рдХреНрдпреЛрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕ рдореБрджреНрджреЗ/рдмрд╛рддрдЪреАрдд рдХрд╛ рд╡рд┐рд╖рдп рдирд╣реАрдВ рд╣реИред
рдЪрдХреНрд░реАрдп рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдПрдХ рдЕрд▓рдЧ рд╡рд░реНрдЧ рдореЗрдВ рд░рдЦрдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ред рдЖрдк рдЧрдгрд┐рдд-рдХрдХреНрд╖рд╛ рдореЗрдВ multiplyMatrices
рд╡рд┐рдзрд┐ рд╕рдВрд▓рдЧреНрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдПрдХ рдЧреБрдгрдХ-рд╡рд░реНрдЧ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ multiplyMatrices
рд╡рд┐рдзрд┐ рд╣реЛред рд▓реЗрдХрд┐рди рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдХрд╣рд╛ рдерд╛, рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЪрдХреНрд░реАрдп рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рд╣рдЯрд╛рдирд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред рдЕрдЧрд░ рдЙрдиреНрд╣реЗрдВ рдирд╣реАрдВ рд╣рдЯрд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рд╣реИ, рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдореБрджреНрджрд╛ рдХрд░реАрдм рд╣реЛ рд╕рдХрддрд╛ рд╣реИ
#19137 рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЗрд╕реЗ рдЕрдм рдмрдВрдж рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ .
@ Mugen87 рд╡рд╛рд╣, 5 рд╕рд╛рд▓! рдЕрдВрдд рдореЗрдВ рдЗрд╕реЗ рд╣рд┐рдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдзрд╛рдИ :fire: :clap:
рдореБрдЭреЗ рдЙрди рд░реЗрдЦрд╛рдВрдХрди рдХреЛ рд╡рд╛рдкрд╕ рдмрдирд╛рдиреЗ рдореЗрдВ рдмрд╣реБрдд рдордЬрд╝рд╛ рдЖрдпрд╛: рдореБрд╕реНрдХрд╛рди_рдХреИрдЯ:
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
@ Mugen87 рд╡рд╛рд╣, 5 рд╕рд╛рд▓! рдЕрдВрдд рдореЗрдВ рдЗрд╕реЗ рд╣рд┐рдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдзрд╛рдИ :fire: :clap:
рдореБрдЭреЗ рдЙрди рд░реЗрдЦрд╛рдВрдХрди рдХреЛ рд╡рд╛рдкрд╕ рдмрдирд╛рдиреЗ рдореЗрдВ рдмрд╣реБрдд рдордЬрд╝рд╛ рдЖрдпрд╛: рдореБрд╕реНрдХрд╛рди_рдХреИрдЯ: