Oprogramowanie i wykorzystanie stacji roboczych Wykład 9

Transkrypt

Oprogramowanie i wykorzystanie stacji roboczych Wykład 9
Teksturowanie
Teksturowanie jest jednym z najważniejszych mechanizmów
grafiki komputerowej pozwalajacym
˛
na zwiekszenie
˛
realizmu
generowanej grafiki.
Oprogramowanie i wykorzystanie
stacji roboczych
Wykład 9
Dr inż. Tomasz Olas
OpenGL już od wersji 1.0 zawiera pełny zestaw funkcji
realizujacych
˛
nakładanie, filtrowanie i przekształcanie tekstur.
[email protected]
Rodzaje tekstur:
jednowymiarowe (1D),
dwuwymiarowe (2D),
trójwymiarowe (wolumeryczne) - od wersji 1.2 OpenGL,
sześcienne (kubiczne) - od wersji 1.3.
Instytut Informatyki Teoretycznej i Stosowanej
Politechnika Cz˛estochowska
Wykład 9 – p. 1/39
Tekstury
Wykład 9 – p
Proces nakładania tekstury
Tekstura jest zbiorem pixeli (texeli), w przypadku 2D jest tablica˛
dwuwymiarowa.
˛
W OpenGL szerokość wysokość i głebia
˛
tekstury musza˛ być
potegami
˛
dwójki.
Poszczególne piksele tekstury nazywa sie˛ texelami.
1. Utworzenie obiektu tekstury.
2. Określenie w jaki sposób tekstura ma być odwzorowana na
poszczególne punkty.
3. Właczenie
˛
mapowania tekstur.
4. Renderowanie sceny uwzgledniaj
˛
ace
˛ zarówno współrz˛edne
obiektów, jak również odwzorowanie tekstury.
Wykład 9 – p. 3/39
Wykład 9 – p
Utworzenie obiektu tekstury
Definiowanie tekstur 2D (I)
Utworzenie obiektu tekstury 2D polega na:
Wygenerowaniu lub wczytaniu tablicy reprezentujacej
˛
poszczególne texele tworzonej tekstury.
Zdefiniowaniu tekstury w OpenGL poprzez wywołanie
funkcji glTexImage2D z parametrami charakteryzujacymi
˛
tworzona˛ teksture.
˛
W OpenGL do definiowania dwuwymiarowych tekstur służy
funkcja glTexImage2D:
void glTexImage2D(GLenum target, GLint level, GLint internalFormat,
GLsizei width, GLsizei height,
GLint border, GLenum format,
GLenum type, const GLvoid *pixels);
gdzie:
target - GL_TEXTURE_2D.
level - poziom szczegółów mipmapy. Jeśli nie sa˛ używane mipmapy zwykle
wynosi zero.
internalformat - ilość komponentów koloru, od 1 do 4.
width - szerokość obrazu tekstury - musi być poteg
˛ a˛ liczby 2 lub być zgodna ze
wzorem 2n + 2 ∗ border.
height - wysokość obrazu tekstury - musi być poteg
˛ a˛ liczby 2 lub być zgodna ze
wzorem 2m + 2 ∗ border.
border - szerokość ramki dookoła obrazu tekstury (0 lub 1). lub 2.
Wykład 9 – p. 5/39
Definiowanie tekstur 2D (II)
Wykład 9 – p
Definiowanie tekstur 2D - Qt (I)
void glTexImage2D(GLenum target, GLint level, GLint internalFormat,
GLsizei width, GLsizei height,
GLint border, GLenum format,
GLenum type, const GLvoid *pixels);
Statyczna metoda klasy QGLWidget convertToGLFormat
przekształca obiekt klasy QImage do postaci wymaganej przez
funkcje glTexImage2D z biblioteki Qt.
gdzie:
QImage QGLWidget::convertToGLFormat (const QImage & img) [static]
format - format danych pikseli ( GL_COLOR_INDEX, GL_RED, GL_GREEN, GL_BLUE,
GL_ALPHA, GL_RGB, GL_RGBA, GL_LUMINANCE, GL_ALPHA_LUMINANCE).
type - typ danych dla wartości pikseli.
Zwracana mapa bitowa nie może być używana jako
standardowy obiekt klasy QImage, ale moga˛ być
wykorzystywane metody width, height i bits
Powyższa metoda dokonuje jedynie konwersji poszczególnych
pikseli, nie jest dokonywana zmiana rozmiaru bitmapy - musi
ona mieć odpowiednie rozmiary przed dokonaniem konwersji.
pixels - dane pikseli.
Wykład 9 – p. 7/39
Wykład 9 – p
Definiowanie tekstur 2D - Qt (II)
Filtrowanie tekstur
W czasie nakładania tekstur bardzo żadko wystepuje
˛
sytuacja,
w której pojedynczemu pikselowi widoku odpowiada dokładnie
jeden teksel tekstury.
QImage tex1, buf;
if (!buf.load("sky.bmp"))
qDebug("Cannot open image file");
else
tex1 = QGLWidget::convertToGLFormat(buf);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tex1.width(), tex1.height(), 0,
GL_RGBA, GL_UNSIGNED_BYTE, tex1.bits());
Tekstura jest najcz˛eściej albo „ściskana” albo „rozciagana”
˛
w
celu dopasowania do rozmiaru obiektu, na który jest
nakładana.
Proces dopasowania tekstury do wymaganych rozmiarów
nazywa sie˛ filtrowaniem.
W bibliotece OpenGL odrebnie
˛
określa sie˛ sposób filtrowania
w przypadku „ściskania” (filtr pomniejszajacy),
˛
jak i
„rozciagania”
˛
tekstury (filtr powiekszaj
˛
acy).
˛
Wykład 9 – p. 9/39
Wykład 9 – p.
Paramety obrazu tekstury (I)
Parametry obrazu tekstury (II)
glTexParameter[if](GLenum target, GLenum pname, GLfloat param);
glTexParameter[if]v(GLenum target, GLenum pname, GLfloat *param);
glTexParameter[if](GLenum target, GLenum pname, GLfloat param);
glTexParameter[if]v(GLenum target, GLenum pname, GLfloat *param);
gdzie:
gdzie:
target - musi to być GL_TEXTURE_1D lub GL_TEXTURE_2D.
pname cd:
pname - określa parametr tekstury, który jest ustawiany:
GL_TEXTURE_MIN_FILTER - określa metode˛ lub filtr stosowany przy
zmniejszaniu tekstury. Wartościa˛ param może być:
GL_NEAREST - filtrowanie „najbliższy sasiad”
˛
- pobierany jest najbliższy pixel
obrazu tekstury,
GL_LINEAR - liniowa interpolacja - przed narysowaniem czegokolwiek na
ekranie wartości kolorów obrazu tekstury powinny zostać liniowo
zinterpolowane,
GL_NEAREST_MIPMAP_NEAREST - filtr mipmapy „najbliższy sasiad”,
˛
GL_NEAREST_MIPMAP_LINEAR - liniowo interpolowana mipmapa,
GL_LINEAR_MIPMAP_NEAREST - liniowo interpolacja mipmap,
GL_LINEAR_MIPMAP_LINEAR - liniowa interpolacja interpolowanych mipmap.
Wykład 9 – p. 11/39
GL_TEXTURE_MAG_FILTER - określa metode˛ lub filtr stosowany przy
powiekszaniu
˛
tekstury. Wartościa˛ param może być:
GL_NEAREST - filtrowanie „najbliższy sasiad”,
˛
GL_LINEAR - liniowa interpolacja,
GL_TEXTURE_WRAP_S - określa sposób traktowania współrz˛ednych S tekstury
poza zakresem od 0.0 do 1.0.
GL_TEXTURE_WRAP_T - określa sposób traktowania współrz˛ednych T tekstury
poza zakresem od 0.0 do 1.0.
GL_CLAMP
GL_REPEAT
GL_BORDER_COLOR - określa kolor ramki to tekstur bez ramki.
Wykład 9 – p.
Parametry obrazu tekstury (III)
filtr GL_NEAREST
Parametry obrazu tekstury (IV)
filtr GL_LINEAR
Wykład 9 – p. 13/39
Parametry teksturowania
Wykład 9 – p.
Współrzedne
˛
tekstury
Funkcja glTexEnv ustawia parametry mapowania tekstury,
sterujace
˛ sposobem nakładania obrazów tekstur na wielokaty:
˛
glTexEnv{fi}(GLenum target, GLenum pname, TYPE param);
glTexEnv{fi}v(GLenum target, GLenum pname, TYPE *param);
gdzie:
target - definiowane środowisko teksturowania - musi nim być
GL_TEXTURE_ENV.
pname - nazwa definiowanego parametru:
GL_TEXTURE_ENV_MODE - określa tryb teksturowania. Parametr param może
przyjmować wartości:
· GL_DECAL - obraz tekstury jest bezpośrednio nakładany na wielokat,
˛
· GL_VERB - przed nałożeniem na wielokat,
˛ obraz tekstury jest mieszany z
określonym kolorem (GL_TEXTURE_ENV_COLOR).
· GL_MODULATE - przed nałożeniem na wielokat,
˛ obraz tekstury jest
mnożony przez istniejacy
˛ obraz w buforze ramki.
GL_TEXTURE_ENV_COLOR - określa kolor do połaczenia
˛
z tekstura.
˛ W tym
przypadku parametr param jest wskaźnikiem do wartości koloru RGBA.
Wykład 9 – p. 15/39
Wykład 9 – p.
Określanie współrzednych
˛
tekstury
Do określania współrz˛ednych tekstury dla wielokata,
˛ na który
nakładamy teksture przeznaczona jest rodzina funkcji
glTexCoord:
glTexCoord1{dfis}(TYPE s);
glTexCoord1{dfis}v(TYPE *s);
glTexCoord2{dfis}(TYPE s, TYPE t);
glTexCoord2{dfis}v(TYPE st);
glTexCoord3{dfis}(TYPE s, TYPE t, TYPE r);
glTexCoord3{dfis}v(TYPE *str);
glTexCoord4{dfis}(TYPE s, TYPE t, TYPE r, TYPE q);
glTexCoord4{dfis}v(TYPE strq);
Właczenie
˛
mapowania tekstur
Właczenie
˛
mapowania tekstur 2D:
glEnable(GL_TEXTURE_2D);
Wyłaczenie
˛
mapowania tekstur 2D:
glDisable(GL_TEXTURE_2D);
Analogicznie można właczać
˛
i wyłaczać
˛
mapowanie tekstur
jednowymiarowych (GL_TEXTURE_1D) i trójwymiarowych
(GL_TEXTURE_3D) i sześciennych (GL TEXTURE CUBE MAP).
Zaleca sie,
˛ aby w danej chwili był właczony
˛
tylko jeden rodzaj
tekstur.
gdzie:
s - pozioma współrz˛edna obrazu tekstury,
t - pionowa współrz˛edna obrazu tekstury,
r - współrz˛edna głebokości
˛
obrazu tekstury,
q - współczynnik skalowania współrz˛ednych tekstur (rzeczywiste wartości
współrz˛ednych wynosza˛ odpowiednio qs , qt , qr ).
Wykład 9 – p. 17/39
Tekstury 2D - przykład (I)
Wykład 9 – p.
Definiowanie tekstur 2D (III)
const GLuint Texture = 1;
glEnable(GL_TEXTURE_2D);
glCallList(Texture);
QImage tex1, buf;
if ( !buf.load( "sky.bmp" ) )
qDebug("Cannot open image file");
else
tex1 = QGLWidget::convertToGLFormat( buf );
glNewList(Texture, GL_COMPILE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, 3, tex1.width(), tex1.height(), 0,
GL_RGBA, GL_UNSIGNED_BYTE, tex1.bits());
glEndList();
glBegin(GL_QUADS);
glTexCoord2f(1.0f, 0.0f);
glVertex3f(-1.0f, -1.0f, 0.0f);
glTexCoord2f(0.0f, 0.0f);
glVertex3f(-1.0f, 1.0f, 0.0f);
glTexCoord2f(0.0f, 1.0f);
glVertex3f(1.0f, 1.0f, 0.0f);
glTexCoord2f(1.0f, 1.0f);
glVertex3f(1.0f, -1.0f, 0.0f);
glEnd();
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);
Wykład 9 – p. 19/39
Wykład 9 – p.
Definiowanie tekstur 2D (IV)
Mipmapy (I)
Mipmapy umożliwiaja˛ dobór obrazu tekstury w zależności od
odległości od obserwatora.
Tekstura taka zawiera w sobie wiele obrazów.
Wybierany jest obraz tekstury najbliższy rozmiarowi wielokata
˛
na ekranie.
Stosowanie mipmap poprawia wyglad
˛ renderowanej sceny
oraz zazwyczaj przyspiesza proces renderowania.
Wykład 9 – p. 21/39
Mipmapy (II)
Wykład 9 – p.
Mipmapy - przykład
Wielkość obrazów w mipmapie nie jest dowolna. Każdy
nastepny
˛
stanowi 1/4 (1/2 × 1/2) rozmiaru poprzedniego
obrazka.
mipmapa o rozmiarze 128x128 bedzie
˛
zawierała obrazki o
rozmiarach 128x128, 64x64, 32x32, 16x16, 8x8, 4x4, 2x2 i
1x1,
natomiast mipmapa o rozmiarze 64x16 - 64x16, 32x8,
16x4, 8x2, 4x1, 2x1, 1x1.
QImage buf;
buf.load("sky0.bmp");
QImage sky0 = QGLWidget::convertToGLFormat(buf);
buf.load("sky1.bmp");
QImage sky1 = QGLWidget::convertToGLFormat(buf);
buf.load("sky2.bmp");
QImage sky2 = QGLWidget::convertToGLFormat(buf);
glNewList(1, GL_COMPILE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, 3, 4, 4, 0,
GL_RGB, GL_UNSIGNED_BYTE, sky0.bits());
glTexImage2D(GL_TEXTURE_2D, 1, 3, 2, 2, 0,
GL_RGB, GL_UNSIGNED_BYTE, sky1.bits());
glTexImage2D(GL_TEXTURE_2D, 2, 3, 1, 1, 0,
GL_RGB, GL_UNSIGNED_BYTE, sky2.bits());
glEndList();
Wykład 9 – p. 23/39
Wykład 9 – p.
Paramety obrazu - mipmapy
Mipmapy - filtrowanie
glTexParameter[if](GLenum target, GLenum pname, GLfloat param);
glTexParameter[if]v(GLenum target, GLenum pname, GLfloat *param);
dla:
GL_TEXTURE_MIN_FILTER:
GL_NEAREST_MIPMAP_NEAREST - wybiera mipmape,
˛ której teksele maja˛ rozmiar
najbardziej zbliżony do pokrywanego piksela i używa filtra GL_NEAREST do
wyznaczenia barwy piksela.
GL_LINEAR_MIPMAP_NEAREST - podobnie jak wyżej, ale z użyciem kryterium
GL_LINEAR (filtrowanie dwuliniowe).
GL_NEAREST_MIPMAP_LINEAR - wybiera dwie mipmapy, których teksele maja˛
rozmiar najbardziej zbliżony do pokrywanego piksela, nastepnie
˛
posługuje sie˛
filtrem GL_NEAREST do wyznaczenia teksela z każdej mipmapy. Ostateczna
wartość elementu tekstury jest średnia˛ ważona˛ dwóch poprzednich tekseli.
GL_LINEAR_MIPMAP_LINEAR - tak jak wyżej, lecz z zastosowaniem opcji
GL_LINEAR. Ten filtr jest też zwany trójliniowym (Trilinear Filtering).
Wykład 9 – p. 25/39
Wykład 9 – p.
Definiowanie tekstur 1D (I)
Definiowanie tekstur 1D (II)
W OpenGL do definiowania jednowymiarowych tekstur służy
funkcja glTexImage1D:
void glTexImage1D(GLenum target, GLint level, GLint components,
GLsizei width, GLint border, GLenum format,
GLenum type, const GLvoid *pixels);
void glTexImage1D(GLenum target, GLint level, GLint components,
GLsizei width, GLint border, GLenum format,
GLenum type, const GLvoid *pixels);
gdzie:
format - format danych pikseli:
GL_COLOR_INDEX - wartości wszystkich pikseli sa˛ indeksami kolorów,
gdzie:
GL_RED - wartości pikseli sa˛ intensywnościami czerwieni,
target - musi być GL_TEXTURE_1D.
GL_GREEN - wartości pikseli sa˛ intensywnościami zieleni,
level - poziom szczegółów mipmapy. Jeśli nie sa˛ używane mipmapy zwykle
wynosi zero.
GL_BLUE - wartości pikseli sa˛ intensywnościami niebieskiego,
GL_ALPHA - wartości pikseli sa˛ wartościami alfa,
component - ilość komponentów koloru, od 1 do 4.
width - szerokość obrazu tekstury - musi być poteg
˛ a˛ liczby 2 lub być zgodna ze
wzorem 2n + 2 ∗ border.
border - szerokość ramki dookoła obrazu tekstury. Musi być 0, 1 lub 2.
GL_RGB - wartości pikseli sa˛ wartościami RGB,
GL_RGBA - wartości pikseli sa˛ wartościami RGBA,
GL_LUMINANCE - wartości pikseli sa˛ kolorami w skali szarości,
GL_ALPHA_LUMINANCE - wartości pikseli sa˛ wartościami alfa i kolorami w skali
szarości.
type - typ danych dla wartości pikseli.
pixels - dane pikseli.
Wykład 9 – p. 27/39
Wykład 9 – p.
Mapowanie tekstur 1D - przykład (I)
const GLuint RainbowTexture = 1;
static unsigned char tecza[8][3] =
{
{0x3f, 0x00, 0x3f},
{0x7f, 0x00, 0x7f},
{0xbf, 0x00, 0xbf},
{0x00, 0x00, 0xff},
{0x00, 0xff, 0x00},
{0xff, 0xff, 0x00},
{0xff, 0x7f, 0x00},
{0xff, 0x00, 0x00}
};
Mapowanie tekstur 1D - przykład (II)
glEnable(GL_TEXTURE_1D);
glCallList(RainbowTexture);
glBegin(GL_QUAD_STRIP);
for (double th = 0.0; th <= M_PI; th += (0.03125 * M_PI))
{
// dolna kraw˛
edź t˛
eczy
x = cos(th) * 50.0;
y = sin(th) * 50.0;
z = -50.0;
glTexCoord1f(0.0);
glVertex3f(x, y, z);
glNewList(RainbowTexture, GL_COMPILE);
glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexImage1D(GL_TEXTURE_1D, 0, 3, 8, 0, GL_RGB, GL_UNSIGNED_BYTE,
tecza);
glEndList();
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);
// górna kraw˛
edź t˛
eczy
x = cos(th) * 55.0;
y = sin(th) * 55.0;
z = -50.0;
glTexCoord1f(1.0);
glVertex3f(x, y, z);
}
glEnd();
Wykład 9 – p. 29/39
Mapowanie tekstur 1D - przykład (III)
Wykład 9 – p.
Biblioteka GLU
Biblioteka GLU dodaje do biblioteki OpenGL dodatkowe
funkcje wyższego poziomu.
W skład biblioteki OpenGL wchodza˛ miedzy
˛
innymi:
transformacje ze współrz˛ednych obiektu na współrz˛edne
obserwatora i odwrotnie,
wsparcie dla powierzchni NURBS,
funkcje do podziału wielokatów
˛
na trójkaty,
˛
skalowanie rysunków 2D oraz tworzenie mipmap,
dodatkowe funkcje wspierajace
˛ rzutowanie
perspektywiczne i równoległe, zmiana pozycji kamery,
wybór obiektów,
funkcje do renderowania dysków, cylindrów oraz sfer,
Wykład 9 – p. 31/39
Wykład 9 – p.
Mipmapy - automatyczne generowanie
W bibliotece GLU istnieja˛ funkcje do automatycznego
generowania mipmap na podstawie pojedynczej tekstury
Sa˛ to funkcje gluBuild1DMipmap, gluBuild2DMipmap,
gluBuild3DMipmap oraz funkcje
gluBuild1DMipmapLevels, gluBuild2DMipmapLevels i
gluBuild3DMipmapLevels. Przykładowo:
GLint gluBuild2DMipmaps (GLenum target, GLint components,
GLint width, GLint height,
GLenum format, GLenum type,
const GLvoid *data);
Obiekty tekstur (I)
Poczawszy
˛
od wersji 1.1 biblioteki OpenGL wprowadzono
mechanizm obiektów tekstur.
Obiekt tekstury pozwala na zapamietanie
˛
stanu tekstury (czyli
danych tekstury wraz z jej parametrami).
Przy pomocy odpowiedniej funkcji w prosty sposób można sie˛
przełaczać
˛
pomiedzy
˛
różnymi obiektami tekstur.
Obiekty tekstur identyfikowane sa,
˛ podobnie jak listy
wyświetlania, za pomoca˛ liczb całkowitych.
Obiektom tekstur można również nadawać priorytety
wpływajace
˛ na umieszczanie ich w pamieci
˛ karty graficznej
(tekstury rezydentne).
Generowanie mipmap w taki sposób jest realizowane na
jednostce CPU, w zwiazku
˛
z tym jest stosunkowo wolne.
W wersji 1.4 biblioteki OpenGL wprowadzono mechanizm
automatycznego generowania mipmap (użycie funkcji
glTexParameter z parametrem pname o wartości
GL_GENERATE_MIPMAP).
Wykład 9 – p. 33/39
Wykład 9 – p.
Obiekty tekstur (II)
Obiekty tekstur (III)
W celu utworzenia zbioru identyfikatorów tekstur należy wywołać funkcje:
˛
Niepotrzebny obiekt tekstury może zostać usuniety
˛ za pomoca˛ funkcji:
void glGenTextures (GLsizei n, GLuint *textures);
void glDeleteTextures (GLsizei n, GLuint *textures);
gdzie:
gdzie:
n - liczba identyfikatorów tekstur, jakie maja˛ zostać utworzone,
n - liczba identyfikatorów tekstur, jakie maja˛ zostać usuniete,
˛
textures - tablica, w której zapisane zostana˛ utworzone identyfikatory.
textures - tablica, która zawiera identyfikatory tekstur jakie maja˛ zostać
usuniete.
˛
Obiekt tekstury ustawia sie˛ przy wykorzystaniu funkcji glBindTexture - po jej użyciu
wszystkie funkcje zwiazane
˛
z ładowaniem tekstury i ustawianiem jej parametrów
dotycza˛ aktualnego obiektu tekstury.
Funkcja glIsTexture pozwala sprawdzić, czy istnieje obiekt tekstury o określonym
identyfikatorze:
void glBindTexture (GLenum target, GLuint texture);
GLboolean glIsTexture (GLuint texture);
gdzie:
gdzie:
target - rodzaj tekstury (GL_TEXTURE_1D, GL_TEXTURE_2D lub
GL_TEXTURE_3D),
texture - identyfikator tekstury,
funkcja zwraca GL_TRUE, gdy istnieje obiekt tekstury o podanym identyfikatorze
lub wartość GL_FALSE w przeciwnym wypadku.
texture - identyfikator tekstury.
Funkcja ta odpowiada również za przełaczanie
˛
sie˛ pomiedzy
˛
obiektami tekstur.
Wykład 9 – p. 35/39
Wykład 9 – p.
Wieloteksturowanie (I)
Wieloteksturowanie (II)
Wieloteksturowanie (multiteksturowanie) to technika
pozwalajaca
˛ na jednoczesnego nakładania na obiekt wiecej
˛
niż jednej tekstury.
Wybór aktualnej jednostki teksturujacej
˛ umożliwia funkcja:
void glActiveTexture (GLenum texture);
gdzie:
Wieloteksturowanie wprowadzono w wersji 1.3 biblioteki
OpenGL. We wcześniejszych implementacjach podobny efekt
można uzyskać przy użyciu techniki teksturowania
wieloprzebiegowego, które jest jednak bardziej skomplikowane
(wymaga stosowania mieszania kolorów oraz wielokrotnego
przeliczania geometrii renderowanego obiektu) oraz znacznie
wolniejsze.
texture - określa numer wybranej jednostki teksturujacej
˛ (GL_TEXTUREi, gdzie
i przyjmuje wartość od 0 do 31).
W przypadku wieloteksturowania definiowanie współrz˛ednych tekstur przy użyciu
funkcji z grupy glTexCoord daje efekt tylko dla pierwszej jednostki teksturujacej
˛
(GL_TEXTURE0).
Definiowane współrzednych tekstur dla dowolnej jednostki teksturujacej umozliwiajaja˛
funkcje z grupy glMultiTexCoord (posiadaja˛ dodatkowy parametr target określajacy
˛
numer jednostki teksturujacej).
˛
Przykład:
void glMultiTexCoord2f (GLenum target, GLfloat s, GLfloat t);
Wykład 9 – p. 37/39
Pozostałe funkcje
Kopiowanie tekstury z bufora kolorów.
Zmiana cz˛eści danych tekstury.
Tekstury zastepcze
˛
(proxy).
Kompresja tekstur.
Automatyczne generowanie współrz˛ednych tekstur.
Tekstury głebi.
˛
Wykład 9 – p. 39/39
Wykład 9 – p.

Podobne dokumenty