Android OpenGL отражение / текстура среды - PullRequest
0 голосов
/ 21 февраля 2012

Где я могу найти несколько хороших примеров использования карт отражения?Возможно ли это в OpenGL ES 1.0?Я пытался использовать glTexEnvx, но я не знаю, как его использовать.У меня также есть несколько вопросов:

1) Требуется ли для карты отражения координаты текстуры?В таких программах, как 3ds max - нет.
2) Могу ли я изменить отражательную способность и зависимость от угла (чтобы создать какой-то эффект Френеля) без написания шейдеров?
3) Можно ли использовать черно-белую текстуру длямаска отражения на диффузном материале?

1 Ответ

1 голос
/ 21 февраля 2012

glTexEnv устанавливает такие вещи, как сэмплы из текстуры в сочетании с цветом материала.Это не будет делать отображение окружающей среды.На стационарном конвейере OpenGL вы, вероятно, будете использовать glTexGen.В OpenGL ES нет glTexGen.

Что вы можете сделать вместо этого, так это воспользоваться стеком текстурных матриц.ES не поддерживает 3d текстуры, но поддерживает координаты 3d текстур.Итак, продублируйте ваши нормали вершин в координаты текстуры и убедитесь, что вы загружаете стек матриц текстуры с матрицей нормалей (которая является просто вращательной частью преобразования из пространства объектов в мировое пространство, если у вас нет масштабирования).Таким образом, вы получите трехмерные текстурные координаты, которые эквивалентны нормалям мирового пространства.Оставив GL для использования их в качестве двумерного индекса в текстуре, вы сможете использовать карту сфер для отображения окружающей среды.

Это не пример Android, но лучший онлайн-пример, который я могу найти, который ничего не делаетглупо, если делать обычные вычисления (явно) для ЦП, это , это из старых примеров Nokia Symbian / Series 60.Связанная статья объясняет подход и включает ссылку на .cpp, который реализует его.OpenGL ES одинакова для разных платформ, за исключением расширений, поэтому он должен портировать непосредственно на Android.

  1. не в том смысле, в котором вы спрашиваете;концепция заключается в том, что текстурированный невращающийся примитив окружает объект - координаты карты среды для каждой вершины вычисляются путем наведения луча из вершины вдоль ее нормали до тех пор, пока он не достигнет концептуальной ограничивающей геометрии и не отработает там текстурную координату.Так что вам нужны правильные нормали, но вам не нужно указывать координаты текстуры.

  2. не совсем, по крайней мере, насколько я понимаю;Эффекты Френеля зависят от угла между вами и поверхностью, тогда как отображение окружения зависит только от вращения объекта в мировом пространстве.

  3. да, но вполне возможно, что в конечном итоге вам придется использовать многократный рендерингпроходит.Для ES требуется наличие как минимум двух текстурных блоков, так что вы можете использовать как минимум среду + маску - если у вас есть другие компоненты, которые вы хотите применить, вы можете сделать несколько визуализаций, получая все для накопления в буфере кадров.

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