Программирование игр, создание игрового движка, 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 или что-то вроде, то прочитай документацию по ней, там должен быть функционал для того, что тебе нужно.
glasmПользовательwww2 ноя. 201715:02#2
+AMM1AK
либо добавь необходимые преобразования в шейдере
gamedevforПользовательwww2 ноя. 201715:08#3
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#4
glasm
Хочу сделать чтобы OGL сам автоматически транслировал координаты как ему надо.
The PlayerУчастникwww2 ноя. 201717:09#5
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#6
The Player
У меня в вертексный шейдер матрицы передаются в том числе и PROJECTION матрица.
У кого то есть готовая матрица для этого?

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

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

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

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

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