Этот вопрос неоднократно здесь всплывал но так и не нашел конкретного ответа.
Есть OGL в Ortho проекции (то есть 2D)
Хочу задавать координаты вершин в экранных координатах где [0, 0] - top left of the screen; [screen_width, screen_height] - bottom right of the screen,
Как это сделать?
P.S. Сейчас использую запись вида:
// 0.5f, 0.5f, 0.0f, // 0.5f, -0.5f, 0.0f, // -0.5f, -0.5f, 0.0f, // -0.5f, 0.5f, 0.0f,
Но это жутко неудобно.
Тебе нужно правильно настроить матрицу проектирования. Если используешь glOrtho или что-то вроде, то прочитай документацию по ней, там должен быть функционал для того, что тебе нужно.
AMM1AK
Сейчас так:
glViewport(0, 0, screen_width, screen_height); glDisable( GL_DEPTH_TEST); glMatrixMode( GL_PROJECTION); glLoadIdentity( ); glOrtho( 0.f, screen_width, screen_height, 0.f, -1.0f, 1.0f); glMatrixMode( GL_MODELVIEW); glLoadIdentity( );
Что еще нужно добавить?
glasm
Хочу сделать чтобы OGL сам автоматически транслировал координаты как ему надо.
gamedevfor
> glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(0.f, screen_width,
> screen_height, 0.f, -1.0f, 1.0f); glMatrixMode(GL_MODELVIEW); glLoadIdentity();
Есть мнение, что нужно выбросить говно мамонта и писать матрицы самостоятельно.
The Player
У меня в вертексный шейдер матрицы передаются в том числе и PROJECTION матрица.
У кого то есть готовая матрица для этого?
gamedevfor
В любой современной математической библиотеке. GLM или MathFU в помощь
Deamon
Не использую никаких библиотек, ни у кого нету в коде этой матрицы?
Не использую никаких библиотек, ни у кого нету в коде этой матрицы?
Вы угараете? Ваша матрица - простая матрица перемещения по диагонали влево вниз на 0.5. Никаких поворотов масштабирования или скоса. Выглядит она как единичная матрица, в последнем столбце которой два верхних элемента равны -0.5, третий равен 0, а последний остаётся равен 1.
Если даже такой мизер по матрицам не шарите, то зачем вообще взяли ванильный OpenGL? Юзайте гейм мейкер, там никаких "матриц в коде" не надо.
KumoKairo
> Ваша матрица - простая матрица перемещения
Это ж неправильно, потому что точка (100, 100) переместится на 0.5 пикселя и будет по сути тоже самое.
Ivashka
Попробую.
А gluLookAt это обязательно?
KumoKairo
> Если даже такой мизер по матрицам не шарите, то зачем вообще взяли ванильный
> OpenGL? Юзайте гейм мейкер, там никаких "матриц в коде" не надо.
Задача очень распространённая, должно быть стандартное решение без каких то там сторонних движков и либ.
gamedevfor
А чем вам gluOrtho2D не нравится? И вообще, выкиньте это старье, возьмите нормальную мат. либу и шейдеры.
Я и сам в матрицах не особый специалист, но:
r и l - левая и правая граница.
b и t - нижняя и верхняя граница.
Например, r = 640, l = 0, b = 480, t = 0.
Вроде бы проверил, все верно вывел. Правда здесь без дальней и ближней плоскости отсечения.
Ivashka
Не работает, видимая область тупо съезжает вправо (на половину ширины экрана) и вверх (на половину высоты экрана);
На координаты вершин это не влияет;
Если поставить:
gluOrtho2D(0, screen_width, screen_height, 0);
то это работает так же как и:
glOrtho(0.f, screen_width, screen_height, 0.f, -1.0f, 1.0f);
Vlad2001_MFS
> А чем вам gluOrtho2D не нравится?
Тем что оно не работает.
Тема в архиве.