Как визуализировать плоскость, казалось бы, бесконечного размера? - PullRequest
3 голосов
/ 11 сентября 2011

Как я могу визуализировать текстурированную плоскость в некоторой точке z, чтобы она была видна в бесконечность?

Я мог бы добиться этого, рисуя действительно огромную плоскость, но если бы я переместил свою камеру с земли на более высокую высоту, то я бы начал видеть края плоскости, которые я хочу, чтобы меня не видели.

Если это вообще возможно, я бы предпочел не-шейдерный метод.

Редактировать: Я попытался с 4-мерной системой координат, как предложено, но: она работает ужасно плохо. мои текстуры будут искажаться даже в положении камеры 100, поэтому мне все равно придется рисовать несколько текстурированных квадратов. возможно, я мог бы сделать это и нарисовать самые дальние четверки с помощью системы координат 4d? есть идеи получше?

Edit2: для тех, кто не знает, что такое искажение текстуры opengl, вот пример из тестов, которые я провел с 4d координатами вершины: enter image description here

(если изображение не видно: http://img828.imageshack.us/img828/469/texturedistort.jpg) обратите внимание, что это происходит только тогда, когда камера достаточно далеко, в этом случае ее расстояние от центра составляет всего 100.0 единиц! (середина = (0,0), где мои 4 треугольника начинают уходить в бесконечность). обычно это происходит около 100000.0 или около того. но с 4d вершинами это, кажется, происходит раньше по какой-то причине.

Ответы [ 2 ]

3 голосов
/ 12 сентября 2011

Вы не можете визуализировать объект бесконечного размера.

Скорее всего, вы путаете концепцию проекции с визуализацией объектов бесконечного размера.Четырехмерная однородная координата, где W равно 0, представляет трехмерную позицию, которая находится на бесконечности относительно проекции.Но это не значит, что точка бесконечно далеко от камеры;это означает, что точка бесконечно близко к камере.То есть он представляет точку, координата Z которой (до умножения на матрицу перспективной проекции) была равна положению камеры (в пространстве камеры это 0).

См. В перспективе проекции точку, которая являетсяв той же плоскости, что и камера, бесконечно далеко по осям X и Y.Это природа перспективной проекции.4D однородные координаты позволяют вам задавать им все конечные числа, и поэтому вы можете использовать для них полезную математику (например, отсечение).

4D однородные координаты не позволяют представлять бесконечно большую поверхность.

1 голос
/ 16 сентября 2012

Рисовать бесконечно большую плоскость легко - все, что вам нужно, это вычислить линию горизонта в экранных координатах.Для этого нужно просто взять два неколлинеарных четырехмерных направления (скажем, [1, 0, 0, 0] и [0, 0, 1, 0]), а затем вычислить их положение на экране (умножением вручнуюс матрицей вида и матрицей проекции, а затем срезать в координаты области просмотра. Когда у вас есть эти две точки, вы можете вычислить 2D-линию на экране и обрезать ее по ней. Там у вас есть бесконечность плоскости (нижний многоугольник)Тем не менее, трудно отобразить текстуру на этой плоскости, потому что она будет бесконечно большой. Но если ваша текстура простая (например, сетка), то вы можете вычислить ее самостоятельно с помощью четырехмерных координат, используя ту же схему, что и выше.- вычисление точек и соответствующих им точек схода и их соединение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...