Войти
ПрограммированиеФорумГрафика

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

Страницы: 1 2 3 Следующая »
#15
23:07, 2 ноя. 2017

Vlad2001_MFS
Попробовал вашу матрицу задать для GL_PROJECTION, на координаты вершин это не влияет (то есть по прежнему нужно задавать координаты в виде 0.5f; 0.5f; что бы что то увидеть) но само изображение стало перевернутым по вертикали.


#16
23:24, 2 ноя. 2017

gamedevfor
Странно, на бумаге все ок. Все считается правильно. Попробуйте ее транспонировать, перед посылкой opengl'у.

#17
23:31, 2 ноя. 2017

Vlad2001_MFS
Смысл не в этом, я хочу передавать в шейдер координаты вершин в экранных координатах - а все эти приемы с glOrtho, gluOrtho2D и GL_PROJECTION только дают возможность привязать ViewPort к экрану в 2d проекции, а на координаты вершины это никак не влияет.
Наверное придется делать вручную свою функцию перехода от экранных координат в координаты OpenGL потому что я вижу что OpenGL сам так делать не умеет.

#18
23:36, 2 ноя. 2017

gamedevfor
Вы либо-что не понимаете, либо как-то не так объясняете, что вам нужно. Эта матрица как раз-таки и влияет на координаты вершин. Она преобразовывает экранные координаты в координаты clip space'а.
Вы случайно не забыли в вершинном шейдере перемножать координаты вершин на эту матрицу проекции?

#19
23:54, 2 ноя. 2017

Vlad2001_MFS
> Кстати, чтоб убрать переворот изображения, поменяйте местами b и t. Например,
> было b-t стало t-b.

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

#20
0:31, 3 ноя. 2017

Vlad2001_MFS
> Вы случайно не забыли в вершинном шейдере перемножать координаты вершин на эту
> матрицу проекции?

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

#21
3:42, 3 ноя. 2017

Это что - первая версия OGL??? Я такие функции использовал ещё при первом написании движка по урокам NeHe, так это сколько ж лет назад было-то!!!!

#22
8:03, 3 ноя. 2017

gamedevfor

Наверное придется делать вручную свою функцию перехода от экранных координат в координаты OpenGL потому что я вижу что OpenGL сам так делать не умеет.

Да. Сам ОГЛ так не умеет делать, просто потому, что сначала координаты {x,y,z} переводятся в видовые с помощью видовой матрицы (т.е. в систему отсчета камеры). Потом видовые координаты переводятся в однородные с помощью матрицы проекции. Затем с помощью матрицы вьюпорта однородные координаты превращатся в экранные.
И если в шедер передаёшь координаты точки экрана, то просто раздели соответствующую компоненту на соответствующее значение размера - {x/ViewportWidth,y/ViewportHeight}. Понятное дело, что шейдеру нужно указать эти самые размеры
#23
13:30, 3 ноя. 2017

PA3UJIb
Передаю в вертексный шейдер в качестве матрицы проекции эту матрицу:
Изображение
Всё работает но только изображение почему то переварачивается по вертикали.

#24
15:16, 3 ноя. 2017

gamedevfor
В какой системе координат вы указываете вершины? Ось Y направлена вверх или вниз?

#25
15:29, 3 ноя. 2017

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 - вниз, если я правильно понимаю.

#26
15:38, 3 ноя. 2017

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

#27
16:50, 3 ноя. 2017

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

#28
17:22, 3 ноя. 2017

Vlad2001_MFS
Сделал:

two / (top - bottom);

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

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

#29
21:54, 3 ноя. 2017

gamedevfor
Ну тогда не знаю чем помочь, у меня в тесте все нормально работает.

Страницы: 1 2 3 Следующая »
ПрограммированиеФорумГрафика

Тема в архиве.