У меня возникла небольшая проблема с пониманием ротации и переводов в контексте примера WebGL.Взаимодействие WebGL, переводить после поворота
Что происходит: У меня есть пример программы, которая позволяет мне повернуть треугольник вокруг его центра и перевести его на 2D плоскости. Код ниже делает именно это (использует библиотеки glmatrix). ModelViewMatrix применяется к вершинам треугольников.
Вопрос: Если треугольник повернут на 180 °, тогда перевод неверен. Конечно, по-прежнему можно перемещать треугольник, но направления перевернуты. Если я перетаскиваю треугольник в направлении вверх, объект фактически перемещается дальше в нижнюю часть экрана.
Вопрос: Что здесь происходит и почему это происходит? Что мне нужно сделать, чтобы исправить это поведение? Я хочу, чтобы иметь возможность перетаскивать треугольник независимо от того, насколько он был повернут, оси трансакции должны быть согласованными.
Заранее благодарим за ваши ответы, я уверен, что это простой вопрос для кого-то, кто знаком со всем материалом трансформации. :)
var modelViewMatrix = mat4.create();
function mouseDown(mouseEvent){
isMouseDown = true;
g_drawInterval = setInterval(redraw, 40);
}
var translationFactor = 0.01;
var rotationFactor = 0.01;
function mouseMove(mouseEvent){
if (isMouseDown){
deltaX = mouseEvent.clientX - oldPosX;
deltaY = mouseEvent.clientY - oldPosY;
if (mouseEvent.button === 0) // left mouse button
mat4.translate(modelViewMatrix, modelViewMatrix,
[deltaX * translationFactor, -deltaY * translationFactor, 0]);
else
mat4.rotateZ(modelViewMatrix, modelViewMatrix,
deltaX * rotationFactor -deltaY * rotationFactor);
}
oldPosX = mouseEvent.clientX;
oldPosY = mouseEvent.clientY;
}
Вот статья о том, как работает математическая математика (http://webglfundamentals.org/webgl/lessons/webgl-2d-matrices.html). Может быть, это поможет? – gman