Вопрос про оси

Что такое Vertex3f, и что мы поворачиваем?(
Код:
Vertex3f localVertex = new Vertex3f(1, 0, 0);

Это что?
 
svk написал(а):
Что такое Vertex3f, и что мы поворачиваем?(
Код:
Vertex3f localVertex = new Vertex3f(1, 0, 0);

Это что?
Просто какие-то координаты в трехмерном пространстве. Было три числа, запихнули их в объект класса Vertex3f. В твоем случае - позиция частицы.
 
GloomyFolken написал(а):
svk написал(а):
Что такое Vertex3f, и что мы поворачиваем?(
Код:
Vertex3f localVertex = new Vertex3f(1, 0, 0);

Это что?
Просто какие-то координаты в трехмерном пространстве. Было три числа, запихнули их в объект класса Vertex3f. В твоем случае - позиция частицы.
В смысле, мы сначала повернули всю систему 
Код:
Matrix3f rotMatrix = rotationMatrix(90, 0, 1, 0);

Потом добавили туда точку 
Код:
Vertex3f localVertex = new Vertex3f(1, 0, 0);

И что-то сделали
Код:
Vertex3f rotatedVertex = Matrix3f.transform(rotMatrix, localVertex, null)

Что в конце получилось, как это использовать, как добавить ещё 1 точку и можно-ли делать 1 строку кода после 2 строки?
 
1) Извини дурака с проблемами по части памяти: класс называется не Vertex3f, а Vector3f.
2) Да используй как хочешь. У тебя есть матрица, при умножении на которую координата поворачивается на 90 градусов вокруг вертикальной оси. Никто не запрещает применить эту матрицу, чтобы повернуть позицию сотни партиклов. Собственно, в этом и есть суть матриц трансформации: один раз сделал матрицу, а потом можешь трансформировать любое количество вершин за относительно небольшое количество операций. Кстати говоря, рекомендую делать так:
Код:
Matrix3f rotMatrix = rotationMatrix(90, 0, 1, 0); //поворот на 90 градусов вокруг вертикальной оси
Vector3f vertex = new Vector3f(1, 0, 0);
Matrix3f.transform(rotMatrix, vertex, vertex);
Если третьим аргументом ставить null, то будет создаваться новый объект, это не очень хорошо. Так просто изменяется старый. Естественно, можно потом дописать так:
Код:
Vector3f vertex2 = new Vector3f(1, 0, 1);
Matrix3f.transform(rotMatrix, vertex2, vertex2);
Vector3f vertex3 = new Vector3f(1, 1, 0);
Matrix3f.transform(rotMatrix, vertex3, vertex3);
В итоге все три вершины будут трансформированы этой матрицей (в примере - повернуты на 90 градусов вокруг вертикальной оси).
 
Блин, вы мне говорите что-то, но я ничего не имею.
Допустим, у меня есть координаты 3-ёх точек. x1, y1, z1...
Они в локальной системе координат, например точка А имеет координаты 1 1 1, точка Б 2 2 2
Как мне их повернуть, и на выходе получить координаты "повёрнутыми", например, мы повернули на 90° по оси Y, мы должны получить: 1 -1 1 и 2 -2 2 (Если я вообще правильно высказываюсь...). И всё это поставить с центром в мир (Вставили точки А и Б в мир, где центр - игрок)
А у вас хренотень какая-то, создаём какой-то Vector3f, что-то там трансформируем, я вообще не понимаю о чём вы.
 
например точка А имеет координаты 1 1 1
Код:
Vector3f vecA = new Vector3f(1, 1, 1);
Как мне их повернуть, и на выходе получить координаты "повёрнутыми", например, мы повернули на 90° по оси Y
Код:
Matrix3f.transform(rotMatrix, vecA, vecA); //матрицу создаем чуть раньше при помощи метода, который я уже дал
//Получится ни разу не (1 -1 1). (1 -1 1) было бы, если бы мы отразили по оси Y. Мы же поворачиваем вокруг оси. Представь себе палку, которая смотрит вверх из нашей локальной системы координат. Вот наша вершина сначала "прикрепляется" к этой палке, а потом палка крутится против часовой стрелки, и вершина крутится вместе с ней. В итоге получится (1 1 -1), если я ничего не напутал с направлением вращения.
И всё это поставить с центром в мир
Код:
worldX = vecA.x + translationPointX; //translationPointX - x координата центра нашей локальной системы координат в глобальной системе координат. 
worldY = vecA.y + translationPointY;
worldZ = vecA.z + translationPointZ;
//ну или как однострочный вариант:
vecA = Vector3f.add(vecA, translationPoint, vecA); //теперь в vecA глобальной системе координат.

В качестве глобальной системы координат можешь использовать как мировые координаты (то, что называется координатами игрока в майне), так и координаты относительно игрока (тогда нужно из мировых вычесть позицию игрока). При отрисовке обычно глобальной системой координат считается система относительно игрока (но не камеры, а просто позиции игрока, не учитывая поворот камеры).
 
Отлично, насколько я понял Vector3f это хренотень, в которой и содержаться наши координаты?
Спасибо вам огромное, хоть и объяснятель из вас не очень хороший (Без обид), но вы всегда придёте на помощь!
 
Ну, я отлично знаю, что объясняю я так себе, но больше тут по этой тебе объяснять некому :D
[merge_posts_bbcode]Добавлено: 26.04.2015 19:19:12[/merge_posts_bbcode]

Vector3f - это просто класс, который представляет вектор в трехмерном пространстве. Записать туда можно что угодно: координаты, направление, вектор скорости, нормаль к поверхности и что угодно другое, что представляется тремя числами и к чему применимы операции над векторами.
 
Назад
Сверху