У меня есть класс с именем Cube
, в котором я отображаю основной куб на экране.У меня это работает, так как рендеринг базового куба любого масштаба в начале координат 0, 0, 0
.Однако, если я хочу переместить куб, масштабировать любую из его осей или повернуть куб;Я понятия не имею, с чего начать, поскольку мне нужно добиться этого в Vertex
объекте.
struct Vertex {
Vector3 Position;
Vector3 Normal;
Vector2 TextureUV;
Color Color;
}
Чтобы отобразить куб размером 1000000
, я просто заполняю свойства Position
этим значением (с учетом отрицательных и положительных значений для генерации граней).
new Vertex(new Vector3(-1000000, -1000000, -1000000), new Vector3(-1, -1, -1), Color.White);
Cube
имеет четыре свойства:
- Положение (
Vector3
). - Шкала (
Vector3
). - Вращение (
Vector3
). - Цвет (
SharpDX.Color
).
Мой вопрос такой, какой я естьуказав Vertex
местоположений, как я могу вычислить новую позицию при применении поворота и положения?
Я попытался выполнить базовое вычитание и сложение, которое просто масштабирует куб по-разному, а начало координат остается на 0, 0, 0
(пожалуйста, некратко)
new Vertex(new Vector3(P.X - S.X, P.Y - S.Y, P.Z - S.Z), new Vector3(1, 1, 1), Color.White);
Вышеприведенный код не является точным, поскольку в настоящее время он используется на другом компьютере.
Если вам нужны дополнительные сведения, пожалуйста, дайте мне знать, и яуточню.
Вопрос
Как установить положение вертальды, основанные на предоставленных векторах положения, масштаба и поворота?
Контрольный пример
Следующие контрольные примеры предназначены только для позиции и показывают, как я буду проверять ответы, данные.
// Renders at origin.
Cube myCube = new Cube(new Vector3(0, 0, 0), new Vector3(100, 100, 100), Color.White);
// Renders to the left.
Cube myCubeLeft = new Cube(new Vector3(-250, 0, 0), new Vector3(100, 100, 100), Color.White);
// Renders to the right.
Cube myCubeRight = new Cube(new Vector3(250, 0, 0), new Vector3(100, 100, 100), Color.White);
// Renders above.
Cube myCubeUp = new Cube(new Vector3(0, -250, 0), new Vector3(100, 100, 100), Color.White);
// Renders below.
Cube myCubeDown = new Cube(new Vector3(0, 250, 0), new Vector3(100, 100, 100), Color.White);
Я добавлю тестовые примеры поворота и масштабирования позже, если потребуется.