2014-11-18 5 views
0

У меня есть объект Cube. Он устанавливается как этотУмножение матрицы Javascript на скалярный

//Cube object 
    function Cube(vertices, color, scale) 
    { 
     //this.vertices = vertices; 
     this.setColor(color); 
     this.setScale(vertices, 1); 
    } 

Я закомментированного //this.vertices = vertices;, потому что я не уверен, если я должен установить вершины здесь или установить их в setScale() функции.
Я хочу установить шкалу на матрицу. Матрица:

var verts = [ 
      // Front face 
      -1.0, -1.0, 1.0, 
      1.0, -1.0, 1.0, 
      1.0, 1.0, 1.0, 
      -1.0, 1.0, 1.0, 

      // Back face 
      -1.0, -1.0, -1.0, 
      -1.0, 1.0, -1.0, 
      1.0, 1.0, -1.0, 
      1.0, -1.0, -1.0, 

      // Top face 
      -1.0, 1.0, -1.0, 
      -1.0, 1.0, 1.0, 
      1.0, 1.0, 1.0, 
      1.0, 1.0, -1.0, 

      // Bottom face 
      -1.0, -1.0, -1.0, 
      1.0, -1.0, -1.0, 
      1.0, -1.0, 1.0, 
      -1.0, -1.0, 1.0, 

      // Right face 
      1.0, -1.0, -1.0, 
      1.0, 1.0, -1.0, 
      1.0, 1.0, 1.0, 
      1.0, -1.0, 1.0, 

      // Left face 
      -1.0, -1.0, -1.0, 
      -1.0, -1.0, 1.0, 
      -1.0, 1.0, 1.0, 
      -1.0, 1.0, -1.0 
     ]; 

Функция я использую, чтобы установить масштаб, как это:

Cube.prototype.setScale = function(vertices, scale) 
    { 
     var length = vertices.length; 
     for(var i = 0; i < length; i++) 
     { 
      //alert("before "+ vertices[i]+ " i "+ i); 
      vertices[i] *= scale; 
      //alert("after "+ vertices[i]); 
     } 

Я думаю, что, делая это для цикла следует принимать длину матрицы и начать цикл.
В этом цикле for я получаю вершину в i и умножаю ее по шкале.
Когда я делаю это так, хотя цикл for повторит. То есть когда я ударяет 72, цикл не останавливается.

ответ

1

Я закомментирована //this.vertices = vertices;, потому что я не уверен, если я должен установить вершины здесь

Вам необходимо либо установить его там или в конце конструктора. Ваша функция setScale прекрасно отделяется от того, где хранится массив vertices, и я бы сохранил его таким образом. Но вместо этого вы можете переименовать его scaleVertices().

Когда я делаю это так, хотя цикл for повторит. То есть когда я ударяет 72, цикл не останавливается.

Действительно? Странно. Я должен что-то упустить; код выглядит правильно.

Не используйте alert(), кстати, это заставит вашу жизнь ад отлаживать что угодно. Вы намного лучше используете console.log().

+0

Я внедрил изменения имен и раскомментировал 'this.vertices', это зафиксировало вершины и изменило их размеры. –