Ну, вопрос, похожий на мой предыдущий, касается варианта glOrtho
glOrtho OpenGL es 2.0, как исправить пустой экран?
Треугольник ниже идеально нарисован в ортопроекции(без проекции это сжатый треугольник вместо треугольника с тремя равными сторонами в области просмотра прямоугольника)
GLfloat triangle_vertices[] =
{
-0.5, -0.25, 0.0,
0.5, -0.25, 0.0,
0.0, 0.559016994, 0.0
};
Код матрицы орто:
typedef float[16] matrix;
void ortho_matrix(float right, float left, float bottom, float top, float near, float far, matrix result)
{
// First Column
result[0] = 2.0 / (right - left);
result[1] = 0.0;
result[2] = 0.0;
result[3] = 0.0;
// Second Column
result[4] = 0.0;
result[5] = 2.0 / (top - bottom);
result[6] = 0.0;
result[7] = 0.0;
// Third Column
result[8] = 0.0;
result[9] = 0.0;
result[10] = -2.0 / (far - near);
result[11] = 0.0;
// Fourth Column
result[12] = -(right + left) / (right - left);
result[13] = -(top + bottom) / (top - bottom);
result[14] = -(far + near) / (far - near);
result[15] = 1;
}
Установка моей матрицы проекции на орто, где aspect_ratio =screen_width / screen_heigth
ortho_matrix(-aspect_ratio, aspect_ratio, -1.0, 1.0, -1.0, 1.0, PROJECTION_MATRIX);
Задача состоит в том, чтобы изменить орто-проекцию на перспективу, поэтому я пишу функцию для этого
UPD: изменено на col-major
void frustum_matrix(float right, float left, float bottom, float top, float near, float far, matrix result)
{
// First Column
result[0] = 2 * near / (right - left);
result[1] = 0.0;
result[2] = 0.0;
result[3] = 0.0;
// Second Column
result[4] = 0.0;
result[5] = 2 * near / (top - bottom);
result[6] = 0.0;
result[7] = 0.0;
// Third Column
result[8] = (right + left) / (right - left);
result[9] = (top + bottom) / (top - bottom);
result[10] = -(far + near) / (far - near);
result[11] = -1;
// Fourth Column
result[12] = 0.0;
result[13] = 0.0;
result[14] = -(2 * far * near) / (far - near);
result[15] = 0.0;
}
Установка моей проекции на матрицу усеченного конуса, где aspect_ratio = screen_width / screen_heigth
frustum_matrix(-aspect_ratio, aspect_ratio, -1.0, 1.0, 0.1, 1.0, PROJECTION_MATRIX);
Хорошо, я смотрю матрицу на странице glFrustrum http://www.opengl.org/sdk/docs/man/xhtml/glFrustum.xml,, но матрица для орто-функции взята изтот же источник и работает отлично.Во всяком случае, я вижу похожую матрицу усеченного в разных местах, например https://stackoverflow.com/a/5812983/1039175 функция усеченного.
Все, что я получил, это пустой экран, окно просмотра и другие вещи, связанные с прорисовкой, установлены правильно.