Звезда определяется коэффициентами для пяти полупространств, которые определяют форму звезды. Эти коэффициенты выбирают, исходя из размера шара. Точки на сфере классифицируются как внутренние и наружные по отношению к каждому полупространству. Точки в самом центре звезды будут однозначно классифицированы как внутренние по отношению ко всем пяти полупространствам, Точки просто внутри звезды будут внутренними по отношению к четырем или пяти полупространствам. Все остальные точки, не принадлежащие звезде, будут внутренними по отношению к трем или меньшему количеству полупространств.
Фрагменты в полоске вычислить легче. После того как каждая точка поверхности определена как «звезда», «полоска» или «иная», можно соответственно закрасить каждый фрагмент. Вычисления цвета происходят в порядке, который гарантирует приемлемый результат, даже если шар удален от точки обзора. Нормаль поверхности вычисляется во фрагментном шейдере. Вычисленные значения освещения, включая значения зеркального отражения, также накладываются на каждый фрагмент.
11.2.1. Подготовка приложения Приложение должно лишь задать координаты вершин для нормальной работы этого шейдера. И цвет, и нормали будут вычисляться алгоритмически во фрагментном шейдере. Единственное, что требуется, чтобы этот шейдер работал правильно, - все вершины должны определять сферу. Сфера может быть любого раз1.1.2. Игрушечный шар
мера, а фрагментный шейдер сделает необходимые вычисления, основываясь на известной геометрии сферы.
Параметры этому тендеру передаются через uniform-переменные. Рисунок, показывающий, как будет меняться изображение при изменении параметров, мож-до увидеть далее в этом разделе, а код шейдера приведен в листинге 11.3.
Листинг 11.3. Значения uniform-переменных для шейдера игрушечного шара
LightDir 0.57735. 0.57735. 0.57735. 0.0 HVector 0.32506. 0.32506. 0.88808. 0.0
Ball Center 0.0. 0.0. 0.0. 1.0 SpecularColor 0.4. 0.4. 0.4. 60.0
Red 0.5. 0.0. 0.0. 1.0
Blue 0.0. 0.3. 0.6. 1.0