Когда работают с экранными координатами, четко представляют что и куда необходимо вывести. Если это экран, например, с разрешением 800х600, то легко представить какие точки войдут на него, а какие останутся за его пределами.
Когда мы работаем с мировыми матрицами и матрицами вида, как узнать, что войдет на экран, а что - нет? Например, необходимо вывести квадрат, чей нижний левый угол совпадет с нижним левым углом экрана, или разместить точку в верхнем правом углу экрана. Как добиться такого? Опытным путем, изменяя матрицу вида (или положение камеры в пространстве)? Ну или другой пример, есть единичный куб, есть камера, есть расстояние между ними, как определить, войдет он на экран или нет?
Не вопрос, а каша. Подучите матчасть - что такое матрицы, как ими пользоваться, какие они бывают.
>Когда мы работаем с мировыми матрицами и матрицами вида, как узнать, что войдет на экран, а что - нет? Например, необходимо вывести квадрат,
Работаете с мировыми матрицами, а надо вывести квадрат? 2д-объект? С мировыми матрицами?
Короч.
Если у вас есть сцена с объектами, то можно определить что войдёт а что - нет с помощью frustum culling.
Если вам надо нарисовать 2д-штучку на экране - просто рисуйте и не применяйте матриц.
Mephisto std
> а каша.
Наверно коряво выразился.
Mephisto std
> Работаете с мировыми матрицами, а надо вывести квадрат? 2д-объект?
Да запросто, не совсем 2Д, координата Z все же есть. Вращать пару треугольников в пространстве вокруг оси OY.
Mephisto std
> то можно определить что войдёт а что - нет с помощью frustum culling.
Я так понял, что это алгоритм отсечения, все, что не видно - не рисуем. А как определить что войдет в сцену, а что - нет, до того, как я ее выведу на экран? Поместится у меня кубик на экране, или мне нужно изменить расстояние от камеры до него.
Ramm
> алгоритм отсечения, все, что не видно - не рисуем.
> А как определить что войдет в сцену, а что - нет, до того, как я ее выведу на экран?
что не видно - не рисуем, в сцену не войдёт, а то что видно - войдёт в сцену. Чего же вам еще нужно?
Mephisto std
> Чего же вам еще нужно?
Есть кубик, я ставлю камеру. Вывожу все на экран - не вмещается. Я отдаляю камеру - опять не вмещается, я отвожу камеру далеко - кубик занимает 1/20 площади... Я все делаю правильно? Опытным путем выясняю, какое мне необходимо расстояние, чтобы куб встал как надо. А если я захочу вывести в квадратное окно куб так, чтобы он занимал его целиком, то мне придется не раз изменять позицию камеры или куба. Других способов нет?

Итак, у вас есть ориентированный куб. Вам нужно подобрать положение камеры так, чтобы куб занял ровно весь экран при условии, что экран квадратный, правильно я понял?
Mephisto std
Т.е. есть куб со стороной 2, по x,y,z от -1 до 1, например. Направляю камеру в точку 0;0;5. Ставлю камеру в точку x=0,y=0, а по z - я не знаю как поставить, если слишком близко, то он не поместится целиком... Если далеко, то будет отображаться фон.
Другой пример, есть трехмерный объект, есть камера, как сделать так, чтобы камера не заходила за границы сцены, т.е. если мы двигаем камеру, то, например, левый край сцены не выходил за левый край экрана? Походу мне нужно получить экранные координаты после всех преобразований. Как это сделать?
bazhenovc
И-и-и?
Ramm
Есть кубик, я ставлю камеру. Вывожу все на экран - не вмещается. Я отдаляю камеру - опять не вмещается, я отвожу камеру далеко - кубик занимает 1/20 площади...
Можно двигать камеру, объекты, менять размеры объектов.
В принципе, можно менять параметры проецирования и то, как z-координата влияет на размеры объектов (если к этому есть доступ).
Можно отрендерить в редакторе все в картинку, обработать ее в графическом редакторе (или нарисовать в нем все "с нуля") и получить в точности то, что нужно. Далее в своей 3D-программе растянуть картинку на весь экран и отрендерить как задний фон.
Тема в архиве.