@Sratimon

OpenGl камера нужна помощь?

Знаю есть много тем . И в гугле очень большой объем информации. Но всё же я решил задать вопрос тут .
Так вот что я нашел
1) Двигаем мир вокруг камеры . Ясно понятно но если мир очень большой и насыщен множеством маленьких объектов. Я думаю это не лучший вариант.
2) Что то как то подсчитать перерисовать и профит ( плохо понятно это решение).
Других вариантов я не нашел если они есть прошу помочь .Желательно проверенными ссылками.
И еще вопросик . Как камера сделана в DirectX ?
Скорее все го это глупый вопрос и появился он из за моих скудных знаний но мне очень интересно решение этой проблемы .
В общем хотелось бы узнать как реализована эта проблема в онлайн играх ММО РПГ
wow , pw, L2, и т.д
Знаю они на DirectX но меня интересует решение в openGl решения на DirectX тоже подойдут (тоже интересуюсь им).
  • Вопрос задан
  • 728 просмотров
Решения вопроса 2
Nipheris
@Nipheris Куратор тега C++
Во-первых, условимся, что в рамках вопроса не делаем различий между OpenGL и DirectX. Будем называть их "графическим API".
Во-вторых, будем считать это графическое API низкоуровневым (т.е. таким, как OpenGL и DirectX). Графические движки, где есть понятие сцены и камеры не рассматриваем в принципе.

Итак, с математикой вам все равно придется разбираться по книгам (ищите об операциях над матрицами и векторами), поэтому попробую подсказать с концептуальной точки зрения.
Самая главная истина, которую вам сейчас нужно понять:

Для графического API НИКАКОЙ КАМЕРЫ НЕ СУЩЕСТВУЕТ.

Для графического API существуют только примитивы (треугольники, линии, точки), которые вы хотите нарисовать, состоящие из вершин с трехмерными координатами и набор математических преобразований, которые вы хотите выполнить над этими вершинами ПЕРЕД тем, как они начнут реально рисоваться на экране (т.е. перед их растеризацией). ВСЁ. Все, что для вас выглядит как движение/поворот объекта в игровом мире ("мировые преобразования"), и движение/поворот камеры ("видовые преобразования") - лишь результат того, что вектора, задающие вершины объекта (например, кубика) предварительно умножаются на нужную, рассчитанную вами матрицу.

Лет 10-15 назад такая матрица отдавалась непосредственно графическому API через специальные вызовы (когда видяхи уже умели делать T&L https://en.wikipedia.org/wiki/GeForce_256 , но еще не умели шейдеры), сегодня умножение вектора на матрицу - всего лишь одно из множества различных преобразований, которые можно выполнить в векторном шейдере.

Теперь читайте про то, как эти матрицы используются и рассчитываются. Когда поймете матчасть, гляньте библиотеку GLM (раз уж у вас указано C++ и OpenGL) - она поможет не делать вам рутинную работу.
Ответ написан
Комментировать
@syrov
пишу программы до 99 строк
Для понимания второго вопроса необходимо разобраться в следующем:
- (1) теорема Пифагора а^2+b^2=c^2, пропорциональность и подобие треугольников
- (2) тригонометрия, cos, sin, tan, sin(alpha)^2+cos(alpha)^2=1, итд
- (3) особо из тригонометрии: cos(a+b)=cos(a)cos(b)-sin(a)sin(b) и sin(a+b)=sin(a)cos(b)+sin(b)cos(a)
- (4) вектор как направление и величина, и как сумма проекций на единичные вектора (ijk)
- (5) как (3) в сочетании с (4) соответствует матрице поворота:
|cos -sin |
|sin cos |
- (6) в чем разница записи матрицы (5) в OpenGL и DirectX, пре и пост умножение матрицы на вектор.
(материалы в школьных учебниках, OpenGL суперкнига тоже, книги по 3д играм для программистов)
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
ThePyzhov
@ThePyzhov
iOS Ninja
OpenGL - суперкнига, там рассказывается про поворот камеры через матрицы.

P.S. для понимания нужен хороший мат. аппарат
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы