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

OGL экранные координаты вершин? (2 стр)

Поделиться

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

Vlad2001_MFSУчастникwww2 ноя. 201722:14#15
gamedevfor
А чем вам gluOrtho2D не нравится? И вообще, выкиньте это старье, возьмите нормальную мат. либу и шейдеры.

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

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

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

gamedevforПользовательwww2 ноя. 201722:29#16
Ivashka
Не работает, видимая область тупо съезжает вправо (на половину ширины экрана) и вверх (на половину высоты экрана);
На координаты вершин это не влияет;

Если поставить:

gluOrtho2D(0, screen_width, screen_height, 0);
то это работает так же как и:
glOrtho(0.f, screen_width, screen_height, 0.f, -1.0f, 1.0f);

gamedevforПользовательwww2 ноя. 201722:30#17
Vlad2001_MFS
> А чем вам gluOrtho2D не нравится?
Тем что оно не работает.
gamedevforПользовательwww2 ноя. 201723:07#18
Vlad2001_MFS
Попробовал вашу матрицу задать для GL_PROJECTION, на координаты вершин это не влияет (то есть по прежнему нужно задавать координаты в виде 0.5f; 0.5f; что бы что то увидеть) но само изображение стало перевернутым по вертикали.
Vlad2001_MFSУчастникwww2 ноя. 201723:24#19
gamedevfor
Странно, на бумаге все ок. Все считается правильно. Попробуйте ее транспонировать, перед посылкой opengl'у.

Правка: 3 ноя. 2017 15:14

gamedevforПользовательwww2 ноя. 201723:31#20
Vlad2001_MFS
Смысл не в этом, я хочу передавать в шейдер координаты вершин в экранных координатах - а все эти приемы с glOrtho, gluOrtho2D и GL_PROJECTION только дают возможность привязать ViewPort к экрану в 2d проекции, а на координаты вершины это никак не влияет.
Наверное придется делать вручную свою функцию перехода от экранных координат в координаты OpenGL потому что я вижу что OpenGL сам так делать не умеет.
Vlad2001_MFSУчастникwww2 ноя. 201723:36#21
gamedevfor
Вы либо-что не понимаете, либо как-то не так объясняете, что вам нужно. Эта матрица как раз-таки и влияет на координаты вершин. Она преобразовывает экранные координаты в координаты clip space'а.
Вы случайно не забыли в вершинном шейдере перемножать координаты вершин на эту матрицу проекции?

Правка: 2 ноя. 2017 23:37

gamedevforПользовательwww2 ноя. 201723:54#22
Vlad2001_MFS
> Кстати, чтоб убрать переворот изображения, поменяйте местами b и t. Например,
> было b-t стало t-b.

Так вообще перестало работать (черный экран).

gamedevforПользовательwww3 ноя. 20170:31#23
Vlad2001_MFS
> Вы случайно не забыли в вершинном шейдере перемножать координаты вершин на эту
> матрицу проекции?

Передал эту матрицу в шейдер и заработало.
Осталась только проблема с перевернутым изображением.

Daniil PetrovПостоялецwww3 ноя. 20173:42#24
Это что - первая версия OGL??? Я такие функции использовал ещё при первом написании движка по урокам NeHe, так это сколько ж лет назад было-то!!!!
PA3UJIbПостоялецwww3 ноя. 20178:03#25
gamedevfor
Наверное придется делать вручную свою функцию перехода от экранных координат в координаты OpenGL потому что я вижу что OpenGL сам так делать не умеет.

Да. Сам ОГЛ так не умеет делать, просто потому, что сначала координаты {x,y,z} переводятся в видовые с помощью видовой матрицы (т.е. в систему отсчета камеры). Потом видовые координаты переводятся в однородные с помощью матрицы проекции. Затем с помощью матрицы вьюпорта однородные координаты превращатся в экранные.
И если в шедер передаёшь координаты точки экрана, то просто раздели соответствующую компоненту на соответствующее значение размера - {x/ViewportWidth,y/ViewportHeight}. Понятное дело, что шейдеру нужно указать эти самые размеры
gamedevforПользовательwww3 ноя. 201713:30#26
PA3UJIb
Передаю в вертексный шейдер в качестве матрицы проекции эту матрицу:
Изображение
Всё работает но только изображение почему то переварачивается по вертикали.
Vlad2001_MFSУчастникwww3 ноя. 201715:16#27
gamedevfor
В какой системе координат вы указываете вершины? Ось Y направлена вверх или вниз?

Правка: 3 ноя. 2017 16:39

gamedevforПользовательwww3 ноя. 201715:29#28
Vlad2001_MFS
> В какой системе координат в указываете вершины? Ось Y направлена вверх или
> вниз?

А как это узнать?

Задаю так:

150.0f,  100.0f, 0.0f,    // Top Right
150.0f,  150.0f, 0.0f,    // Bottom Right
100.0f,  150.0f, 0.0f,    // Bottom Left
100.0f,  100.0f, 0.0f,    // Top Left 

GLuint indices[] = {  
  0, 1, 3, // First Triangle
  1, 2, 3  // Second Triangle
};

Хочу задавать координаты вершин в экранных координатах где [0, 0] - top left of the screen; [screen_width, screen_height] - bottom right of the screen,
P.S. Должна быть ось Y - вниз, если я правильно понимаю.

Правка: 3 ноя. 2017 15:31

gamedevforПользовательwww3 ноя. 201715:38#29
Делал в самом шейдере: gl_Position.y = - gl_Position.y то получаю флип изображения по вертикали (то что мне нужно) но к сожалению еще получаю и смещение в нижний угол экрана (что мне вовсе не нужно).
Непонятно почему так.

Правка: 3 ноя. 2017 15:42

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

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

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