Я пытаюсь написать физический симулятор в C++ с opengl, и мне нужно иметь возможность масштабировать объекты (в основном кубы прямо сейчас) вдоль оси, в которой находится камера облицовка.Как масштабировать объект вдоль любой оси (в 3D-пространстве)
я могу рисовать объекты прекрасно использовать это как моя модель Matrix:
mat4 Model = Translate(cube.Position - float3(gl.Position.x, gl.Position.y, -gl.Position.z)) * Rotate(cube.Rotation) * Scale(cube.Scale);
Где gl.Position является положение кулачка, float3 является vec3 как класс я написал, и т.д. ...
Поэтому я попытался изменить эту строку, чтобы включить коэффициент масштабирования, прежде чем все остальное (где материал в конце наносится первым):
mat4 Model = Translate(cube.Position - float3(gl.Position.x, gl.Position.y, -gl.Position.z)) * Rotate(cube.Rotation) * Scale(cube.Scale) * (Rotate(float3(gl.Rotation.x, gl.Rotation.y, gl.Rotation.z)) * Scale(float3(1.0f, 1.0f, sqrt(1 - (velocity * velocity)))) * Rotate(float3(tau - gl.Rotation.x, tau - gl.Rotation.y, tau - gl.Rotation.z)));
это последняя часть, которая имеет важное значение, когда я повернуть объект, масштабируйте его, затем поверните его обратно. sqrt (1 - (скорость * скорость)) - физическая часть (сжатие Лоренца) и gl.Rotation - это vec3, где каждая ось содержит шаг, рыскание и рулон в радианах кулачка. Мои функции перевода, поворота и т. Д. Работают правильно, но мне нужна помощь в теории создания матрицы для масштабирования.
Далее обсуждается это на https://www.gamedev.net/topic/541643-scaling-along-arbitrary-axis/. – fuzzyTew