Witam.
To mój pierwszy post na tym forum. Chciałbym się przywitać z wszystkimi użytkownikami tego wspaniałego forum.
Niestety moja wizyta podyktowana jest pewnym problemem na jaki napotkałem. Od pewnego czasu pisze bibliotekę obsługująca webgl i obecnie zabrałem się za pisanie kamery. Chciałem to zrobić po najmniejszej linii oporu. Miała działać tak:
1. Generuje macierz widoku perspektywicznego.
const aspect = GL.canvas.clientWidth / GL.canvas.clientHeight;
const projectionMatrix = m4.perspective(fieldOfViewRadians, aspect, 1, 2000);
2. Ustawiam kamerę na jakiejś pozycji i ustawiam punkt patrzenia na wprost.
cameraPosition = [pos_x, pos_y, pos_z];
cameraMatrix = m4.lookAt(cameraPosition, this.target, up);
3. Modyfikuje za pomocą macierzy obrotu widok w dwóch płaszczyznach.
cameraMatrix = m4.zRotate(cameraMatrix, angle_z);
viewMatrix = m4.yRotate(cameraMatrix, angle_y); // ta oś sprawia kłopot
4.Potem wszystko składam:
viewMatrix = m4.inverse(viewMatrix);// Make a view matrix from the camera matrix.
matrix = m4.multiply(projectionMatrix, viewMatrix);
W teorii wydaje się że powinno działać i faktycznie działa dla jednej osi ale problem pojawia się gdy dodaje 2 oś, Nagle obraz zaczyna dziwnie skręcać przy próbie ruchu kamery. Podejrzewam że oś nie jest sztywno połączona z kamerą lub też pierwsza modyfikacja ją zmienia. Czy ktoś wie jak to naprawić? I czy mógłby to tak jakoś prosto mi wyjaśnić?