Three.js: рдЪрдХреНрд░реАрдп рдирд┐рд░реНрднрд░рддрд╛

рдХреЛ рдирд┐рд░реНрдорд┐рдд 16 рдорд╛рд░реНрдЪ 2015  ┬╖  81рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: mrdoob/three.js

рд╕реБрдирд┐рдпреЗ рд╕рдм рд▓реЛрдЧред

@kumavis рдФрд░ рдореИрдВ THREE.js рдХреЛ рдмреНрд░рд╛рдЙрдЬрд░рд╛рдЗрдЬрд╝ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдкрд░ рд▓реЗ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреБрд╢рд▓ рддрд░реАрдХрд╛ рдЦреЛрдЬрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдореЗрдВ рдХрдбрд╝реА рдореЗрд╣рдирдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред рд╣рдордиреЗ рдЕрдЪреНрдЫреА рдкреНрд░рдЧрддрд┐ рдХреА рд╣реИ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╕рднреА рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдмреНрд░рд╛рдЙрдЬрд░рд╛рдЗрдЬ рдмрд┐рд▓реНрдб рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЧрд▓реНрдк рдХреЗ рд╕рд╛рде рддреАрди.рдорд┐рди.рдЬреЗрдПрд╕ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИрдВред

рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдЙрджрд╛рд╣рд░рдг рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдо рдХреЗ рд╡рд┐рдкрд░реАрдд рдмреНрд░рд╛рдЙрдЬрд░рд╛рдЗрдЬрд╝ рдЪрдХреНрд░реАрдп рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЛ рд╕рдВрднрд╛рд▓ рдирд╣реАрдВ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рддреАрди.рдЬреЗрдПрд╕ рдореЗрдВ рдХрдИ рд╣реИрдВред

рдореИрдВрдиреЗ рдпрд╣рд╛рдВ рдирд┐рд░реНрднрд░рддрд╛ рд╕рдВрдмрдВрдзреЛрдВ рдХреЛ рджрд░реНрд╢рд╛рддреЗ рд╣реБрдП рдПрдХ рдЗрдВрдЯрд░реЗрдХреНрдЯрд┐рд╡ рдЧреНрд░рд╛рдл рдмрдирд╛рдпрд╛ рд╣реИред

рдЬрдм рддрдХ рдпреЗ рдЙрд▓рдЭ рдирд╣реАрдВ рдЬрд╛рддреЗ, рд╣рдо THREE.js рдХреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░рд╛рдЗрдЬрд╝ рдмрд┐рд▓реНрдб рдореЗрдВ рдирд╣реАрдВ рд▓реЗ рдЬрд╛ рд╕рдХреЗрдВрдЧреЗред

рдореИрдВ рдЗрд╕реЗ browserify рдХреА рдХрдореА рдирд╣реАрдВ рдорд╛рдирддрд╛, рдмрд▓реНрдХрд┐ THREE.js рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдорд╕реНрдпрд╛ рдорд╛рдирддрд╛ рд╣реВрдВред рд╕рд░реНрдХреБрд▓рд░ рдирд┐рд░реНрднрд░рддрд╛ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдореЗрдВ рдПрдХ рдмреБрд░реА рдЪреАрдЬ рд╣реИ, рдФрд░ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдЬрдиреНрдо рджреЗрддреА рд╣реИред

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

@ Mugen87 рд╡рд╛рд╣, 5 рд╕рд╛рд▓! рдЕрдВрдд рдореЗрдВ рдЗрд╕реЗ рд╣рд┐рдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдзрд╛рдИ :fire: :clap:
рдореБрдЭреЗ рдЙрди рд░реЗрдЦрд╛рдВрдХрди рдХреЛ рд╡рд╛рдкрд╕ рдмрдирд╛рдиреЗ рдореЗрдВ рдмрд╣реБрдд рдордЬрд╝рд╛ рдЖрдпрд╛: рдореБрд╕реНрдХрд╛рди_рдХреИрдЯ:

рд╕рднреА 81 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдпрд╣ рдХрд╛рдлреА рдЙрд▓рдЭреА рд╣реБрдИ рдЧрд╛рдБрда рд╣реИ
http://jsbin.com/medezu/2/edit?html ,js,output
image

@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 рдореЗрдВ рдЙрдирдХреЗ рдЖрдзрд╛рд░ рд╡рд░реНрдЧ рдХреЗ рд╕рд╛рде рджреЛ-рддрд░рдлрд╝рд╛ рд╡рд┐рд╡рд░рдг рд╣реИрдВ
image
рджреЗрдЦрдиреЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рд▓реЗрдХрд┐рди рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ Geometry s рдХрд╛ рдЖрдзрд╛рд░ рд╡рд░реНрдЧ рдкрд░ рдЕрдЪреНрдЫрд╛ рдПрдХрддрд░рдлрд╛ рд╡рд┐рд╡рд░рдг рд╣реИ
image
Light s рдФрд░ Camera s рдХреА рд╕реНрдерд┐рддрд┐ рд╕рдорд╛рди рд╣реИ - рдЙрдирдХреЗ рдЖрдзрд╛рд░ рд╡рд░реНрдЧ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдЕрдЪреНрдЫрд╛ рд╣реИ, рд▓реЗрдХрд┐рди Object3D рдХреА рдирд┐рд░реНрднрд░рддрд╛ _рдЙрди рдкрд░_ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд▓рдЧрддреА рд╣реИред
image
image
Curve s Path s Line s рдЕрдЪреНрдЫреЗ рд▓рдЧрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди Shape рдереЛрдбрд╝рд╛ рдЙрд▓рдЭрд╛ рд╣реБрдЖ рд╣реИред
image

@ рдХреЛрдмрд▓рд╛рд╕реНрдЯ рдзрдиреНрдпрд╡рд╛рдж! рдпрд╣ рдорд╣рд╛рди рдЕрдВрддрд░реНрджреГрд╖реНрдЯрд┐ рд╣реИред

рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЦреБрдж рдХреЛ рдЬреЛрдбрд╝рдирд╛ :)

рдмреАрдЯреАрдбрдмреНрд▓реНрдпреВ, рдореИрдВрдиреЗ рдЙрд╕ рддрд░рд╣ рд╕реЗ рджреЗрдЦрд╛ рд╣реИ рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рд╕рд╛рдордЧреНрд░реА 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 рдореИрдВрдиреЗ рдкрд░рд┐рдкрддреНрд░ рдирд┐рд░реНрднрд░рддрд╛ рдХреА рд╕рдорд╕реНрдпрд╛ рдореЗрдВ рднреА рднрд╛рдЧ рд▓рд┐рдпрд╛ рд╣реИред рдпрд╣ рдЬреНрдпрд╛рджрд╛рддрд░ рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ рдЬрдм рд╣рдо рд╕рд░реНрдХреБрд▓рд░ рд╕рдВрджрд░реНрднрд┐рдд рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рдЕрдВрджрд░ рдХреБрдЫ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдкреВрд░реНрд╡-рдирд┐рд░реНрдорд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣реЗ рд╣реИрдВред

6252 рдХреЛ Material рдФрд░ Object3D рдкрд░ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╕рд░реНрдХреБрд▓рд░ рдбрд┐рдкреНрд╕ рдХреЛ рд╕рд╛рдлрд╝ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдпрд╣рд╛рдБ Mesh рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рдмрд╛рд╣рд░реА рдЕрд╡рддрд░рдг рд╣реЛрдВ рд▓реЗрдХрд┐рди рдмрд╣реБрдд рдЕрдзрд┐рдХ рдкрд╛рдЧрд▓ рди рд╣реЛрдВред
image

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 рдкрд░ рдХреЛрдИ рдкреНрд░рднрд╛рд╡ рдирд╣реАрдВ рдкрдбрд╝реЗрдЧрд╛ред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдмрджрд▓рд╛рд╡ рдареАрдХ рд╣реИрдВред

@ рдХреБрдорд╛рд╡рд┐рд╕ рдЖрд╣! рд╣рд╛рдВред рдЕрдЪреНрдЫрд╛ рдЕрдм рдореИрдВ рд╕рдордЭ рдЧрдпрд╛ред рдпрд╣ рдХрд╛рдлреА рдЖрд╕рд╛рди рд╣реИред

рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░рдгреЛрдВ рд╕реЗ рдЖрд╡рд╢реНрдпрдХ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕рд╛рде рддреАрди рдЫреЛрдЯреЗ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реЛрдиреЗ рдХрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реВрдВ:

  1. рддреАрди рдмрд╣реБрдд рдмрдбрд╝рд╛ рд╣реИред рдпрджрд┐ рдХрд┐рд╕реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдХреЗрд╡рд▓ рд╡рд╣реА рдЪрд╛рд╣рд┐рдП рдЬреЛ рдЙрдиреНрд╣реЗрдВ рдЪрд╛рд╣рд┐рдП рддреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рдмрд┐рд▓реНрдб рдЖрдХрд╛рд░ рдореЗрдВ рдХрдЯреМрддреА рд╣реЛ рд╕рдХрддреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдмреВрдЯрд╕реНрдЯреНрд░реИрдк рдЖрдкрдХреЛ var Alert = require('react-bootstrap/lib/Alert'); рдЬреИрд╕реА рдЪреАрдЬреЗрдВ рдХрд░рдиреЗ рджреЗрддрд╛ рд╣реИ рдЬреЛ рдкреНрд░рддреНрдпреЗрдХ рдмреВрдЯрд╕реНрдЯреНрд░реИрдк рдореЙрдбреНрдпреВрд▓ рдХреЛ рдмрдВрдбрд▓ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
  2. рдХреБрдЫ "рдкреНрд▓рдЧрдЗрдиреНрд╕" рд╣реИрдВ, рдЬреИрд╕реЗ 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 рдПрдХ рдмрд╣реБрдд рд╣реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдФрд░ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд╕рд╛рде рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рддреМрд░ рдкрд░ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдореЙрдбреНрдпреВрд▓ рдкреЗрд╢ рдХрд░рддрд╛ рд╣реИ:

http://www.2ality.com/2014/09/es6-modules- final.html

@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/

рдпрд╣рд╛рдБ рдПрдХ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рд╣реИ:

snapshot3

рдореБрдЭреЗ рдпрд╣ рдмрддрд╛рддреЗ рд╣реБрдП рдЦреБрд╢реА рд╣реЛ рд░рд╣реА рд╣реИ рдХрд┐ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ Object3Ds рд╕рд░реНрдХрд┐рд▓ рдбрд┐рдкреЛ рд╕рдорд╛рдкреНрдд рдХрд░ рджрд┐рдП рдЧрдП рд╣реИрдВред рдЕрдЪреНрдЫрд╛ рдХрд╛рдо @kumavis!

рд╡рд╛рд╣ рдХреНрдпрд╛ рд╡рд╣реА рдХреЛрдбрдмреЗрд╕ рд╣реИ? рдкрд╛рдЧрд▓

рдЧреНрд░рд╛рдл рдЬрдирд░реЗрд╢рди рдХреЛ рдпреВрдЯрд┐рд▓рд┐рдЯреА рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдмрдирд╛рдиреЗ рдкрд░ рдХрд╛рдо рдХрд░реЗрдВрдЧреЗред

рдЕрдХреЗрд▓реЗ рдЧреНрд░рд╛рдл рдХреЗ рдирд┐рд░реАрдХреНрд╖рдг рдкрд░, Shape рдФрд░ Geometry рд╕рдВрднрд╡ рд╡рд░реНрдЧ рдХреЗ рдкреЗрдбрд╝ рдкреНрд░рддреАрдд рд╣реЛрддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╕реБрд▓рдЭрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

@coballast рдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕реЗ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ?

рд╡реЗрдХреНрдЯрд░ 3 рдореИрдЯреНрд░рд┐рдХреНрд╕ 4 рдореЗрдВ рд╕реНрдХреНрд░реИрдЪ рд╡рд░реНрд░реНрд╕ рдмрдирд╛рдирд╛ рдкрд╣рд▓реЗ рдЙрдкрдпреЛрдЧ рдкрд░ рдЖрд▓рд╕реА рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдкрд░рд┐рднрд╛рд╖рд╛ рд╕рдордп рдкрд░ рдирд╣реАрдВ

рдпрд╣ рдПрдХ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд╡рд┐рдкрд░реАрдд рдЕрдкрд╕реНрдЯреНрд░реАрдо dev рдХреЗ рдЦрд┐рд▓рд╛рдл рдПрдХ рдкреАрдЖрд░ рд╣реЛрдЧрд╛

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо "рдЧрдВрднреАрд░ рдЪрдХреНрд░реАрдп рдирд┐рд░реНрднрд░рддрд╛ рд╕рдорд╕реНрдпрд╛рдУрдВ" рд╕реЗ "рдЪрдХреНрд░реАрдп рдирд┐рд░реНрднрд░рддрд╛" рдХреЗ рдореБрджреНрджреЗ рдХреЗ рд╢реАрд░реНрд╖рдХ рдХреЛ рдбрд╛рдЙрдирдЧреНрд░реЗрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдмрд╣реБрдд рд╕реБрдзрд╛рд░ рд╣реБрдЖ рд╣реИ!

@ рдХреБрдорд╛рд╡рд┐рд╕ рдирд┐рд╢реНрдЪрд┐рдд рдмрд╛рддред рд╕рдордп рдорд┐рд▓рдиреЗ рдкрд░ рдЗрд╕ рдкрд░ рдХрд╛рдо рдХрд░реЗрдВрдЧреЗред

рдпрд╣рд╛рдБ рдЕрдиреНрдпреЛрдиреНрдпрд╛рд╢реНрд░рдп рд╕рдлрд╛рдИ рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдБ:
(рддреАрд░ рдРрд╕реЗ рдХрдиреЗрдХреНрд╢рди рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЙрдкрдпреБрдХреНрдд рд╣реЛрдиреЗ рдкрд░ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП)

  • [рдПрдХреНрд╕] рд╕рд╛рдордЧреНрд░реА
  • [x] рдЬреНрдпрд╛рдорд┐рддрд┐
  • [x] рдСрдмреНрдЬреЗрдХреНрдЯ 3рдбреА's
  • [рдПрдХреНрд╕] рдорда
  • [x] рдЖрдХрд╛рд░

    • [x] рдЖрдХрд╛рд░ -> FontUtils

    • [x] рдЖрдХрд╛рд░ -> ExtrudeGeometry

    • [x] рдЖрдХрд╛рд░ -> рдЖрдХрд╛рд░ рдЬреНрдпрд╛рдорд┐рддрд┐

    • [x] рдкрде -> рдЖрдХрд╛рд░

  • [] рдмреЙрдХреНрд╕3

    • [ ] Box3 -> BufferGeometry

    • [] Box3 -> рдЬреНрдпрд╛рдорд┐рддрд┐

рдЖрдХрд╛рд░:

image

рдмреЙрдХреНрд╕3:

image

рдЧрдгрд┐рдд:

рдпреЗ рдиреЛрдбреНрд╕ рдЖрдкрд╕ рдореЗрдВ рдЬреБрдбрд╝реЗ рд╣реБрдП рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд░реНрдпрд╛рдкреНрдд рд╕реБрд╡рд┐рдзрд╛ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред
image

рдЖрдХрд╛рд░ рдЗрд╕ рддрд░рд╣ рдХреЛрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ 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:
рдореБрдЭреЗ рдЙрди рд░реЗрдЦрд╛рдВрдХрди рдХреЛ рд╡рд╛рдкрд╕ рдмрдирд╛рдиреЗ рдореЗрдВ рдмрд╣реБрдд рдордЬрд╝рд╛ рдЖрдпрд╛: рдореБрд╕реНрдХрд╛рди_рдХреИрдЯ:

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

jens-duttke picture jens-duttke  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Horray picture Horray  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

makc picture makc  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

clawconduce picture clawconduce  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

ghost picture ghost  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ