glTexEnv
устанавливает такие вещи, как сэмплы из текстуры в сочетании с цветом материала.Это не будет делать отображение окружающей среды.На стационарном конвейере OpenGL вы, вероятно, будете использовать glTexGen
.В OpenGL ES нет glTexGen
.
Что вы можете сделать вместо этого, так это воспользоваться стеком текстурных матриц.ES не поддерживает 3d текстуры, но поддерживает координаты 3d текстур.Итак, продублируйте ваши нормали вершин в координаты текстуры и убедитесь, что вы загружаете стек матриц текстуры с матрицей нормалей (которая является просто вращательной частью преобразования из пространства объектов в мировое пространство, если у вас нет масштабирования).Таким образом, вы получите трехмерные текстурные координаты, которые эквивалентны нормалям мирового пространства.Оставив GL для использования их в качестве двумерного индекса в текстуре, вы сможете использовать карту сфер для отображения окружающей среды.
Это не пример Android, но лучший онлайн-пример, который я могу найти, который ничего не делаетглупо, если делать обычные вычисления (явно) для ЦП, это , это из старых примеров Nokia Symbian / Series 60.Связанная статья объясняет подход и включает ссылку на .cpp, который реализует его.OpenGL ES одинакова для разных платформ, за исключением расширений, поэтому он должен портировать непосредственно на Android.
не в том смысле, в котором вы спрашиваете;концепция заключается в том, что текстурированный невращающийся примитив окружает объект - координаты карты среды для каждой вершины вычисляются путем наведения луча из вершины вдоль ее нормали до тех пор, пока он не достигнет концептуальной ограничивающей геометрии и не отработает там текстурную координату.Так что вам нужны правильные нормали, но вам не нужно указывать координаты текстуры.
не совсем, по крайней мере, насколько я понимаю;Эффекты Френеля зависят от угла между вами и поверхностью, тогда как отображение окружения зависит только от вращения объекта в мировом пространстве.
да, но вполне возможно, что в конечном итоге вам придется использовать многократный рендерингпроходит.Для ES требуется наличие как минимум двух текстурных блоков, так что вы можете использовать как минимум среду + маску - если у вас есть другие компоненты, которые вы хотите применить, вы можете сделать несколько визуализаций, получая все для накопления в буфере кадров.