Three.js: цикличСскиС зависимости

Π‘ΠΎΠ·Π΄Π°Π½Π½Ρ‹ΠΉ Π½Π° 16 ΠΌΠ°Ρ€. 2015  Β·  81ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ  Β·  Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: mrdoob/three.js

ВсСм ΠΏΡ€ΠΈΠ²Π΅Ρ‚.

@kumavis ΠΈ я усСрдно Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ, ΠΏΡ‹Ρ‚Π°ΡΡΡŒ Π½Π°ΠΉΡ‚ΠΈ эффСктивный способ пСрСнСсти THREE.js Π½Π° Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π½ΡƒΡŽ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρƒ. ΠœΡ‹ добились Ρ…ΠΎΡ€ΠΎΡˆΠ΅Π³ΠΎ прогрСсса, Π²ΠΏΠ»ΠΎΡ‚ΡŒ Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ всС Ρ„Π°ΠΉΠ»Ρ‹ Π±Ρ‹Π»ΠΈ пСрСнСсСны Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π½ΡƒΡŽ систСму сборки ΠΈ ΠΌΡ‹ смогли ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ three.min.js с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ gulp.

К соТалСнию, ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ commonjs browserify Π½Π΅ ΡƒΠΌΠ΅Π΅Ρ‚ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ цикличСскиС зависимости, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π² THREE.js ΠΌΠ½ΠΎΠ³ΠΎ.

Π― сдСлал здСсь ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ Π³Ρ€Π°Ρ„ΠΈΠΊ, ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‰ΠΈΠΉ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ зависимости.

Π”ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° ΠΎΠ½ΠΈ Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ распутаны, ΠΌΡ‹ Π½Π΅ смоТСм пСрСнСсти THREE.js Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π½ΡƒΡŽ сборку.

Π― Π½Π΅ ΡΡ‡ΠΈΡ‚Π°ΡŽ это нСдостатком Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°, Π° скорСС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ THREE.js. ЦикличСскиС зависимости β€” это плохая Π²Π΅Ρ‰ΡŒ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΌ обСспСчСнии Π² Ρ†Π΅Π»ΠΎΠΌ, ΠΈ ΠΎΠ½ΠΈ приводят ΠΊ всСвозмоТным ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌ.

Π‘Π°ΠΌΡ‹ΠΉ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

@ Mugen87 Π²Π°Ρƒ, 5 Π»Π΅Ρ‚! ΠΏΠΎΠ·Π΄Ρ€Π°Π²Π»ΡΡŽ с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π½Π°ΠΊΠΎΠ½Π΅Ρ† ΠΏΠΎΠΏΠ°Π» Π² Ρ†Π΅Π»ΡŒ :fire: :clap:
МнС Ρ‚ΠΎΠ³Π΄Π° Π±Ρ‹Π»ΠΎ ΠΎΡ‡Π΅Π½ΡŒ вСсСло Π΄Π΅Π»Π°Ρ‚ΡŒ эти Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ :smile_cat:

ВсС 81 ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

это довольно ΡƒΠ·Π΅Π», Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°ΡΠΏΡƒΡ‚Π°Ρ‚ΡŒ
http://jsbin.com/medezu/2/edit?html , js, Π²Ρ‹Π²ΠΎΠ΄
image

@coballast , ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π»ΠΈ Π²Ρ‹ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ использовали для создания зависимости json?

ΠŸΡ€ΠΎΡΡ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ скомпилированный Ρ„Π°ΠΉΠ» three.min.js Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ. НСт нСобходимости Ρ€Π°Π·Π±ΠΈΠ²Π°Ρ‚ΡŒ Three.js Π½Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ Π² Browserfy, Π²Ρ‹ просто услоТняСтС сСбС Тизнь Π±Π΅Π· Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ ΠΏΠΎΠ»ΡŒΠ·Ρ‹.

Π― Π³ΠΎΠ²ΠΎΡ€ΡŽ ΠΏΠΎ своСму ΠΎΠΏΡ‹Ρ‚Ρƒ, ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ npm для three.js, ΠΈ ΠΎΠ½ ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚. ΠœΡ‹ просто ΡƒΠΏΠ°ΠΊΠΎΠ²Ρ‹Π²Π°Π΅ΠΌ Π΅Π³ΠΎ Π² ΠΎΠ΄ΠΈΠ½ Ρ„Π°ΠΉΠ» ΠΈ ΠΎΠ±ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Π΅ΠΌ Π² ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π² стилС CommonJS. Π­Ρ‚ΠΎΡ‚ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ для Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°, ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ люди ΡƒΠΆΠ΅ Π΄Π΅Π»Π°ΡŽΡ‚ это, ΠΊΠ°ΠΊ я понимаю.

Для этого Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° использования Ρ€Π°ΡΠΏΡƒΡ‚Ρ‹Π²Π°Ρ‚ΡŒ этот ΡƒΠ·Π΅Π» Π½Π΅ трСбуСтся.

@kumavis Π― Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ сбросил структуру зависимостСй. Π—Π°Ρ‚Π΅ΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ сгСнСрировал Π³Ρ€Π°Ρ„ΠΈΠΊ:

var fs = require('fs-extra');
var unique = require('uniq');
var util = require('util');

function getRequiredObjects(dependencies){
  var result = [];
  for(var i = 0; i < dependencies.usedObjects.length; i++){
    var object = dependencies.usedObjects[i];
    if(dependencies.definedObjects.indexOf(object) == -1)
      result.push(object);
  }

  return result;
};

var dependencies = JSON.parse(fs.readFileSync('./dependencies.json'));

var objects = [];
for(var f in dependencies){
  objects = objects.concat(dependencies[f].usedObjects);
  objects = objects.concat(dependencies[f].definedObjects);
}

objects = unique(objects);


var nodes = objects.map(function(o){
  return {data: {id: o} };
});

var edges = [];
for(var f in dependencies){
  var dependency = dependencies[f];
  var requiredObjects = getRequiredObjects(dependency);
  for(var j = 0; j < dependency.definedObjects.length; j++){
    for(var k = 0; k < requiredObjects.length; k++){
      edges.push({ data: { source: dependency.definedObjects[j], target: requiredObjects[k] } });
    }
  }
}

var graph = {nodes: nodes, edges: edges};

var eliminateImpossibleCycleNodes = function(graph){
  graph.nodes = graph.nodes.filter(function(node){
    var source_edge = null;
    var dest_edge = null;
    for(var i = 0; i < graph.edges.length; i++){
      if(graph.edges[i].data.source == node.data.id)
        source_edge = graph.edges[i];
      if(graph.edges[i].data.target == node.data.id)
        dest_edge = graph.edges[i];
    }

    if(source_edge != null && dest_edge != null)
      return true;
    else
      return false;
  });

  graph.edges = graph.edges.filter(function(edge){
    var source_exists = false, target_exists = false;
    for(var i = 0; i < graph.nodes.length; i++){
      if(edge.data.source == graph.nodes[i].data.id)
        source_exists = true;
      if(edge.data.target == graph.nodes[i].data.id)
        target_exists = true;
    }

    return source_exists && target_exists;
  });
};

for(var i = 0; i < 500; i++)
  eliminateImpossibleCycleNodes(graph)


console.log(JSON.stringify(graph));

@bhouston большС ΠΎ состоянии ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠΉ Π±Π°Π·Ρ‹ three.js

Π― просто знаю, Ρ‡Ρ‚ΠΎ Π² матСматичСской Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ я изрядно ΠΏΠΎΠΌΠΎΠ³, цикличСскиС зависимости ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π½ΠΎΡ€ΠΌΠΎΠΉ для всСх языков. ΠŸΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π° Matrix4 ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Vector3 Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², Π° Vector3 ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ Matrix4. Если Π±Ρ‹ всС зависимости Π² матСматичСской Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ Π±Ρ‹Π»ΠΈ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ, это сдСлало Π±Ρ‹ эту Ρ‡Π°ΡΡ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Ρ€Π°Π·Π΄Ρ€Π°ΠΆΠ°ΡŽΡ‰Π΅ΠΉ Π² использовании.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ я Π²Ρ‹ΡΡ‚ΡƒΠΏΠ°ΡŽ Π·Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ матСматичСская Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π½Π΅ Π·Π½Π°Π»Π° Π½ΠΈ ΠΎ ΠΊΠ°ΠΊΠΎΠΉ Π΄Ρ€ΡƒΠ³ΠΎΠΉ части Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ β€” Π±ΠΎΠ»Π΅Π΅ слоТныС Ρ‚ΠΈΠΏΡ‹ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€ΠΎΠ½ΠΈΠΊΠ°Ρ‚ΡŒ Π² этот ΠΌΠΎΠ΄ΡƒΠ»ΡŒ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π² этом смыслС я Π²Ρ‹ΡΡ‚ΡƒΠΏΠ°ΡŽ Π·Π° ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΠ΅ ΠΌΠ΅ΠΆΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½Ρ‹Ρ… цикличСских зависимостСй, Π½ΠΎ Π½Π΅ Π·Π° ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ всСх цикличСских зависимостСй ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ Π²Π½ΡƒΡ‚Ρ€ΠΈ модуля.

Π’ΠΎΡ‚ случай, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ‚ΠΎΠ½ΠΊΠΈΠ΅ слоТности. Π§Ρ‚ΠΎΠ±Ρ‹ Π±Ρ‹Π»ΠΎ понятно, здСсь я ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π΅Π½ Π½Π΅ ΠΊ самой Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, Π° ΠΊ ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹ΠΌ эффСктам.

Vector3 ΠΈ Matrix4 ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‚ Ρ†ΠΈΠΊΠ»ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ΠΈ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ряд Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Π° Π² качСствС Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… ΠΈΠ»ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ². Оба Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ Π² стилС, ΠΎΠ±Ρ‰Π΅ΠΌ для Three.js, опрСдСляя Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ‡Π΅Ρ€Π΅Π· IIFE для Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… для выполнСния вычислСний.

Matrix4#lookAt ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ экзСмпляр нуля, ΠΊΠ°ΠΊ Ρ‡Π°ΡΡ‚ΡŒ опрСдСлСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

lookAt: function () {

  var x = new THREE.Vector3();
  var y = new THREE.Vector3();
  var z = new THREE.Vector3();

  return function ( eye, target, up ) {
    /* ... */

Однако Vector3#project Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ экзСмпляр нуля ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ запускС.

project: function () {

  var matrix;

  return function ( camera ) {

    if ( matrix === undefined ) matrix = new THREE.Matrix4();

    /* ... */

ΠŸΠΎΡ‡Π΅ΠΌΡƒ? ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ класса Π΅Ρ‰Π΅ Π½Π΅ всС классы Π±Ρ‹Π»ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹. ΠŸΡ€ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ Vector3 Matrix4 Π΅Ρ‰Π΅ Π½Π΅ сущСствуСт. Π’Π΅ΠΏΠ΅Ρ€ΡŒ фактичСскоС врСмя создания Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½ΠΎ. Π Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ Π²Ρ‹Π²ΠΎΠ΄ здСсь Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ тСкущая рСализация зависит ΠΎΡ‚ порядка, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ систСма сборки ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚ Ρ„Π°ΠΉΠ»Ρ‹. Π­Ρ‚ΠΎ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ далСкая связь, ΠΈ измСнСния Π² систСмС сборки ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»ΠΎΠ² Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎ измСняСтся порядок объСдинСния, ΠΌΠΎΠ³ΡƒΡ‚ привСсти ΠΊ нСдопустимым сборкам Π±Π΅Π· ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎΠΉ связи.

Π­Ρ‚ΠΎ лишь ΠΎΠ΄ΠΈΠ½ ΠΈΠ· способов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ этот ΡƒΠ·Π΅Π» прСвращаСтся Π² ΠΆΡƒΠΊΠΎΠ². Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, хотя ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ эту ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΡƒΡŽ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ, Ρƒ мСня Π½Π΅Ρ‚ ΠΎΠ±Ρ‰Π΅Π³ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π½Π΅ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π»ΠΎ Π±Ρ‹ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… критичСских ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² API.

Π₯ΠΌ... Π― взглянул Π½Π° ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ ILM C++, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΡΡ‡ΠΈΡ‚Π°ΡŽ Π·ΠΎΠ»ΠΎΡ‚Ρ‹ΠΌ стандартом срСди матСматичСских Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ. Π£Π΄ΠΈΠ²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, Π½ΠΎ ΠΎΠ½ΠΈ Π½Π΅ Ρ†ΠΈΠΊΠ»ΠΈΡ‡Π½Ρ‹. Π£ Π½ΠΈΡ… Π² основном Π΅ΡΡ‚ΡŒ Ρ‡Π΅Ρ‚ΠΊΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ порядок простых ΠΈ слоТных Ρ‚ΠΈΠΏΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ½ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚, ΠΈ я Π΄ΡƒΠΌΠ°ΡŽ, Ссли Π²Ρ‹ сдСлаСтС это ΠΎΡ‡Π΅Π½ΡŒ Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, это сработаСт:

https://github.com/openexr/openexr/tree/master/IlmBase/Imath

Math, Π° Π·Π°Ρ‚Π΅ΠΌ Vec каТСтся самым простым.

Π”Π°Π»ΡŒΠ½Π΅ΠΉΡˆΠΈΠ΅ наблюдСния ΠΏΠΎ Π³Ρ€Π°Ρ„ΠΈΠΊΡƒ зависимости:

Material ΠΈΠΌΠ΅ΡŽΡ‚ двусторонниС связи со своим Π±Π°Π·ΠΎΠ²Ρ‹ΠΌ классом.
image
НСмного слоТно ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, Π½ΠΎ Geometry s, ΠΏΠΎΡ…ΠΎΠΆΠ΅, ΠΈΠΌΠ΅ΡŽΡ‚ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠ΅ односторонниС зависимости ΠΎΡ‚ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса.
image
Π‘ Light ΠΈ Camera ситуация Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Π° β€” это Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡŽ ΠΊ ΠΈΡ… Π±Π°Π·ΠΎΠ²ΠΎΠΌΡƒ классу, Π½ΠΎ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ Object3D _ΠΎΡ‚ Π½ΠΈΡ…_ каТСтся Π½Π΅Π½ΡƒΠΆΠ½ΠΎΠΉ.
image
image
Curve s Path s Line s каТСтся Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΌ, Π½ΠΎ Shape Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π·Π°ΠΏΡƒΡ‚Π°Π½.
image

@coballast спасибо! это Π²Π΅Π»ΠΈΠΊΠΎΠ΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅.

Π”ΠΎΠ±Π°Π²Π»ΡΡŽ сСбя для ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π² :)

ΠšΡΡ‚Π°Ρ‚ΠΈ, я посмотрСл, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠ°ΠΊ Material зависит ΠΎΡ‚ MeshDepthMaterial. Π­Ρ‚ΠΎ просто

if ( this instanceof THREE.MeshDepthMaterial )

ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π½Π°

if ( this.type == 'MeshDepthMaterial' )

ΠΈ вуаля - Π½Π΅Ρ‚ зависимости. Π― ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°ΡŽ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π° этого ΡΡ‚Ρ€Π°ΡˆΠ½ΠΎΠ³ΠΎ Π³Ρ€Π°Ρ„ΠΈΠΊΠ° прСдставляСт собой Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹.

Π·Π°Π±Π°Π²Π½ΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ эта Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ ΠΈΠΌΠ΅Π΅Ρ‚ мСсто Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ toJSON. Π― имСю Π² Π²ΠΈΠ΄Ρƒ, нСльзя Π»ΠΈ вмСсто этого просто Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π² MeshDepthMaterial? Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Ρ‚ΠΈΠΏΠ°

THREE.MeshDepthMaterial.prototype.toJSON =  function () {
    var output = THREE.Material.prototype.toJSON.apply(this);
    if ( this.blending !== THREE.NormalBlending ) output.blending = this.blending;
    if ( this.side !== THREE.FrontSide ) output.side = this.side;

@makc Π’ ΠΎΠ±Ρ‰Π΅ΠΌ, Π²Π΅Π·Π΄Π΅, Π³Π΄Π΅ ΠΌΡ‹ Π΄Π΅Π»Π°Π΅ΠΌ instanceof , ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ этот ΠΊΠΎΠ΄ Π² сам ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ класс. Π­Ρ‚ΠΎ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ ΡƒΠ·Π»ΠΎΠ².

просто Ρ…ΠΎΡ‚Π΅Π» ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ хотя AMD Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ цикличСскиС ссылки, ΠΌΠΎΠ΄ΡƒΠ»ΠΈ ES6 ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ https://github.com/ModuleLoader/es6-module-loader/wiki/Circular-References-&-Bindings

ΠΌΠ½Π΅ просто Π»ΡŽΠ±ΠΎΠΏΡ‹Ρ‚Π½ΠΎ ΡƒΠ·Π½Π°Ρ‚ΡŒ, ΠΏΠΎΠΌΠΈΠΌΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ зависимостСй (которая ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅ΡˆΠ΅Π½Π° ΠΏΡ€ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΠ³ΠΎ систСмного Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊΠ°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, system.js ), ΠΊΠ°ΠΊΠΈΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ создаСт цикличСская ссылка Π² three.js?

К ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, ΠΏΠΎΡ…ΠΎΠΆΠ΅, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π°Ρ‚Π°ΠΊΠΎΠ²Π°Ρ‚ΡŒ это поэтапно. Π― Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… выпусках Π±Ρ‹Π»ΠΎ внСсСно ΠΌΠ½ΠΎΠ³ΠΎ критичСских ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ API, поэтому я Π½Π΅ ΡƒΠ²Π΅Ρ€Π΅Π½, Ρ‡Ρ‚ΠΎ это ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ.

Π’ случаях instanceof (Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅) ΠΎΠ½ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½Ρ‹ Π±Π΅Π· критичСских ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ.

Π― Ρ‚ΠΎΠΆΠ΅ ΠΏΠΎΠ΄ΠΏΠΈΡΡ‹Π²Π°ΡŽΡΡŒ здСсь. Π”Π°Π²Π°ΠΉΡ‚Π΅ шаг Π·Π° шагом здСсь.
Π― согласСн, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ всС Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Π΅ цикличСскиС зависимости, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΡŒΠ½Π°Ρ.
Π― Ρ‚Π°ΠΊΠΆΠ΅ согласСн с @bhouston Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ матСматичСская Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΎΡ‡Π΅Π½ΡŒ зависит Π΄Ρ€ΡƒΠ³ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π°, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ взаимодСйствиС Π΄Π΅Π»Π°Π΅Ρ‚ ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ.

ΠœΠΎΠΆΠ΅Ρ‚ ΠΊΡ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π½Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ Π»Π΅Π³ΠΊΠΈΠ΅?? ВсСгда ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ мСньшС цикличСских зависимостСй, Ссли это Π½Π΅ ΠΌΠ΅ΡˆΠ°Π΅Ρ‚ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅. ПозТС ΠΌΡ‹ смоТСм ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ с ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ.

@ zz85 Π― Ρ‚Π°ΠΊΠΆΠ΅ столкнулся с ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ цикличСских зависимостСй. Π’ основном это ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ пытаСмся ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ² с цикличСскими ссылками.

6252 Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡƒΠ±Ρ€Π°Ρ‚ΡŒ мноТСство цикличСских ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° Material ΠΈ Object3D .

Π’ΠΎΡ‚ ΠΊΠ°ΠΊ выглядит Mesh . ΠœΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ посторонниС дСпсы, Π½ΠΎ Π½Π΅ слишком ΡΡƒΠΌΠ°ΡΡˆΠ΅Π΄ΡˆΠΈΠ΅.
image

Циркуляр с Object3D ΠΈ Geometry . Бсылка Object3D -> Mesh рассматриваСтся Π² PR Π²Ρ‹ΡˆΠ΅. Бсылка Mesh -> Geometry Π² порядкС, b/c Mesh управляСт экзСмпляром Geometry . Π•Π³ΠΎ всС Π΅Ρ‰Π΅ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π·ΠΎΡ€Π²Π°Ρ‚ΡŒ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ выполняСт ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ Ρ‚ΠΈΠΏΠΎΠ² для повСдСния, спСцифичного для класса ( Geometry / BufferGeometry ).

Π§Ρ‚ΠΎ касаСтся ссылки Geometry -> Mesh , Ρ‚ΠΎ ΠΎΠ½Π° Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ geometry.mergeMesh( mesh ) . Geometry β€” это концСпция Π±ΠΎΠ»Π΅Π΅ Π½ΠΈΠ·ΠΊΠΎΠ³ΠΎ уровня, Ρ‡Π΅ΠΌ Mesh , поэтому я Π±Ρ‹ ΠΈΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π» Π΅Π΅ ΠΊΠ°ΠΊ mesh.mergeIntoGeometry( geo ) ΠΈ отказался mergeMesh .

Если ΠΊΡ‚ΠΎ-Ρ‚ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ pr слияниС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ исправляСт Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· Π½ΠΈΡ…, Π΄Π°ΠΉΡ‚Π΅ ΠΌΠ½Π΅ Π·Π½Π°Ρ‚ΡŒ, ΠΈ я обновлю Π³Ρ€Π°Ρ„ΠΈΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚Ρ€Π°Π·ΠΈΡ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄Π΅Π».

@bhouston @gero3 Π― Π½Π΅ ΡƒΠ²Π΅Ρ€Π΅Π½, Ρ‡Ρ‚ΠΎ цикличСскиС зависимости Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ удобства использования/полСзности для матСматичСской Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ. Π― ΠΌΠΎΠ³Ρƒ ΠΎΡˆΠΈΠ±Π°Ρ‚ΡŒΡΡ, Π½ΠΎ нСльзя Π»ΠΈ ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Vector3 ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ/нСосвСдомлСнным ΠΎΠ± ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠΉ систСмС ΠΈ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π·ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Matrix4 Π² ΠΌΠΎΠ΄ΡƒΠ»Π΅ Matrix4? Π­Ρ‚ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ смысл для мСня ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠœΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Π±ΠΎΠ»Π΅Π΅ слоТны, Ρ‡Π΅ΠΌ Π’Π΅ΠΊΡ‚ΠΎΡ€Ρ‹. Π― Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ‡Π΅Ρ‚ΠΊΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ порядок, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΡ‹ ΠΈ классы, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π½Π΅ΡƒΠ΄Π°Ρ‡ΠΈ.

@bhouston @gero3 Π”ΡƒΠΌΠ°ΡŽ, ΠΌΡ‹ смоТСм ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это Π²ΠΎΠΎΠ±Ρ‰Π΅ Π±Π΅Π· измСнСния API. Π― ΠΏΠΎΠΊΠΎΠ²Ρ‹Ρ€ΡΡŽΡΡŒ ΠΈ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€ΡŽ, Ρ‡Ρ‚ΠΎ ΠΊ Ρ‡Π΅ΠΌΡƒ.

Ρ‡Ρ‚ΠΎ касаСтся ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠΈ, я Π΄ΡƒΠΌΠ°ΡŽ, Π²Ρ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ просто ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ всС Β«Π±Π»ΠΎΠΊΠ½ΠΎΡ‚Ρ‹Β» Π² ΠΎΠ΄Π½ΠΎΠΌ мСстС. Π½ΠΎ я ΡƒΠ²Π΅Ρ€Π΅Π½, Ρ‡Ρ‚ΠΎ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π½ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠ³ΠΎΠ΄Π½ΠΎΠ³ΠΎ для использования Π³Ρ€Π°Ρ„Π° 3js, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π½Π΅ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΈ Vector3, ΠΈ Matrix4.

Если Π΅ΡΡ‚ΡŒ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π½Π΅ мСняСт ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈΠ»ΠΈ API матСматичСской Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, я Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π°.

@coballast Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Ρ†ΠΈΠΊΠ»ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ Π±Π΅Π· измСнСния API, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ±Π° ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠ΅ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ‚ΠΈΠΏ. Vector3 Matrix4

Π§Ρ‚ΠΎ касаСтся совмСстимости Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°, нашС СдинствСнноС Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ β€” ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ созданиС экзСмпляров Ρ€Π°Π±ΠΎΡ‡ΠΈΡ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π²Π½Π΅ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ опрСдСлСния класса (Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΈΡ… ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ экзСмпляры ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ запускС). Π‘Π΄Π΅Π»Π°ΠΉΡ‚Π΅ это Π»Π΅Π½ΠΈΠ²Ρ‹ΠΌ , ΠΊΠ°ΠΊ это . Π­Ρ‚ΠΎ Π½Π΅ повлияСт Π½Π° API ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ.

Π― Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΈΠ΅ измСнСния Π² порядкС Π²Π΅Ρ‰Π΅ΠΉ.

@kumavis Ах! Π΄Π°. Π₯ΠΎΡ€ΠΎΡˆΠΎ, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ я понимаю. Π­Ρ‚ΠΎ достаточно Π»Π΅Π³ΠΊΠΎ.

Π― ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ THREE Π½Π° Π±ΠΎΠ»Π΅Π΅ ΠΌΠ΅Π»ΠΊΠΈΠ΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ с Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΠΎΠΉ структурой ΠΏΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ:

  1. ВРИ ΠΎΡ‡Π΅Π½ΡŒ большиС. Если Π±Ρ‹ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠ³ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π΅ΠΌΡƒ Π½ΡƒΠΆΠ½ΠΎ, это ΠΌΠΎΠ³Π»ΠΎ Π±Ρ‹ ΡΠΎΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ сборки ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°. НапримСр , react-bootstrap позволяСт Π²Π°ΠΌ Π΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ Π²Π΅Ρ‰ΠΈ, ΠΊΠ°ΠΊ var Alert = require('react-bootstrap/lib/Alert'); , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡŽΡ‚ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ.
  2. Π•ΡΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Β«ΠΏΠ»Π°Π³ΠΈΠ½Ρ‹Β», Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ OrbitControls.js , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‚ сам Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ THREE, помСщая сСбя Π² THREE.OrbitControls . Π­Ρ‚ΠΎ Π°Π½Ρ‚ΠΈ-шаблон Π² соврСмСнных Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ°Ρ… javascript, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ присутствия THREE Π² глобальном пространствС ΠΈΠΌΠ΅Π½ Π² процСссС сборки, Π° Π½Π΅ для Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π² Π½Π΅ΠΌ Π½ΡƒΠΆΠ΄Π°ΡŽΡ‚ΡΡ. THREE Ρ‚Π°ΠΊΠΆΠ΅ Π΄Π΅Π»Π°Π΅Ρ‚ это Π²Π½ΡƒΡ‚Ρ€ΠΈ, всСгда модифицируя пространство ΠΈΠΌΠ΅Π½ THREE, Ρ‡Ρ‚ΠΎ Π½Π΅ идСально для Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ THREE.

поставив сСбя Π½Π° THREE.OrbitControls

Π½ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ ΠΊΠΎΠ΄Π° Π² 3js Π΄Π΅Π»Π°Π΅Ρ‚ это?

@DelvarWorld написал:

Π― ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ THREE Π½Π° Π±ΠΎΠ»Π΅Π΅ ΠΌΠ΅Π»ΠΊΠΈΠ΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ с Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΠΎΠΉ структурой ΠΏΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ:

РаньшС я Π΄ΡƒΠΌΠ°Π», Ρ‡Ρ‚ΠΎ это Ρ…ΠΎΡ€ΠΎΡˆΠ°Ρ идСя, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π·Π±ΠΈΡ‚ΡŒ Π΅Π³ΠΎ, Π½ΠΎ сСйчас Π² ThreeJS Π΅ΡΡ‚ΡŒ простота. Он Π±ΠΎΠ»Π΅Π΅ ΡƒΠ΄ΠΎΠ±Π΅Π½ для Π½ΠΎΠ²ΠΈΡ‡ΠΊΠΎΠ² Π² 3D Π² Ρ‚ΠΎΠΌ Π²ΠΈΠ΄Π΅, Π² ΠΊΠ°ΠΊΠΎΠΌ ΠΎΠ½ Π΅ΡΡ‚ΡŒ сСйчас, ΠΈ это Π±Ρ‹Π»ΠΎ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ΠΎΠΌ для ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ². Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ThreeJS, Π½Π΅ Π½ΡƒΠΆΠ΄Π°ΡΡΡŒ Π² ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΠΉ систСмС (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠ½ΠΎΠ³ΠΎ, ΠΈ Π½Π΅ всС ΠΎΠ½ΠΈ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ совмСстимы).

Как ΠΈ @makc , я Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠ·Π°Π΄Π°Ρ‡Π΅Π½ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ @DelvarWorld Π½Π΅ ΠΏΠΎΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ Π²Π΅Ρ‰ΠΈ Π² пространство ΠΈΠΌΠ΅Π½ THREE.

Π“Π΄Π΅ / ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ вмСсто этого?

МнС каТСтся Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΌ шаблоном ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ВРИ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ находятся всС Π΅Π³ΠΎ части (ΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ/ΠΏΠ»Π°Π³ΠΈΠ½Ρ‹).

Π― согласСн с @DelvarWorld Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ размСщСния Π½Π° глобальном ΡƒΡ€ΠΎΠ²Π½Π΅ Π²Ρ€Π΅Π΄Π΅Π½ для Π·Π΄ΠΎΡ€ΠΎΠ²ΡŒΡ ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠΉ Π±Π°Π·Ρ‹ - это своСго Ρ€ΠΎΠ΄Π° Ρ‚ΠΎΠ½ΠΊΠΈΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ Π΅Π³ΠΎ Π½Π° глобальном ΡƒΡ€ΠΎΠ²Π½Π΅ само ΠΏΠΎ сСбС Π½Π΅ являСтся ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ, это скрытый Π³Ρ€Π°Ρ„ зависимостСй ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΡ€ΠΈΠ΅ΠΌΡ‹, Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‰ΠΈΠ΅ ΠΈΠ·-Π·Π° доступности Ρ„Π°ΠΉΠ»Π° global.

Но этот Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Π² основном ограничиваСтся Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ ΠΈ структурой ΠΊΠΎΠ΄Π°. Π§Ρ‚ΠΎ касаСтся доставки Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π² Π²ΠΈΠ΄Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚Π° статичСского ΠΊΠΎΠ΄Π°, Ρ‚ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ всСх классов Π² глобальном THREE ΠΈΠΌΠ΅Π΅Ρ‚ для мСня смысл.

ВстрСчный Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ дСсСриализации json-сцСны THREE.js записи ΠΌΠΎΠ³ΡƒΡ‚ просто ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΡΡ‚ΡŒ свой класс Π² Π²ΠΈΠ΄Π΅ строки, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·Π²Π»Π΅Ρ‡ΡŒ ΠΈΠ· глобального, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€: THREE[ obj.type ] . Π­Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с классами, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅Ρ‚ Π² стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ three.js, Ссли Π²Ρ‹ опрСдСляСтС ΠΈΡ… Π² THREE ΠΏΠ΅Ρ€Π΅Π΄ дСсСриализациСй. НС ΡƒΠ²Π΅Ρ€Π΅Π½, ΠΊΠ°ΠΊ Π»ΡƒΡ‡ΡˆΠ΅ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ это ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π±Π΅Π· глобального THREE .

Π­Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с классами, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅Ρ‚ Π² стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ three.js, Ссли Π²Ρ‹ опрСдСляСтС ΠΈΡ… Π² THREE ΠΏΠ΅Ρ€Π΅Π΄ дСсСриализациСй. НС ΡƒΠ²Π΅Ρ€Π΅Π½, ΠΊΠ°ΠΊ Π»ΡƒΡ‡ΡˆΠ΅ всСго Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ это ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π±Π΅Π· глобального THREE.

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ этот шаблон (ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ Π΅Π³ΠΎ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚), Ссли всС являСтся ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΌ:

var objectType = require( "THREE." + obj.type );

Π’ ES6 Π΅ΡΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, ΠΊΠ°ΡΠ°ΡŽΡ‰ΠΈΡ…ΡΡ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ. Π’ этот ΠΌΠΎΠΌΠ΅Π½Ρ‚ я Π±Ρ‹ пСрСсмотрСл ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ ThreeJS.

ВстроСнная вСрсия three (Ρ„Π°ΠΉΠ» javascript, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ люди ΠΌΠΎΠ³ΡƒΡ‚ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ) ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ всС Π² пространствС ΠΈΠΌΠ΅Π½ three. Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это с Ρ„Π°ΠΉΠ»ΠΎΠΌ Ρ‚ΠΎΡ‡ΠΊΠΈ Π²Ρ…ΠΎΠ΄Π° для сборки:

var THREE = {
    Geometry: require("./geometry"),

ΠΈ Ρ‚. Π΄., ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ Π½ΠΎΠ²ΠΈΡ‡ΠΊΠ°ΠΌ ΠΈ с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Π±ΡƒΠ΄Π΅Ρ‚ Π»Π΅Π³ΠΊΠΎ Π½Π°Ρ‡Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ.

Для Ρ‚Π΅Ρ…, ΠΊΡ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ‚Ρ€ΠΈ ΠΈΠ· npm ΠΈ requirejs/browserify/webpack Π² соврСмСнной сборкС javascript, ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅

var Scene = require("three/scene"),
     Camera = require("three/camera"),

ΠΈ Ρ‚. Π΄., Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· Ρ‚Ρ€Π΅Ρ… Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ², встроСнных Π² ΠΏΠ°ΠΊΠ΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°. Π― ΠΌΠΎΠ³Ρƒ ΠΎΡˆΠΈΠ±Π°Ρ‚ΡŒΡΡ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π½Π΅ знаю, сколько ΠΈΠ· Ρ‚Ρ€Π΅Ρ… являСтся «ядром». Однако сСйчас это Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π² Ρ„Π°ΠΉΠ»Π΅ three Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ require.

Π² любом случаС соврСмСнный шаблон Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ, ΠΈ вмСсто Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ вСсь ваш ΠΊΠΎΠ΄ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π» Π΄Ρ€ΡƒΠ³ΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ (модифицируя Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½ΡƒΡŽ ВРИ, ΠΏΠ»ΠΎΡ…ΠΎ), ваш ΠΊΠΎΠ΄ являСтся нСзависимым ΠΈ ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½Ρ‹ΠΌ ΠΈ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π΅ΠΌΡƒ трСбуСтся, с ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°ΠΌΠΈ require , Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, исходный ΠΊΠΎΠ΄ React .

Π― Π½Π΅ Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ моя ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° привСсти ΠΏΠΎΠ»Π½Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Π² ΠΏΠΎΠ»ΡŒΠ·Ρƒ использования синтаксиса require/module Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π² Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π΅ Π΅ΡΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ Ρ…ΠΎΡ€ΠΎΡˆΠΈΡ… рСсурсов ΠΏΠΎ этому ΠΏΠΎΠ²ΠΎΠ΄Ρƒ. Но ΠΏΠ»ΠΎΡ…ΠΎ ΠΏΠΎΠ±ΡƒΠΆΠ΄Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ пространство ΠΈΠΌΠ΅Π½ THREE для добавлСния ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ², Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ OrbitControls.

ΠŸΡ€ΠΎΡΡ‚ΠΎ ΠΈΠΌΠ΅ΠΉΡ‚Π΅ Π² Π²ΠΈΠ΄Ρƒ, @DelvarWorld , Ρ‡Ρ‚ΠΎ ES6 ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎ Π²Π²ΠΎΠ΄ΠΈΡ‚ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Π² JavaScript с ΠΎΡ‡Π΅Π½ΡŒ спСцифичСским ΠΈ ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΌ синтаксисом:

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

@bhouston ΠΎ Π΄Π°, ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ, я Π½Π΅ согласСн с Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° (ΠΈΠΌΠΏΠΎΡ€Ρ‚, вСроятно, Π»ΡƒΡ‡ΡˆΠΈΠΉ Π²Ρ‹Π±ΠΎΡ€), просто ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽ шаблон модуля Π² Ρ†Π΅Π»ΠΎΠΌ.

@bhouston @DelvarWorld @kumavis Один ΠΈΠ· ΠΌΠΎΠΈΡ… долгосрочных ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² β€” Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ автоматичСский ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚Π΅Ρ€ es5 -> es6, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ ΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ commonjs/amd Π² es6, ΠΈ, надСюсь, ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΠ°Ρ‚ΡŒ большоС количСство javascript с использованиСм конструкций es6, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ классы/Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹. ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. МоТно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°, Ρ‚Π°ΠΊΠΎΠ΅ ΠΊΠ°ΠΊ es6ify, ΠΏΠΎΠΊΠ° Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Ρ‹ Π΄ΠΎΠ³ΠΎΠ½ΡΡŽΡ‚ стандарт, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ для использования. ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ THREE ΠΊ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Ρƒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅ β€” Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ шаг для ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ Π΅Π³ΠΎ ΠΊ Π²Π²ΠΎΠ΄Ρƒ Π² Ρ‚Π°ΠΊΠΎΠΉ инструмСнт.

Π­Ρ‚ΠΎ Π½Π΅ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ я (Π²ΠΈΠ΄ΠΈΠΌΠΎ, ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠ»ΠΎΡ…ΠΎ) пытался ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ. Π― Ρ…ΠΎΡ‡Ρƒ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ большС этих цикличСских зависимостСй, нСзависимо ΠΎΡ‚ ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ я ΡΡ‡ΠΈΡ‚Π°ΡŽ, Ρ‡Ρ‚ΠΎ это сдСлаСт THREE Π±ΠΎΠ»Π΅Π΅ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ, Π³ΠΈΠ±ΠΊΠΈΠΌ ΠΈ, вСроятно, устранит мноТСство ошибок Π² качСствС приятного ΠΏΠΎΠ±ΠΎΡ‡Π½ΠΎΠ³ΠΎ эффСкта.

@coballast https://github.com/mrdoob/three.js/pull/6252 Π±Ρ‹Π» объСдинСн, Ρ‡Ρ‚ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠΎΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ количСство цикличСских ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Π”ΡƒΠΌΠ°Π΅Ρ‚Π΅, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ Π³Ρ€Π°Ρ„ ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½ΠΈΠΉ? ΠœΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ, ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это ΡƒΡ‚ΠΈΠ»ΠΈΡ‚ΠΎΠΉ Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ инструмСнта прСобразования

ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅: созданиС Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π² Vector3 Matrix4 , опрСдСляСмых Π»Π΅Π½ΠΈΠ²ΠΎ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ использовании, Π° Π½Π΅ Π²ΠΎ врСмя опрСдСлСния

ΠΊΡ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Ρ…ΠΎΡ‡Π΅Ρ‚ ΡΡ‚Π°Ρ‚ΡŒ Π²ΠΎΠ»ΠΎΠ½Ρ‚Π΅Ρ€ΠΎΠΌ? Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ быстро

Π“Ρ€Π°Ρ„ΠΈΠΊ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½. http://jsbin.com/medezu/3/

Π’ΠΎΡ‚ ΡΠΊΡ€ΠΈΠ½ΡˆΠΎΡ‚:

snapshot3

Π― Ρ€Π°Π΄ ΡΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎΠ΅ количСство Ρ†ΠΈΠΊΠ»ΠΎΠ² Object3Ds Π±Ρ‹Π»ΠΎ устранСно. Π₯ΠΎΡ€ΠΎΡˆΠ°Ρ Ρ€Π°Π±ΠΎΡ‚Π° @kumavis!

Π²Π°Ρƒ, это Ρ‚Π° ΠΆΠ΅ кодовая Π±Π°Π·Π°? ΡΡƒΠΌΠ°ΡΡˆΠ΅Π΄ΡˆΠΈΠΉ

Π‘ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π°Π΄ Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΡŽ Π³Ρ€Π°Ρ„ΠΎΠ² Ρ‡Π°ΡΡ‚ΡŒΡŽ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹.

ΠŸΡ€ΠΈ рассмотрСнии Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π³Ρ€Π°Ρ„Π° Shape ΠΈ Geometry каТутся Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌΠΈ Π΄Π΅Ρ€Π΅Π²ΡŒΡΠΌΠΈ классов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π·Π³Π°Π΄Π°Ρ‚ΡŒ.

@coballast Π΄ΡƒΠΌΠ°Π΅ΡˆΡŒ, Ρ‚Ρ‹ ΡΠΏΡ€Π°Π²ΠΈΡˆΡŒΡΡ с этим?

созданиС Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π² Vector3 Matrix4, опрСдСляСмых Π»Π΅Π½ΠΈΠ²ΠΎ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ использовании, Π° Π½Π΅ Π²ΠΎ врСмя опрСдСлСния

это Π±ΡƒΠ΄Π΅Ρ‚ PR ΠΏΡ€ΠΎΡ‚ΠΈΠ² Π²Ρ‹ΡˆΠ΅ΡΡ‚ΠΎΡΡ‰Π΅Π³ΠΎ dev , Π° Π½Π΅ автоматичСскоС ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅

Π’Π°ΠΊΠΆΠ΅ я Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ½ΠΈΠ·ΠΈΡ‚ΡŒ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с "Π‘Π΅Ρ€ΡŒΠ΅Π·Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с цикличСскими зависимостями" Π½Π° "цикличСскиС зависимости" - ситуация Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΠ»Π°ΡΡŒ!

@kumavis ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ. Π‘ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π°Π΄ этим, ΠΊΠΎΠ³Π΄Π° врСмя ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚.

Π’ΠΎΡ‚ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ состояниС очистки взаимозависимостСй, ΠΊΠ°ΠΊ я Π΅Π³ΠΎ Π²ΠΈΠΆΡƒ:
(стрСлки ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ соСдинСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈ нСобходимости слСдуСт ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ )

  • [Ρ…] ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹
  • [x] Π“Π΅ΠΎΠΌΠ΅Ρ‚Ρ€ΠΈΠΈ
  • [x] Object3D
  • [Ρ…] ΠœΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ°
  • [Ρ…] Π€ΠΎΡ€ΠΌΡ‹

    • [x] Π€ΠΎΡ€ΠΌΠ° -> FontUtils

    • [x] Π€ΠΎΡ€ΠΌΠ° -> ExtrudeGeometry

    • [x] Π€ΠΎΡ€ΠΌΠ° -> ГСомСтрия Ρ„ΠΎΡ€ΠΌΡ‹

    • [x] ΠŸΡƒΡ‚ΡŒ -> Π€ΠΎΡ€ΠΌΠ°

  • [ ] ΠšΠΎΡ€ΠΎΠ±ΠΊΠ°3

    • [ ] Box3 -> BufferGeometry

    • [ ] Box3 -> ГСомСтрия

Π€ΠΎΡ€ΠΌΡ‹:

image

ΠšΠΎΡ€ΠΎΠ±ΠΊΠ° 3:

image

ΠœΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ°:

Π­Ρ‚ΠΈ ΡƒΠ·Π»Ρ‹ связаны ΠΌΠ΅ΠΆΠ΄Ρƒ собой, Π½ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ Π·Π° счСт этого достаточноС удобство.
image

ΠšΠ°ΠΆΠ΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ Shape ΠΈΠΌΠ΅Π΅Ρ‚ зависимости с ExtrudeGeometry ΠΈ ShapeGeometry Ρ‡Π΅Ρ€Π΅Π· Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠΎΠ΄:

// Convenience method to return ExtrudeGeometry

THREE.Shape.prototype.extrude = function ( options ) {

  var extruded = new THREE.ExtrudeGeometry( this, options );
  return extruded;

};

// Convenience method to return ShapeGeometry

THREE.Shape.prototype.makeGeometry = function ( options ) {

  var geometry = new THREE.ShapeGeometry( this, options );
  return geometry;

};

Π’Π΅ΠΏΠ΅Ρ€ΡŒ каТСтся, Ρ‡Ρ‚ΠΎ Shape являСтся подклассом Path , Π° ExtrudeGeometry ΠΈ ShapeGeometry ΡΠ²Π»ΡΡŽΡ‚ΡΡ подклассами Geometry . Π˜Ρ‚Π°ΠΊ, Π²Ρ‹ Π·Π½Π°Π΅Ρ‚Π΅, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹ΡΡΠ½ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ зависимости Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ΄Π°Π»Π΅Π½Ρ‹ Π² идСальном случаС.

Π”Π°, это относится ΠΊ Ρ‚ΠΎΠΉ ΠΆΠ΅ ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ, Ρ‡Ρ‚ΠΎ ΠΈ Vector3 <-> Matrix4 . Они связаны для удобства. Π― Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ это плохая идСя, Π½ΠΎ Π½Π΅ стоит с Π½Π΅ΠΉ Π±ΠΎΡ€ΠΎΡ‚ΡŒΡΡ. Π― ΠΎΡ‚ΠΌΠ΅Ρ‡Ρƒ это ΠΊΠ°ΠΊ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎΠ΅

Shape -> FontUtils ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ, пСрСмСстив Ρ‚Π°ΠΊΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΊΠ°ΠΊ triangulate , Π² Π±ΠΎΠ»Π΅Π΅ ΠΎΠ±Ρ‰ΠΈΠ΅ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹. Но это Π½Π΅ большая ΠΏΠΎΠ±Π΅Π΄Π°. Π‘ΠΎΠ±ΠΈΡ€Π°ΡŽΡΡŒ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΠΊΠ°ΠΊ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π½Ρ‹ΠΉ.

Box3 -> BufferGeometry ΠΈ Box3 -> Geometry ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‡ΠΈΡ‰Π΅Π½Ρ‹.

Π­Ρ‚ΠΎ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ случай, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ класса Π½Π΅ зависит ΠΎΡ‚ класса.

источник :

setFromObject: function () {

  // Computes the world-axis-aligned bounding box of an object (including its children),
  // accounting for both the object's, and childrens', world transforms

  /* ... */

  if ( geometry instanceof THREE.Geometry ) {
    /* ... */
  } else if ( geometry instanceof THREE.BufferGeometry && geometry.attributes[ 'position' ] !== undefined ) {
    /* ... */
  }

  /* ... */

}

Π’ ΠΎΠ±ΠΎΠΈΡ… случаях это просто ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° ΠΏΠ΅Ρ€Π΅Π±Ρ€Π°Ρ‚ΡŒ Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹/ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ Π³Π΅ΠΎΠΌΠ΅Ρ‚Ρ€ΠΈΠΈ worldCoordinate. Π˜Π½Ρ‚Π΅Ρ€Π΅ΡΠ½ΠΎ, сильно Π»ΠΈ упростит ΠΊΠΎΠ΄ созданиС Π»Π΅Π½ΠΈΠ²ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° vertices Π½Π° BufferGeometry , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ просматриваСт значСния ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ ΠΈΡ… запроса. НС ΡƒΠ²Π΅Ρ€Π΅Π½ насчСт ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

Π’ качСствС Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρ‹ ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Geometry.computeBoundingBox :
Geometry
BufferGeometry

Box3 являСтся ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ½Ρ‹ΠΌ мСстом ΠΏΡ€ΠΈ запускС сборки browserify. Π‘ΠΌ. примСчания Π² coballast/threejs-browserify-conversion-utility#21.

@kumavis НС ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ Π²Ρ‹ ΠΈΠ·Π»ΠΎΠΆΠΈΡ‚ΡŒ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌΠΎΠ΅ Π²Π°ΠΌΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Box3/Geometry/BufferGeometry? Если быстро, Ρ‚ΠΎ ΠΌΠΎΠ³Ρƒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ.

Π― Π½Π΅ ΠΌΠΎΠ³Ρƒ ΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π° это прямо сСйчас, Π½ΠΎ я Π±Ρ‹ Π½Π°Ρ‡Π°Π» с ΠΌΠΎΠ΅Π³ΠΎ прСдлоТСния Π²Ρ‹ΡˆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ geo.computeBoundingBox ΠΊΠ°ΠΊ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ Π½Π° Geometry ΠΈ BufferGeometry вмСсто if/else здСсь . ВмСсто этого box3.setFromObj Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ geometry.computeBoundingBox , Π° Π·Π°Ρ‚Π΅ΠΌ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π½Π° основС созданного box3.

Π­Ρ‚ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ΠΊΠΎΠ½Π΅Ρ† Box3 -> BufferGeometry ΠΈ Box3 -> Geometry ΠΊΡ€ΡƒΠ³Π»Ρ‹Ρ… ΠΎΡ‚ΠΏΠ΅Ρ‡Π°Ρ‚ΠΊΠΎΠ². Π”Π°ΠΉΡ‚Π΅ ΠΌΠ½Π΅ Π·Π½Π°Ρ‚ΡŒ, Ссли я Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ упустил.

Π₯ΠΌ, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ²ΡˆΠΈΠΉΡΡ ΠΊΠΎΠ΄ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π·Π°ΠΏΡƒΡ‚Π°Π½, Ρ‡Ρ‚ΠΎ Π½Π° самом Π΄Π΅Π»Π΅ здСсь ΠΈΠΌΠ΅Π΅Ρ‚ смысл? Box3.setFromObject Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ, Π½ΠΎ это Π½Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚. Geo's Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡƒΠΌΠ΅Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ box3, Ρƒ мСня с этим ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ Π½Π΅Ρ‚. Π”Π°, я Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ Box3.setFromObject Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π°ΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ Ρƒ Π³Π΅ΠΎΠ»ΠΎΠΊΠ°Ρ†ΠΈΠΈ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‰ΡƒΡŽ Ρ€Π°ΠΌΠΊΡƒ/экстСнты, Π½ΠΎ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΈΠΌ слСдуСт ΠΏΠΎΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ Object3D / Mesh ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ Ρ€Π°ΠΌΠΊΡƒ/экстСнты.

ΠΈΠ·Π²ΠΈΠ½ΠΈΡ‚Π΅ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ сумбурно. Π”Π°ΠΉ ΠΌΠ½Π΅ Π·Π½Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρ‚Ρ‹ Π΄ΡƒΠΌΠ°Π΅ΡˆΡŒ.

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅Π»Π΅Π²Π°Π½Ρ‚Π½ΠΎ: #6546

Π‘Π΅Π· Ρ‡Π΅Π³ΠΎ-Ρ‚ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ эти динамичСскиС зависимости ΠΎΡ‚ скриптов Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊΠ°.

Будя ΠΏΠΎ ΠΌΠΎΠΈΠΌ тСстам, цикличСскиС зависимости Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ для commonJSification. Π‘ Π½ΠΈΠΌΠΈ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ, ΠΈ, ΠΊΠ°ΠΊ ΡƒΠΆΠ΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΎΡΡŒ Ρ€Π°Π½Π΅Π΅ Π² этой Π²Π΅Ρ‚ΠΊΠ΅, ΠΎΠ½ΠΈ Π΄Π΅Π»Π°ΡŽΡ‚ Π³Ρ€Π°Ρ„ зависимостСй довольно бСспорядочным, Π½ΠΎ ΠΎΠ½ΠΈ Π½Π΅ ΠΌΠ΅ΡˆΠ°ΡŽΡ‚ THREE.js Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π² ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… срСдах JS (ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΏΡ€ΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΈ).

Π― Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π» ΠΏΠΎΠ»Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ commonjs Π½Π° npm ΠΊΠ°ΠΊ three.cjs , ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ‚Ρ€ΠΈ транспилятора commonjs.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Ρ‡Ρ‚ΠΎΠ±Ρ‹ это сработало, ΠΌΠ½Π΅ ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ #6546 Π½Π° мастСрС. Π₯отя динамичСскиС зависимости Ρ…ΠΎΡ€ΠΎΡˆΠΎ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π² node.js, ΠΎΠ½ΠΈ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π² Browserify (ΠΈΠ»ΠΈ любом Π΄Ρ€ΡƒΠ³ΠΎΠΌ инструмСнтС cjs для Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°), ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΈΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ статичСский Π°Π½Π°Π»ΠΈΠ· зависимостСй.

ΠŸΡ€ΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ Π΄ΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²ΠΎ: http://requirebin.com/?gist=b7fe528d8059a7403960

@kamicane FYI - Π²ΠΎΡ‚ Π³Π΄Π΅ ВРИ Π±Ρ‹Π»ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΊ Raycaster (Ρ€Π°Π½Π΅Π΅ Ray ).

Π― понимаю Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (для прСдотвращСния Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Ρ… ΡƒΡ‚Π΅Ρ‡Π΅ΠΊ Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°Ρ…), ΠΎΠ΄Π½Π°ΠΊΠΎ этот Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ лишний ΠΈ Π΄Π΅Π»Π°Π΅Ρ‚ вСсь Ρ„Π°ΠΉΠ» ΠΏΠΎΠ΄ΠΏΠ°Π΄Π°ΡŽΡ‰ΠΈΠΌ ΠΏΠΎΠ΄ ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΡŽ вычисляСмых зависимостСй. Π₯отя Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ динамичСски ΡƒΠ΄Π°Π»Π΅Π½ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΉ AST, ΠΎΠ½ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡƒΠ»Π΅Π½Π΅ΠΏΡ€ΠΎΠ±ΠΈΠ²Π°Π΅ΠΌΡ‹ΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ (Π² зависимости ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ записываСтся Π² Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚, читаСтся ΠΈΠ· Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° ΠΈ Ρ‚.Β Π΄.). БтатичСский Π°Π½Π°Π»ΠΈΠ· становится практичСски Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌ. Π’ этом случаС трСбуСтся Ρ€ΡƒΡ‡Π½ΠΎΠ΅ Π²ΠΌΠ΅ΡˆΠ°Ρ‚Π΅Π»ΡŒΡΡ‚Π²ΠΎ.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° класс Raycaster стал Π±ΠΎΠ»Π΅Π΅ Π»Π΅Π³ΠΊΠΈΠΌ, ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ ΠΏΠΎΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΏΠΎΡ…ΠΎΠΆΠΈΠΌ Π½Π° ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ классы.

@mrdoob , @Mugen87 ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Rollup, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ части Three.js, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π°ΠΌ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½ΡƒΠΆΠ½Ρ‹. Когда ΠΌΡ‹ запускаСм сборку, ΠΌΡ‹ ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅:

(!) Circular dependency: node_modules/three/src/math/Vector3.js -> node_modules/three/src/math/Matrix4.js -> node_modules/three/src/math/Vector3.js
(!) Circular dependency: node_modules/three/src/math/Vector3.js -> node_modules/three/src/math/Quaternion.js -> node_modules/three/src/math/Vector3.js
(!) Circular dependency: node_modules/three/src/math/Sphere.js -> node_modules/three/src/math/Box3.js -> node_modules/three/src/math/Sphere.js
(!) Circular dependency: node_modules/three/src/objects/LineSegments.js -> node_modules/three/src/objects/Line.js -> node_modules/three/src/objects/LineSegments.js

Π•ΡΡ‚ΡŒ Π»ΠΈ цикличСскиС зависимости Π² Three.js ΠΈΠ»ΠΈ ΠΌΡ‹ Π΄Π΅Π»Π°Π΅ΠΌ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π½Π΅ Ρ‚Π°ΠΊ?

Vector3 ΠΈ Matrix4 привязаны Π΄Ρ€ΡƒΠ³ ΠΊ Π΄Ρ€ΡƒΠ³Ρƒ, Ссли Ρ‚ΡΠ½ΡƒΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½, Ρ‚ΠΎ Π½Π°Π΄ΠΎ Ρ‚ΡΠ½ΡƒΡ‚ΡŒ ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ. ЦикличСскиС зависимости тСхничСски Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½Ρ‹.

@bhouston Π΄Π°, я Π²ΠΈΠΆΡƒ, спасибо Π·Π° подсказку. Π”Π°, цикличСскиС зависимости Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½Ρ‹, ΠΈ объСдинСниС Π½Π΅ создаСт ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, Π½ΠΎ я Π½Π΅ ΡƒΠ²Π΅Ρ€Π΅Π½, Ρ‡Ρ‚ΠΎ цикличСскиС зависимости β€” это Ρ…ΠΎΡ€ΠΎΡˆΠ°Ρ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°. Vector3 зависит Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΡ‚ Matrix4 ΠΈΠ·-Π·Π° multiplyMatrices ΠΈ getInverse , ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ см. (https://github.com/mrdoob/three.js/ blob/dev/src/math/Vector3.js#L315)

@roomle-build Π”Π°, Ρ‡ΡƒΠ²Π°ΠΊ, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ явно ссылаСтся Π½Π° конструктор Matrix4? ΠΊΠ°ΠΊ насчСт

    applyMatrix4: function ( m ) {

        var x = this.x, y = this.y, z = this.z;
        var e = m.elements;

        var w = 1 / ( e[ 3 ] * x + e[ 7 ] * y + e[ 11 ] * z + e[ 15 ] );

        this.x = ( e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z + e[ 12 ] ) * w;
        this.y = ( e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z + e[ 13 ] ) * w;
        this.z = ( e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z + e[ 14 ] ) * w;

        return this;

},

?

Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ { elements: [....] } ΠΈ это сработаСт, Π½ΠΎ ΠΌΡ‹ всС Π·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΌ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚ Matrix4

НачнСм с Vector3 .

Vector3 зависит ΠΎΡ‚ Matrix4 ΠΈΠ·-Π·Π° project ΠΈ unproject :

    project: function () {

        var matrix = new Matrix4();

        return function project( camera ) {

            matrix.multiplyMatrices( camera.projectionMatrix, matrix.getInverse( camera.matrixWorld ) );
            return this.applyMatrix4( matrix );

        };

    }(),

    unproject: function () {

        var matrix = new Matrix4();

        return function unproject( camera ) {

            matrix.multiplyMatrices( camera.matrixWorld, matrix.getInverse( camera.projectionMatrix ) );
            return this.applyMatrix4( matrix );

        };

    }(),

Vector3 зависит ΠΎΡ‚ Quaternion ΠΈΠ·-Π·Π° applyEuler ΠΈ applyAxisAngle :

    applyEuler: function () {

        var quaternion = new Quaternion();

        return function applyEuler( euler ) {

            if ( ! ( euler && euler.isEuler ) ) {

                console.error( 'THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order.' );

            }

            return this.applyQuaternion( quaternion.setFromEuler( euler ) );

        };

    }(),

    applyAxisAngle: function () {

        var quaternion = new Quaternion();

        return function applyAxisAngle( axis, angle ) {

            return this.applyQuaternion( quaternion.setFromAxisAngle( axis, angle ) );

        };

    }(),

ΠŸΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡ?

Π― Π½Π΅ ΡƒΠ²Π΅Ρ€Π΅Π½, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ ΠΊΡ€ΡƒΠ³ΠΎΠ²Ρ‹Π΅ зависимости. Но я ΠΌΠΎΠ³ Π±Ρ‹ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ сСбС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ multiplyMatrices Π² ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Math . Π—Π°Ρ‚Π΅ΠΌ подпись измСнится Π½Π° multiplyMatrices( a: Matrix4, b: Matrix4, result: Matrix4 ): Matrix4 . Π’Π½ΡƒΡ‚Ρ€ΠΈ Vector3 Π²Ρ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ Π·Π°Ρ‚Π΅ΠΌ import { multiplyMatrices } from './Math'; Ρ‚ΠΎ ΠΆΠ΅ самоС ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π² Matrix4 (Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΏΠΎΠ²Π΅Ρ€Ρ…Π½ΠΎΡΡ‚ΡŒ API Matrix4 Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅).

Π― Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ Π±Π΅Π³Π»ΠΎ просмотрСл (Π½Π΅ смотрСл Π½Π° случай Quaternian - Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Vec3/Mat4 ), ΠΈ я Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ ΡƒΠ²Π΅Ρ€Π΅Π½ Π² влиянии ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈ послСдствиях для ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠΉ части Π±Π°Π·Ρ‹ ΠΊΠΎΠ΄Π°. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, я Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ ΡƒΠ²Π΅Ρ€Π΅Π½, Ρ‡Ρ‚ΠΎ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ эти цикличСскиС зависимости. ΠŸΡ€ΠΎΡΡ‚ΠΎ Ρ…ΠΎΡ‚Π΅Π» ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ своими мыслями, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ @mrdoob попросил совСта

@roomle-build, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π² основном создавайтС большС ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ Π±Ρ‹Π»ΠΎ ΠΊΡ€ΡƒΠ³ΠΎΠ²Ρ‹Ρ… зависимостСй, Π½ΠΎ Π²Ρ‹ всС Ρ€Π°Π²Π½ΠΎ ΡΠΎΠ±ΠΈΡ€Π°Π΅Ρ‚Π΅ΡΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ всС эти ΠΌΠΎΠ΄ΡƒΠ»ΠΈ? это, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΈΠΌΠ΅Π»ΠΎ Π±Ρ‹ большС смысла, Ссли Π±Ρ‹ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ матСматичСский ΠΌΠ΅Ρ‚ΠΎΠ΄ Π±Ρ‹Π» ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΌ, Ρ‚ΠΎΠ³Π΄Π° Π²Ρ‹ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ‚Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅, Π½ΠΎ это Π±ΡƒΠ΄Π΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ.

@makc Π½Π΅ совсСм. Π­Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ большой ΠΌΠΎΠ΄ΡƒΠ»ΡŒ с мноТСством ΠΌΠ°Π»Π΅Π½ΡŒΠΊΠΈΡ… Β«Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ…Β» Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Π­Ρ‚ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈ встряхивании Π΄Π΅Ρ€Π΅Π²ΡŒΠ΅Π² ΠΈ Ρ‚. Π΄. ΠœΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π΅ΡΠΊΠΈΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ:

export const multiplyMatrices( a, b, result ) {Β // ... DO STUFF ... // }
export const getInverse( /* ... */ ) {Β // ... DO STUFF ... // }
// ...
// ...

И ΠΏΠΎΡ‚Ρ€Π΅Π±Π»ΡΡŽΡ‰ΠΈΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ Π΄Π΅Π»Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅:

import { Matrix4 } from './Matrix4.js';
import { multiplyMatrices } from './math';
const result = new Matrix4( );
multiplyMatrices( a, b, result );

Когда всС вмСстС ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚ΡΡ, rollup Ρ‚Π²ΠΎΡ€ΠΈΡ‚ чудСса ΠΈ создаСт Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ эффСктивный ΠΏΠ°ΠΊΠ΅Ρ‚.

Π­Ρ‚ΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°ΡŽΡ‚ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ популярныС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ. На самом Π΄Π΅Π»Π΅ RxJS ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΠ» свою Β«Π»ΠΎΠ³ΠΈΠΊΡƒΒ» import Ρ‚Π°ΠΊΠΆΠ΅ Π½Π° описанный ΠΌΠ½ΠΎΠΉ шаблон. Π’Π°ΠΌ это выглядит ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊ:

 import { flatMap, map, tap } from 'rxjs/operators';

myObject.run().pipe(
  tap(result => doSomething()), 
  flatMap(() => doSomethingElse()), 
  map(() => doAnotherThing())
);

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎ Ρ‚ΠΎΠΌ, Β«ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΈ ΠΊΠ°ΠΊΒ» ΠΎΠ½ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΈ этот ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» Π² RxJS 6, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… сообщСниях Π±Π»ΠΎΠ³Π°: https://auth0.com/blog/whats-new-in-rxjs-6/

Но, ΠΊΠ°ΠΊ я ΡƒΠΆΠ΅ сказал, это всСго лишь ΠΌΡ‹ΡΠ»ΡŒ, ΠΈ я Π½Π΅ ΡƒΠ²Π΅Ρ€Π΅Π½ Π²ΠΎ всСх послСдствиях, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ это ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ для ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠΉ части ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠΉ Π±Π°Π·Ρ‹. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ math Π½Π΅ Β«ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½Β» для Ρ‚Π°ΠΊΠΎΠ³ΠΎ использования. Π’ настоящСС врСмя всС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ матСматичСского модуля ΠΏΡ€ΠΈΠΊΡ€Π΅ΠΏΠ»Π΅Π½Ρ‹ Β«ΠΊΠ°ΠΊ Π±Ρ‹ статичСски». Π­Ρ‚ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ позволяСт Π°Π³Ρ€Π΅Π³Π°Ρ†ΠΈΠΈ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ΡŒ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ...

@roomle-build Ρ…ΠΌ, Ρ‚Π°ΠΊ Π²Ρ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ свСртываниС ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ½ΡΡ‚ΡŒ, Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π»ΠΈ ΠΊΠΎΠ΄Ρƒ Π² Ρ‚ΠΎΠΉ ΠΆΠ΅ области Π½Π΅ Π½ΡƒΠΆΠ½Π° вся ΠΎΠ±Π»Π°ΡΡ‚ΡŒ, Ρ…ΠΎΡ€ΠΎΡˆΠΎ.

Π’Ρ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚Π΅ ΠΎ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π΅ ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΌΡƒ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρƒ (Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹), Π° Π½Π΅ ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌΡƒ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρƒ (ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-Ρ‡Π»Π΅Π½Ρ‹). Π­Ρ‚ΠΎ Ρ€Π΅Π°Π»ΡŒΠ½Π°Ρ Π²Π΅Ρ‰ΡŒ, Π½ΠΎ, учитывая, Ρ‡Ρ‚ΠΎ Three.JS ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½, ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ‚Π°ΠΊΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ являСтся довольно большой, ΠΈ ΠΎΠ½ сломал Π±Ρ‹ вСсь ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄.

Π― Π½Π΅ ΡƒΠ²Π΅Ρ€Π΅Π½, Ρ‡Ρ‚ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Π² ΠΏΠΎΠ»ΡŒΠ·Ρƒ этого измСнСния Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ Π½Π° Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΡ€Π°Π²Π΄Π°Ρ‚ΡŒ ΠΎΡ‚ΠΊΠ°Π· ΠΎΡ‚ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ совмСстимости.

@makc Π½Π΅ совсСм. Π­Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ большой ΠΌΠΎΠ΄ΡƒΠ»ΡŒ с мноТСством ΠΌΠ°Π»Π΅Π½ΡŒΠΊΠΈΡ… Β«Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ…Β» Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Π­Ρ‚ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈ встряхивании Π΄Π΅Ρ€Π΅Π²ΡŒΠ΅Π² ΠΈ Ρ‚. Π΄. ΠœΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π΅ΡΠΊΠΈΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ:

Если это Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ прСдлагаСтся, это Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ описано ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ. Π­Ρ‚ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Three.JS ΠΎΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ стиля Π΄ΠΈΠ·Π°ΠΉΠ½Π° ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΌΡƒ Π΄ΠΈΠ·Π°ΠΉΠ½Ρƒ.

@roomle-build Ρ…ΠΌ, Ρ‚Π°ΠΊ Π²Ρ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ свСртываниС ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ½ΡΡ‚ΡŒ, Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π»ΠΈ ΠΊΠΎΠ΄Ρƒ Π² Ρ‚ΠΎΠΉ ΠΆΠ΅ области Π½Π΅ Π½ΡƒΠΆΠ½Π° вся ΠΎΠ±Π»Π°ΡΡ‚ΡŒ, Ρ…ΠΎΡ€ΠΎΡˆΠΎ.

yes rollup ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚, ΠΊΠ°ΠΊ всС ΠΈΠΌΠΏΠΎΡ€Ρ‚Ρ‹ соотносятся Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ, ΠΈ выполняСт встряхиваниС Π΄Π΅Ρ€Π΅Π²ΡŒΠ΅Π², устранСниС Π½Π΅Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π΅Π³ΠΎ ΠΊΠΎΠ΄Π° ΠΈ Ρ‚. Π΄. НовыС вСрсии rollup Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Β«Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽΒ» ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΡ… приятных Π²Π΅Ρ‰Π΅ΠΉ. Но тСкущая структура ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ всС прСимущСства этих Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ.

Π’Ρ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚Π΅ ΠΎ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π΅ ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΌΡƒ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρƒ (Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹), Π° Π½Π΅ ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌΡƒ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρƒ (ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-Ρ‡Π»Π΅Π½Ρ‹). Π­Ρ‚ΠΎ Ρ€Π΅Π°Π»ΡŒΠ½Π°Ρ Π²Π΅Ρ‰ΡŒ, Π½ΠΎ, учитывая, Ρ‡Ρ‚ΠΎ Three.JS ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½, ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ‚Π°ΠΊΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ являСтся довольно большой, ΠΈ ΠΎΠ½ сломал Π±Ρ‹ вСсь ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄.

Π― Π½Π΅ Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ эти Π΄Π²Π΅ ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΡ‹ ΠΈΡΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Π°. Π― Π΄ΡƒΠΌΠ°ΡŽ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΌΠ΅ΡˆΠΈΠ²Π°Ρ‚ΡŒ ΠΈ ΡΠΎΡ‡Π΅Ρ‚Π°Ρ‚ΡŒ эти Π΄Π²Π΅ ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΡ‹. Π― Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅. Π― просто Ρ…ΠΎΡ‚Π΅Π» ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ способ избавлСния ΠΎΡ‚ цикличСской зависимости. Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ multiplyMatrices ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ Math . Но Ссли ΠΊΡ‚ΠΎ-Ρ‚ΠΎ пСрСписываСт ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ Π²Π΅Ρ‰ΠΈ, ΠΈΠΌΠ΅Π΅Ρ‚ смысл ΠΏΠΎΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ ΠΎΠ± использовании возмоТностСй ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ ES6. Но, ΠΊΠ°ΠΊ я ΡƒΠΆΠ΅ сказал, я Π½Π΅ экспСрт ΠΏΠΎ ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠΉ Π±Π°Π·Π΅ Three.js, ΠΈ это Π±Ρ‹Π»Π° просто ΠΌΡ‹ΡΠ»ΡŒ, ΠΊΠ°ΠΊ ΡƒΡΡ‚Ρ€Π°Π½ΠΈΡ‚ΡŒ Ρ†ΠΈΠΊΠ»ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ. Π― Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ Three.js β€” ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ с ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎΠΉ ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠΉ Π±Π°Π·ΠΎΠΉ, ΠΈ я Π½Π΅ Ρ…ΠΎΡ‡Ρƒ Π²ΠΎΡ€Ρ‡Π°Ρ‚ΡŒ. Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ надСюсь, Π½ΠΈΠΊΡ‚ΠΎ Π½Π΅ обидится Π½Π° ΠΌΠΎΠΈ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ πŸ˜‰

Π― Π½Π΅ ΡƒΠ²Π΅Ρ€Π΅Π½, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΠ±ΡΡƒΠΆΠ΄Π°Ρ‚ΡŒ дизайнСрскиС Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π² выпускС. Π£ вас Π΅ΡΡ‚ΡŒ мСсто, Π³Π΄Π΅ Ρ‚Π°ΠΊΠΈΠ΅ Π²Π΅Ρ‰ΠΈ подходят Π»ΡƒΡ‡ΡˆΠ΅?

ΠšΡΡ‚Π°Ρ‚ΠΈ, gl-matrix β€” это Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Π°Ρ матСматичСская Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°: https://github.com/toji/gl-matrix/tree/master/src/gl-matrix .

@roomle-сборка

Π’ настоящСС врСмя всС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ матСматичСского модуля ΠΏΡ€ΠΈΠΊΡ€Π΅ΠΏΠ»Π΅Π½Ρ‹ Β«ΠΊΠ°ΠΊ Π±Ρ‹ статичСски».

Как ΠΆΠ΅ Ρ‚Π°ΠΊ?

@mrdoob Π― ΡΡ‡ΠΈΡ‚Π°ΡŽ, Ρ‡Ρ‚ΠΎ с Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌ Π΄ΠΈΠ·Π°ΠΉΠ½ΠΎΠΌ gl-matrix каТдая функция, скаТСм, vec3 (Π² Ρ„Π°ΠΉΠ»Π΅ vec3, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ я ссылался Π² своСм ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ) экспортируСтся ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡƒΠ°Π»ΡŒΠ½ΠΎ. Π­Ρ‚ΠΎ позволяСт Π²Π°ΠΌ Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ. Π’Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π±Ρ€Π°Ρ‚ΡŒ с собой всС vec3.

Как ΠΈ Π² случаС с Three.JS, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π΄ΠΈΠ·Π°ΠΉΠ½, всС матСматичСскиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для Vector3 присоСдинСны ΠΊ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Vector3, ΠΈ Π²Ρ‹ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ сам класс Vector3.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π² Three.JS ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Ρ†Π΅Π»Ρ‹Π΅ классы, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ ΠΏΡ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΌ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π΅ Π²Ρ‹ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

(Π•Ρ‰Π΅ ΠΎΠ΄Π½Π° ΠΎΡ‡Π΅Π½ΡŒ полСзная Π²Π΅Ρ‰ΡŒ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ gl-matrix Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ всС ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, @toji Π² основном встроил ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ всСй ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠΈ Π² ΠΊΠ°ΠΆΠ΄ΡƒΡŽ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ. ВСроятно, это довольно эффСктивно с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния скорости. Π½ΠΎ это ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ слоТно ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ.)

Π― Π½Π΅ Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Ρ€Π΅ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ эту Ρ‡Π°ΡΡ‚ΡŒ Three.JS, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, избавлСния ΠΎΡ‚ Π»ΡŽΠ±Ρ‹Ρ… ссылок Π² /math Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΈ Π² three.js. ΠœΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π΅ΡΠΊΠ°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° довольно ΠΌΠ°Π»Π°, ΠΈ Π² послСднСС врСмя ΠΎΠ½Π° Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ появляСтся Π² ΠΌΠΎΠΈΡ… тСстах ΠΏΠΎ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ. Π”Π°, ΠΎΠ½ Π½Π΅ максимально эффСктивСн, Π½ΠΎ достаточно Π±Π»ΠΈΠ·ΠΎΠΊ, сохраняя ΡƒΠ΄ΠΎΠ±ΠΎΡ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΡΡ‚ΡŒ ΠΈ простоту использования.

@bhouston Понял. Π‘ΠΎΠ»ΡŒΡˆΠΎΠ΅ спасибо Π·Π° объяснСниС! 😊

Π― просто Ρ…ΠΎΡ‚Π΅Π» ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ Ρ‚Π΅ΠΌΡƒ. Но я Ρ…ΠΎΡ‡Ρƒ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ ΠΎΡ‚ importing function vs importing classes ΠΊ Ρ‚Π΅ΠΌΠ΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ cyclic dependencies . (Π’Π°ΠΊΠΆΠ΅ я Π½Π΅ понимаю, ΠΏΠΎΡ‡Π΅ΠΌΡƒ import { someFunction } from 'SomeModule' ΠΌΠ΅Π½Π΅Π΅ Ρ€Π΅ΠΌΠΎΠ½Ρ‚ΠΎΠΏΡ€ΠΈΠ³ΠΎΠ΄Π΅Π½, Ρ‡Π΅ΠΌ import SomeClass from 'SomeModule' , Π½ΠΎ это ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎ Π½Π΅ Ρ‚Π΅ΠΌΠ° Π΄Π°Π½Π½ΠΎΠ³ΠΎ выпуска/Ρ€Π°Π·Π³ΠΎΠ²ΠΎΡ€Π°.

Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΡΡ‚Ρ€Π°Π½ΠΈΡ‚ΡŒ Ρ†ΠΈΠΊΠ»ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ, ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ класс. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ multiplyMatrices ΠΊ матСматичСскому классу ΠΈΠ»ΠΈ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ класс-ΠΌΠ½ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒ с ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ multiplyMatrices . Но, ΠΊΠ°ΠΊ я ΡƒΠΆΠ΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ», я Π½Π΅ ΡƒΠ²Π΅Ρ€Π΅Π½, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ цикличСскиС зависимости. Если Π±ΡƒΠ΄Π΅Ρ‚ принято Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π½Π΅ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ ΠΈΡ…, я Π΄ΡƒΠΌΠ°ΡŽ, этот вопрос ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°ΠΊΡ€Ρ‹Ρ‚ πŸ˜ƒ

ПослС Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ #19137 это ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ πŸŽ‰.

@ Mugen87 Π²Π°Ρƒ, 5 Π»Π΅Ρ‚! ΠΏΠΎΠ·Π΄Ρ€Π°Π²Π»ΡΡŽ с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π½Π°ΠΊΠΎΠ½Π΅Ρ† ΠΏΠΎΠΏΠ°Π» Π² Ρ†Π΅Π»ΡŒ :fire: :clap:
МнС Ρ‚ΠΎΠ³Π΄Π° Π±Ρ‹Π»ΠΎ ΠΎΡ‡Π΅Π½ΡŒ вСсСло Π΄Π΅Π»Π°Ρ‚ΡŒ эти Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ :smile_cat:

Π‘Ρ‹Π»Π° Π»ΠΈ эта страница ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ?
0 / 5 - 0 Ρ€Π΅ΠΉΡ‚ΠΈΠ½Π³ΠΈ