ПредисловиеОтключить вас от интернета - наслаждение, мистер Андерсон. (с) Агент Смит
По поводу алгоритма 3Д кубаЯ вот решил вживую посмотреть на этот алгоритм.
Финальный рабочий код:
Код
this.createEmptyMovieClip("center", 0);
center._x = Stage.width/2;
center._y = Stage.height/2;
focalLength = 400;
cube = {vertexList:[]};
cube.vertexList.push({x:-50, y:-50, z:50});
cube.vertexList.push({x:50, y:-50, z:50});
cube.vertexList.push({x:-50, y:-50, z:-50});
cube.vertexList.push({x:50, y:-50, z:-50});
cube.vertexList.push({x:-50, y:50, z:50});
cube.vertexList.push({x:50, y:50, z:50});
cube.vertexList.push({x:-50, y:50, z:-50});
cube.vertexList.push({x:50, y:50, z:-50});
vertices = [];
for (var i = 0; i<cube.vertexList.length; i++) {
center.attachMovie("vertex", "v"+i, i);
vertices.push(center["v"+i]);
}
render = function (model) {
for (var i = 0; i<model.vertexList.length; i++) {
var scale = focalLength/(focalLength - model.vertexList[i].z);
vertices[i]._x = model.vertexList[i].x*scale;
vertices[i]._y = model.vertexList[i].y*scale;
}
};
render(cube);
В итоге получается "псевдо-3Д" картинка.
В чём были проблемы.
1) length - длина, нужно правильно написать.
Не Leght, не Lenght, а именно length.
2) Я немного подправил координаты - чтобы вышла нормальная 3Д-картинка (прикольная), а не "психоделика"

Вы в книге посмотрите, что там про координаты говорят авторы. Я взял на свой логический взгляд (все точки имеют разные координаты - полный двоичный перебор, от двоичного "0", до двоичной "7", с "-50" и "50" в качестве битов - у вас же в приведенном фрагменте кода были повторы).
3) Ругался "undefined" трейс:
trace(cube.vertexList.length);
Так как "length" была некорректно написана, то флеш думал, что это новая переменная, а учитывая, что она не инициализирована, и нигде не использована, то флеш и ругается. При правильном коде всё работает нормально, и флеш пишет "8", как и должно быть (длина массива). Трейс я убрал из финального кода, так как этот оператор нам не нужен (как я говорил ранее).
Также не работали циклы, т.к. опять же "длина" была некорректно написана.
В циклах фор, которая:
for (var i = 0; i<model.vertexList.length; i++)
4) Чтобы заработал атачМуви:
center.attachMovie("vertex", "v"+i, i);
Нужно в Лайбрари у нашего мувиклипа (я в нём сделал квадрат 100х100 толщиной в 1пх и на сцену его не вылаживал, сам код в первом кадре), который называется "vertex", указать Linkage - поставить галочку Export for ActionScript (в Export in first frame галочка сама поставится). Identifier установится в "vertex". Это нужно для работы программы.
Всё. Наслаждаемся. И познаём истину.