Я писал программу для отображения 3d-моделей с использованием OpenGL, и до сих пор я использовал ортогональную проекцию, но я хочу переключиться на перспективную проекцию, чтобы при приближении камеры к модели она становилась больше.Я понимаю, что мне нужно умножить три матрицы (модель, представление и проекция) вместе, чтобы правильно применить все мои преобразования.Как вы можете видеть в следующем коде, я попытался это сделать и смог правильно создать модель и просмотреть матрицы.Я знаю, как они работают правильно, потому что, когда я умножаю модель и вижу проекции вместе, я могу вращать и перемещать объект, а также изменять положение и угол камеры.Моя проблема в том, что когда я умножаю этот продукт на матрицу проекции, я больше не вижу объект на экране.
Значение по умолчанию для структуры камеры здесь - {0,0, -. 5}, но яманипулируйте этим значением с помощью клавиатуры, чтобы перемещать камеру.
Я использую GLFW + glad и linmath.h
для математической матрицы.
//The model matrix controls where the object is positioned. The
//identity matrix means no transformations.
mat4x4_identity(m);
//Apply model transformations here.
//The view matrix controls camera position and angle.
vec3 eye={camera.x,camera.y,camera.z};
vec3 center={camera.x,camera.y,camera.z+1};
vec3 up={0,1,0};
mat4x4_look_at(v,eye,center,up);
//The projection matrix flattens the world to 2d to be rendered on a
//screen.
mat4x4_perspective(p, 1.57, width/(float)height, 1,10); //FOV of 90°
//mat4x4_ortho(p, -ratio, ratio, -1.f, 1.f, 1.f, -1.f);
//Apply the transformations. mvp=p*v*m.
mat4x4_mul(mvp, p, v);
mat4x4_mul(mvp, mvp, m);