Размер точки в зависимости от расстояния должен вычисляться вершинным шейдером без использования стандартного алгоритма OpenGL. Этот стандартный алгоритм вычисляет размер как функцию от расстояния между точкой обзора (0,0, 0,1 ) и координатами вершины в пространстве координат обзора. И если координаты вершин вычисляются в вершинном шейдере, эта операция не выполняется. С другой стороны, вычисление прозрачности точки может быть сделано правильно, только если известно, примитиву какого типа принадлежит точка. Эта информация вершинному шейдеру недоступна, так как шейдер выполняется еще до сборки примитивов. Например, есть треугольник, у которого настройки передней поверхности GL_FT'LL, а задней - GL_P0IMT. Вершинный шейдер должен вычислять эффект перехода только в случае принадлежности вершины заднему треугольнику. Но это невозможно, так как шейдеру неизвестен тип примитива.

4.5.3. Отсечение Отсечение, заданное пользователем, может выполняться совместно с вершинным шейдером. Дополнительные плоскости отсечения задаются командой gl Cl i pPl ane. Потом эти плоскости будут преобразованы инвертированием текущей матрицы модели-вида. После выполнения вершинного шейдера полученные координаты вершины оцениваются относительно этих плоскостей отсечения, и шейдер должен представить координаты вершины в том же пространстве координат, в кото- -ром они определены для плоскости отсечения (обычно это пространство обзора). Такие координаты вершины задаются в переменной gl_Cl i pVertex. Если эта переменная не определена или не заполнена шейдером, а пользовательское отсечение включено, результаты могут стать непредсказуемыми.

CS. Взаимодействие со стандартными операциями OpenGL

Если вершинный шейдер имитирует стандартные операции OpenGL, он должен и вычислять координаты вершины в пространстве обзора, и сохранять их в gHlipVertex, например:

gl_ClipVertex = glModelViewMatrix * gl_Vertex;

Если все же необходимо делать отсечение в предметном пространстве координат, плоскости отсечения должны быть преобразованы инверсией матрицы модели-вида. Чтобы получилось правильное отсечение, матрица модели-вида должна быть преобразована в единичную матрицу.


⇐ Предыдущая| |Следующая ⇒