Текстурирование сфер с кубическими картами (не карты отражения) - PullRequest
1 голос
/ 11 февраля 2009

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

Учитывая массив координат, включающий в себя вершины несовершенной сферы (с высотой, но, по сути, сферой) с центром в 0,0,0, как можно генерировать текстурные координаты для карты куба?

1 Ответ

6 голосов
/ 11 февраля 2009

Вы делаете это через GLSL? В этом случае textureCube принимает vec3 в качестве координаты текстуры, которая является единичным вектором на сфере. В вашем случае вы берете координату вашего фрагмента относительно центра сферы, нормализуете ее и передаете как координату. Не нужно беспокоиться о внутреннем представлении в виде шести двумерных текстур.

uniform samplerCube cubemap;
varying vec3 pos; // position of the fragment w.r.t. the center of the sphere
/* ... */
vec4 color = textureCube(cubemap, normalize(pos).stp);

Так же работает и в OpenGL с фиксированным конвейером.

Кстати, вот как координаты используются внутри: наибольшая координата в абсолютном значении используется для выбора, из какой из шести текстур считывать (знак выбирает положительный или отрицательный) Две другие координаты используются для поиска текселя на выбранной карте после разделения по наибольшей координате.

...