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

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

Страницы: 1 2 3 4 Следующая »
gamedevforПостоялецwww2 ноя. 201722:29#15
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#16
Vlad2001_MFS
> А чем вам gluOrtho2D не нравится?
Тем что оно не работает.
gamedevforПостоялецwww2 ноя. 201723:07#17
Vlad2001_MFS
Попробовал вашу матрицу задать для GL_PROJECTION, на координаты вершин это не влияет (то есть по прежнему нужно задавать координаты в виде 0.5f; 0.5f; что бы что то увидеть) но само изображение стало перевернутым по вертикали.
Vlad2001_MFSУчастникwww2 ноя. 201723:24#18
gamedevfor
Странно, на бумаге все ок. Все считается правильно. Попробуйте ее транспонировать, перед посылкой opengl'у.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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