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

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

Страницы: 1 2 3 Следующая »
gamedevforПостоялецwww2 ноя. 201723:07#15
Vlad2001_MFS
Попробовал вашу матрицу задать для GL_PROJECTION, на координаты вершин это не влияет (то есть по прежнему нужно задавать координаты в виде 0.5f; 0.5f; что бы что то увидеть) но само изображение стало перевернутым по вертикали.
Vlad2001_MFSПостоялецwww2 ноя. 201723:24#16
gamedevfor
Странно, на бумаге все ок. Все считается правильно. Попробуйте ее транспонировать, перед посылкой opengl'у.

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

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

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

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

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

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

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

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

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

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

gamedevforПостоялецwww3 ноя. 201715:29#25
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#26
Делал в самом шейдере: gl_Position.y = - gl_Position.y то получаю флип изображения по вертикали (то что мне нужно) но к сожалению еще получаю и смещение в нижний угол экрана (что мне вовсе не нужно).
Непонятно почему так.

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

Vlad2001_MFSПостоялецwww3 ноя. 201716:50#27
gamedevfor
Поменяйте в матрице местами b и t так, чтобы было t+b и t-b. Я сейчас даже в opengl все протестировал - работает.

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

gamedevforПостоялецwww3 ноя. 201717:22#28
Vlad2001_MFS
Сделал:
two / (top - bottom);

- ((top + bottom) / (top - bottom));

Изображение показывает нормально (не перевернуто) но смещено по вертикали вниз (то есть координаты квадрата не [100;100] как я хочу, а [100;874] при разрешении экрана [1024;1024])
Выходит что начало координат в таком случае не верхний левый угол, а нижний левый угол.

Правка: 3 ноя. 2017 21:02

Vlad2001_MFSПостоялецwww3 ноя. 201721:54#29
gamedevfor
Ну тогда не знаю чем помочь, у меня в тесте все нормально работает.
Страницы: 1 2 3 Следующая »

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

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