Тема: OpenGL
Показать сообщение отдельно
Старый 20.08.2013, 12:03   #101
pozitiffcat
Мастер
 
Аватар для pozitiffcat
 
Регистрация: 09.05.2010
Адрес: Самара
Сообщений: 1,083
Написано 254 полезных сообщений
(для 533 пользователей)
Ответ: OpenGL

Сообщение от Nikich Посмотреть сообщение
gl_Position = vec4(vposition*mat2(cos(angle),-sin(angle),sin(angle),cos(angle)),0.0,1.0);
vpostion - 2D вектор с координатами точки.
Решил вращать на гапи, передавая в шейдер угол поворота. Матрица проверенная, точно работать должна, однако результат дает очень странный, получается дикое искажение примитива, а не вращение. Как будто используется ещё и z ось. В чем может быть проблема?
Про оптимизацию не надо говорить, написал так здесь для краткости кода.
mat2 rotationMat = mat2(cos(angle),-sin(angle),sin(angle),cos(angle));
gl_Position = vec4(vposition*(projMat*viewMat*modelMat*rotationMat));
projMat, viewMat и modelMat - юниформы приезжающие с движка. Проекция, камера и положение объекта на сцене.

и вообще вскрой любой движок, так никто не делает. Обычно это на ЦПУ делается. modelMat должен приехать уже с поворотом, а вместо двух projMat, viewMat можно в шейдер отдавать уже перемноженый projViewMat, актуально для батчей, чтоб не перемножать на каждую вершину.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Nikich (20.08.2013)