glTexGen - здійснює контроль генерації текстурних координат.

C-специфікація

void glTexGeni (GLenum coord,
                GLenum pname,
                GLint param) ;
 
void glTexGenf (GLenum coord,
                GLenum pname,
                GLfloat param) ;
 
void glTexGend (GLenum coord,
                GLenum pname,
                GLdouble param) ;


void glTexGeniv (GLenum coord,
                 GLenum pname,
                 const GLint * params) ;
 
void glTexGenfv (GLenum coord,
                 GLenum pname,
                 const GLfloat * params) ;
 
void glTexGendv (GLenum coord,
                 GLenum pname,
                 const GLdouble * params) ;

 

Параметри

coord вказує текстурну координату. Повинен містити одне з наступних значень: GL_S, GL_T, GL_R або GL_Q.

pname вказує символічне ім'я функції генерації текстурних координат. Повинен містити GL_TEXTURE_GEN_MODE. У версіях з масивами може містити GL_TEXTURE_GEN_MODE, GL_OBJECT_PLANE або GL_EYE_PLANE.

param вказує однозначний параметр текстурної генерації, може містити один з наступних значень: GL_OBJECT_LINEAR, GL_EYE_LINEAR, GL_SPHERE_MAP, GL_NORMAL_MAP або GL_REFLECTION_MAP.

params передає вказівник на масив параметрів текстурної генерації. Якщо pname містить GL_TEXTURE_GEN_MODE, тоді масив повинен містити одну з символічних констант: GL_OBJECT_LINEAR, GL_EYE_LINER, GL_SPHERE_MAP, GL_NORMAL_MAP або GL_REFLECTION_MAP. В іншому випадку, параметр params утримує коефіцієнти для функції генерації координат текстур, вказаних у pname.

Опис

Функція glTexGen обирає функції генерації текстурних координат або надає коефіцієнти для одної з таких функцій. Параметр coord іменує одну з текстурних координат (s, t, r, q); він повинен містити одну з символічних координат GL_S, GL_T, GL_R або GL_Q. Параметр pname повинен містити одне з наступних символічних констант: GL_TEXTURE_GEN_MODE, GL_OBJECT_PLANE або GL_EYE_PLANE. Якщо параметр pname містить GL_TEXTURE_GEN_MODE, тоді параметр params обирає один з наступних режимів: GL_OBJECT_LINEAR, GL_EYE_LINEAR, GL_SPHERE_MAP, GL_NORMAL_MAP або GL_REFLECTION_MAP. Якщо параметр pname містить GL_OBJECT_PLANE або GL_EYE_PLANE, параметр params містить коефіцієнти для відповідної функції текстурної генерації.

Якщо функція текстурної генерації являється GL_OBJECT_LINEAR, тоді використовується функція

g = p1 × xo + p2 × yo + p3 × zo + p4 × wo

де, g являється обчисленим значенням для координати названої у coord; p1, p2, p3 і p4 являються чотирма значенням переданими у params; і xo, yo, zo і wo являються координатами вертексів об'єкта. Дана функція може використовуватися, наприклад, для накладання текстур на землю, використовуючи рівень моря у якості початкової площини (визначеної за допомогою p1, p2, p3 і p4). Висота вертексів (вершин) землі обчислюються з допомогою функції генерації координат текстур GL_OBJECT_LINEAR у якості відстані від рівня віртуального моря; дана висота може бути використаною для індексування текстурного зображення щоб накладати білий сніг на піки і зелену траву на рівнину.

Якщо функція текстурної генерації являється GL_EYE_LINEAR, використовується функція

g = p1″ × xe + p2″ × ye + p3″ × ze + p4″ × we

де

p1″ ⁢ p2″ ⁢ p3″ ⁢ p4″ = p1 ⁢ p2 ⁢ p3 ⁢ p4 ⁢ M-1

і xe, ye, ze і we являються координатами точки огляду вертекса; p1, p2, p3 і p4 являються значеннями переданими у параметрі params, і M являється матрицею огляду моделі під час виклику glTexGen. Якщо M являється некоректною або одиничною, згенеровані текстурні координати кінцевою функцією можуть бути неточними або невизначеними.

Зверніть увагу, що значення у параметрі params визначає початкову площину у координатах точки огляду. Матриця огляду моделі (modelview), яка застосовується до них може не дати такий самий ефект під час трансформації вертексів багатокутників. Дана функція влаштовує поле текстурних координат, які можуть створювати динамічні лінії контурів на об'єктах, що рухаються.

Якщо функція текстурної генерації являється GL_SPHERE_MAP і параметр coord містить значення GL_S або GL_T, текстурні s- і t-координати генеруються наступним чином. Нехай u буде одиничним вектором, який вказує з початкової точки вертекса багатокутника (у координатах точки огляду); і n є числом меншим на одиницю від простого числа, яке являється поточною нормаллю, після трансформації у координати точки огляду. Тоді

f = f(x) ⁢ f(y) ⁢ f(z) T буде таким вектором відзеркалення, що

f = u-2 ⁢ n″ ⁢ n″ T ⁢ u

На кінець, нехай m=2 fx^2 + fy^2 + fz + 1 2 (?). Тоді значення присвоєні до текстурних координат будуть:

s = fxm + 1 2 (?)

t = f y m + 1 2 (?)

Для увімкнення або вимкнення функцій генерації текстурних координат. Викликайте glEnable або glDisable з одним з символічних імен текстурних координат (GL_TEXTURE_GEN_S, GL_TEXTURE_GEN_T, GL_TEXTURE_GEN_R або GL_TEXTURE_GEN_Q) у якості аргументу. Якщо увімкнено, вказані текстурні координати обчислюються у відповідності до функції генерації асоційованої з цією координатою. Якщо вимкнена, вертекси беруть вказані текстурні координати з поточного набору текстурних координат. За умовчанням, функції генерації текстурних координат встановлені у GL_EYE_LINEAR і вимкнені. Обидва рівняння s-площини являються (1, 0, 0, 0); обидва рівняння t-площини являються (0, 1, 0, 0); і рівняння r і q-площин являються (0, 0, 0, 0).

Якщо підтримується розширення ARB_multitexture, функція glTexGen встановлює параметри текстурної генерації для поточних активних текстурних одиниць, обраних за допомогою функції glActiveTexture.

Помилки

GL_INVALID_ENUM генерується коли параметри coord або pname не містять дозволених значень, або коли параметр pname являється GL_TEXTURE_GEN_MODE і параметр params не містить дозволеного значення.

GL_INVALID_ENUM генерується коли параметр pname містить значення GL_TEXTURE_GEN_MODE, параметр params являється GL_SPHERE_MAP і параметр coord містить значення GL_R або GL_Q.

GL_INVALID_OPERATION генерується якщо функція glTexGen викликається між відповідними викликами функцій glBegin і glEnd.

Пов'язані параметри

glGetTexGen

glIsEnabled з аргументом GL_TEXTURE_GEN_S

glIsEnabled з аргументом GL_TEXTURE_GEN_T

glIsEnabled з аргументом GL_TEXTURE_GEN_R

glIsEnabled з аргументом GL_TEXTURE_GEN_Q

Перегляньте також

glActiveTexture, glCopyPixels, glCopyTexImage2D, glCopyTexSubImage1D, glCopyTexSubImage2D, glCopyTexSubImage3D, glTexEnv, glTexImage1D, glTexImage2D, glTexImage3D, glTexParameter, glTexSubImage1D, glTexSubImage2D, glTexSubImage3D

Оригінал

https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/glTexGen.xml