Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / OGL экранные координаты вершин?

OGL экранные координаты вершин?

Страницы: 1 2 3 4 Следующая »
gamedevforПостоялецwww2 ноя. 201714:44#0
Этот вопрос неоднократно здесь всплывал но так и не нашел конкретного ответа.

Есть 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,
Но это жутко неудобно.

AMM1AKПостоялецwww2 ноя. 201714:58#1
Тебе нужно правильно настроить матрицу проектирования. Если используешь glOrtho или что-то вроде, то прочитай документацию по ней, там должен быть функционал для того, что тебе нужно.
gamedevforПостоялецwww2 ноя. 201715:08#2
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();

Что еще нужно добавить?

gamedevforПостоялецwww2 ноя. 201715:09#3
glasm
Хочу сделать чтобы OGL сам автоматически транслировал координаты как ему надо.
The PlayerУчастникwww2 ноя. 201717:09#4
gamedevfor
> glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(0.f, screen_width,
> screen_height, 0.f, -1.0f, 1.0f); glMatrixMode(GL_MODELVIEW); glLoadIdentity();
Есть мнение, что нужно выбросить говно мамонта и писать матрицы самостоятельно.
gamedevforПостоялецwww2 ноя. 201717:24#5
The Player
У меня в вертексный шейдер матрицы передаются в том числе и PROJECTION матрица.
У кого то есть готовая матрица для этого?

DeamonПостоялецwww2 ноя. 201717:53#6
gamedevfor
В любой современной математической библиотеке. GLM или MathFU в помощь
gamedevforПостоялецwww2 ноя. 201717:57#7
Deamon
Не использую никаких библиотек, ни у кого нету в коде этой матрицы?
KumoKairoПостоялецwww2 ноя. 201720:10#8
Не использую никаких библиотек, ни у кого нету в коде этой матрицы?

Вы угараете? Ваша матрица - простая матрица перемещения по диагонали влево вниз на 0.5. Никаких поворотов масштабирования или скоса. Выглядит она как единичная матрица, в последнем столбце которой два верхних элемента равны -0.5, третий равен 0, а последний остаётся равен 1.
Если даже такой мизер по матрицам не шарите, то зачем вообще взяли ванильный OpenGL? Юзайте гейм мейкер, там никаких "матриц в коде" не надо.
IvashkaПостоялецwww2 ноя. 201720:20#9
 proc camera_interface_projection
     invoke glMatrixMode,GL_PROJECTION
     invoke glLoadIdentity
     glcall gluOrtho2D,neg_desktop_x_two,desktop_x_two,neg_desktop_y_two,desktop_y_two ; -разрешение экрана по x/2,разрешение экрана по x/2,-разрешение экрана по y/2,разрешение экрана по y/2
     invoke glMatrixMode,GL_MODELVIEW
     invoke glLoadIdentity           
     glcall gluLookAt,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0
    ret
 endp 

Правка: 2 ноя. 2017 20:26

gamedevforПостоялецwww2 ноя. 201720:22#10
KumoKairo
> Ваша матрица - простая матрица перемещения
Это ж неправильно, потому что точка (100, 100) переместится на 0.5 пикселя и будет по сути тоже самое.
gamedevforПостоялецwww2 ноя. 201720:24#11
Ivashka
Попробую.
А gluLookAt это обязательно?
gamedevforПостоялецwww2 ноя. 201720:27#12
KumoKairo
> Если даже такой мизер по матрицам не шарите, то зачем вообще взяли ванильный
> OpenGL? Юзайте гейм мейкер, там никаких "матриц в коде" не надо.
Задача очень распространённая, должно быть стандартное решение без каких то там сторонних движков и либ.
IvashkaПостоялецwww2 ноя. 201720:30#13
gamedevfor
Нет
Vlad2001_MFSПостоялецwww2 ноя. 201722:14#14
gamedevfor
А чем вам gluOrtho2D не нравится? И вообще, выкиньте это старье, возьмите нормальную мат. либу и шейдеры.

Я и сам в матрицах не особый специалист, но:
render | OGL экранные координаты вершин?
r и l - левая и правая граница.
b и t - нижняя и верхняя граница.
Например, r = 640, l = 0, b = 480, t = 0.

Вроде бы проверил, все верно вывел. Правда здесь без дальней и ближней плоскости отсечения.

Правка: 2 ноя. 2017 22:16

Страницы: 1 2 3 4 Следующая »

/ Форум / Программирование игр / Графика

2001—2018 © GameDev.ru — Разработка игр