OpenGL teksturowanie

Podobne dokumenty
Laboratorium Grafiki Komputerowej i Animacji. Ćwiczenie VI. Biblioteka OpenGL - teksturowanie

Laboratorium Grafiki Komputerowej i Animacji. Ćwiczenie VI. Biblioteka OpenGL - teksturowanie

Tekstury. Dorota Smorawa

Teksturowanie. Oprogramowanie i wykorzystanie stacji roboczych. Wykład 10. Tekstury. Proces nakładania tekstury.

OpenGL Światło (cieniowanie)

OpenGL Światło (cieniowanie)

OpenGL - tekstury Mapowanie tekstur

Teksturowanie (ang. texture mapping)

Wprowadzenie. Artur Staszczyk Bartłomiej Filipek

GRAFIKA KOMPUTEROWA 7: Kolory i cieniowanie

Laboratorium 4 OpenGl (4) Oświetlenie sceny

Laboratorium grafiki komputerowej i animacji. Ćwiczenie V - Biblioteka OpenGL - oświetlenie sceny

OpenGL model oświetlenia

Grafika Komputerowa Wykład 6. Teksturowanie. mgr inż. Michał Chwesiuk 1/23

Laboratorium 2. Część I. Perspektywa. Obsługa poleceń myszy. 2. W sekcji przeznaczonej na definicję zmiennych globalnych dodaj następujące definicje:

Zadanie 1. Ściana. 1. Potrzebne zmienne w dołączonym do zadania kodzie źródłowym

8 Przygotował: mgr inż. Maciej Lasota

Grafika 3D OpenGL część II

OpenGL przezroczystość

GLKit. Wykład 10. Programowanie aplikacji mobilnych na urządzenia Apple (IOS i ObjectiveC) #import "Fraction.h" #import <stdio.h>

Plan wykładu. Akcelerator 3D Potok graficzny

6 Przygotował: mgr inż. Maciej Lasota

Interakcja Człowiek-Komputer Modelowanie postaci i otoczenia. Dr inż. Sławomir Samolej

Gry Komputerowe Laboratorium 4. Teksturowanie Kolizje obiektów z otoczeniem. mgr inż. Michał Chwesiuk 1/29. Szczecin, r

Formaty plików graficznych - wprowadzenie

Janusz Ganczarski. OpenGL Pierwszy program

Mieszanie kolorów. Dorota Smorawa

Bartłomiej Filipek

Synteza i obróbka obrazu. Tekstury. Opracowanie: dr inż. Grzegorz Szwoch Politechnika Gdańska Katedra Systemów Multimedialnych

Temat: Transformacje 3D

OPENGL PRZEKSZTAŁCENIA GEOMETRYCZNE

Materiały. Dorota Smorawa

Światło. W OpenGL można rozróżnić 3 rodzaje światła

glwindowpos2d void DrawString (GLint x, GLint y, char *string) { glwindowpos2i (x,y); int len = strlen (string); for (int i = 0; i < len; i++)

Interakcja Człowiek-Komputer Modelowanie postaci i otoczenia. Dr inż. Sławomir Samolej

Maskowanie i selekcja

OpenGL oświetlenie i tekstury. OpenGL oświetlenie. Bogdan Kreczmer.

Oświetlenie. Modelowanie oświetlenia sceny 3D. Algorytmy cieniowania.

2 Przygotował: mgr inż. Maciej Lasota

1. Prymitywy graficzne

Efekt lustra 3D w OpenGL z wykorzystaniem bufora szablonowego (stencil buffer)

Informacje i porady dotyczące pisania shaderów.

Podłączanie bibliotek Zapis danych do pliku graficznego Generowanie promienia pierwotnego Import sceny z pliku Algorytm ray tracingu

Grafika komputerowa. OpenGL. Podstawy

Shadery. Artur Staszczyk Bartłomiej Filipek

Wstęp Podstawy Pierwszy program Definiowanie sceny 3D Przekształcenia geometryczne... 47

OpenGL. Silicon Graphics (IRIS GL stacje graficzne)

Modelowanie i wstęp do druku 3D Wykład 1. Robert Banasiak

Janusz Ganczarski. OpenGL Definiowanie sceny 3D

Wybrane aspekty teorii grafiki komputerowej - dążenie do wizualnego realizmu. Mirosław Głowacki

Wykład VI. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik

Wybrane aspekty teorii grafiki komputerowej - dążenie do wizualnego realizmu. Mirosław Głowacki

OpenGL : Oświetlenie. mgr inż. Michał Chwesiuk mgr inż. Tomasz Sergej inż. Patryk Piotrowski. Szczecin, r 1/23

Bufor koloru cd. Czyszczenie bufora koloru glclearcolor( )

Animowana grafika 3D. Opracowanie: J. Kęsik.

OpenGL i wprowadzenie do programowania gier

Autodesk 3D Studio MAX Teksturowanie modeli 3D

Ustawienia materiałów i tekstur w programie KD Max. MTPARTNER S.C.

Wskaźniki. Informatyka

Co to jest OpenGL? Oprogramowanie i wykorzystanie stacji roboczych. Wykład 5. OpenGL - Achitektura. OpenGL - zalety. olas@icis.pcz.

Szablony klas, zastosowanie szablonów w programach

Grafika Komputerowa. Teksturowanie

OpenGL Zaawansowana grafika komputerowa

// Potrzebne do memset oraz memcpy, czyli kopiowania bloków

Programowanie Procesorów Graficznych

OpenGL oświetlenie. Bogdan Kreczmer. Katedra Cybernetyki i Robotyki Wydziału Elektroniki Politechnika Wrocławska

GRAFIKA CZASU RZECZYWISTEGO Wprowadzenie do OpenGL

Temat: Wprowadzenie do OpenGL i GLUT

Wprowadzenie do programowania z wykorzystaniem biblioteki OpenGL. Dorota Smorawa

Wprowadzenie do grafiki maszynowej. Wprowadenie do teksturowania

Elementarne obiekty geometryczne, bufory. Dorota Smorawa

Programowanie gier komputerowych Tomasz Martyn Wykład 6. Materiały informacje podstawowe

GRAFIKA KOMPUTEROWA. Plan wykładu. 1. Początki grafiki komputerowej. 2. Grafika komputerowa a dziedziny pokrewne. 3. Omówienie programu przedmiotu

Światła i rodzaje świateł. Dorota Smorawa

Bitmapy - format i zastosowanie. Podstawowy format plików bitmapowych, dogodność zastosowania bitmap w prostych animacjach 2D.

Projektowanie graficzne. Wykład 2. Open Office Draw

Podstawy programowania. Wykład 7 Tablice wielowymiarowe, SOA, AOS, itp. Krzysztof Banaś Podstawy programowania 1

Rysowanie punktów na powierzchni graficznej

Dodawanie grafiki i obiektów

Oprogramowanie i wykorzystanie stacji roboczych. Wykład 6

Wybrane aspekty teorii grafiki komputerowej - dążenie do wizualnego realizmu. Mirosław Głowacki

Oświetlenie obiektów 3D

DesignCAD 3D Max 24.0 PL

Lab 9 Podstawy Programowania

Karty graficzne możemy podzielić na:

Programowanie w języku C++

Zaawansowana Grafika Komputerowa

Druga aplikacja Prymitywy, alpha blending, obracanie bitmap oraz mały zestaw przydatnych funkcji wyświetlających własnej roboty.

Grafika Komputerowa Wykład 5. Potok Renderowania Oświetlenie. mgr inż. Michał Chwesiuk 1/38

OpenGL - charakterystyka

Studium podyplomowe. Programowanie w OpenGL. Michał Turek, AGH Kraków

Szybkie tworzenie grafiki w GcIde

rgbf<składowa_r,składowa_g,składowa_b,filter>. Dla parametru filter przyjmij kolejno wartości: 0.60, 0.70, 0.80, 0.90, 1.00, np.:

Advance CAD 2016 SP2. W tym dokumencie opisano ulepszenia w Advance CAD Service Pack 2. Co nowego w Advance CAD 2016 SP2

Oprogramowanie i wykorzystanie stacji roboczych. Wykład 5

Podstawy programowania komputerów

Oświetlenie w OpenGL. Oprogramowanie i wykorzystanie stacji roboczych. Wykład 8. Światło otaczajace. Światło rozproszone.

Spis treści. 1 Moduł Mapy 2

OpenGL i Qt. Bogdan Kreczmer. Katedra Cybernetyki i Robotyki Wydziału Elektroniki Politechnika Wrocławska

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie?

Transkrypt:

OpenGL teksturowanie Teksturowanie polega na pokrywaniu wielokątów obrazami (plikami graficznymi) Umożliwia znaczące zwiększenie realizmu sceny przy niewielkim zwiększeniu nakładu obliczeniowego Rozwój akceleratorów graficznych w ciągu ostatnich lat skupiał się na rozbudowie sprzętowych funkcji wspomagających przechowywanie, szybki transfer i rozkładanie tekstur na elementach sceny Większość efektów symulujących oświetlenie w grach komputerowych realizowana jest z zastosowaniem teksturowania 1

Etapy teksturowania Utworzenie zbioru tekstur na podstawie plików graficznych (np. DIB) Wczytanie zawartości plików graficznych Konwersja danych graficznych na tekstury Utworzenie tablicy obiektów tekstur Określenie filtrowania tekstur Zdefiniowanie funkcji tekstur Utworzenie obrazów tekstur Rozciąganie tekstur na wielokątach Włączenie teksturowania dla określonych fragmentów sceny Powiązanie współrzędnych obrazów tekstur ze współrzędnymi wierzchołków określonych wielokątów Wyłączenie teksturowania 2

Teksturowanie - wczytanie zawartości plików graficznych #include <gl\glaux.h> AUX_RGBImageRec *LoadBMP(char *Filename) // Ładuje plik DIB { FILE *File=NULL; // Uchwyt do pliku if (!Filename) // Sprawdzenie, czy podano nazwę { return NULL; } File=fopen(Filename,"r"); if (File) { fclose(file); // Czy istnieje plik? // Zamknij uchwyt } // Załaduj plik DIB i zwróć uchwyt do tablicy plikseli return auxdibimageload(filename); } return NULL; // Jeśli załadowanie się nie udało, zwróć 0 3

GLuint texture[2]; Teksturowanie utworzenie obiektów tekstur // tablica tekstur OpenGL int LoadGLTextures() // Załaduj bitmapy i konwertuj na tekstury { int Status=FALSE, i; AUX_RGBImageRec *TextureImage[2]; //wskaźniki do danych memset(textureimage,0,sizeof(void *)*2); //zerowanie // Zastosuj LoadBMP do załadowania danych z plików BMP if ((TextureImage[0]=LoadBMP("Data/glass.bmp")) &&(TextureImage[1]=LoadBMP("Data/sky.bmp")) ) { Status=TRUE; //Utworzenie nazw tekstur: glgentextures(2, &texture[0]); 4

Teksturowanie utworzenie obiektów tekstur // Typowa generacja tekstur na podstawie danych z DIB: for(i=0;i<2;i++) { //Tworzenie i stosowanie obiektu tekstury: glbindtexture(gl_texture_2d, texture[i]); // Przekształcenie danych z pliku DIB na teksturę OpenGL glteximage2d ( GL_TEXTURE_2D, // Tworzona jest tekstra 2D 0, // Rozdzielczość na razie 0 3, // Ilość składowych koloru TextureImage[i]->sizeX, // Szerokość TextureImage[i]->sizeY, // Wysokość 0, // Ramka GL_RGB, // Format kolorów tekstury GL_UNSIGNED_BYTE, // Typ danych obrazu TextureImage[i]->data); // Wskaźnik do danych // Filtrowanie tekstur gltexparameteri( GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER, GL_LINEAR); gltexparameteri(gl_texture_2d,gl_texture_mag_filter, GL_LINEAR); } } 5

} Teksturowanie utworzenie obiektów tekstur // Porządkowanie pamięci: for(i=0;i<2;i++) { if (TextureImage[i]) //Jeśli tekstura istnieje { if (TextureImage[i]->data) //Jeśli obraz istnieje { free(textureimage[i]->data); // Zwolnij pamięć zajmowaną przez obraz } free(textureimage[i]); // Zwolni pamięć zajmowaną przez teksturę } } return Status; 6

Teksturowanie pokrywanie obiektów teksturą void kwadrat(void) { glcolor3d(0.7,0.7,0.9); // Funkcje tekstury: GL_MODULATE, GL_DECAL, GL_BLEND gltexenvi(gl_texture_env, GL_TEXTURE_ENV_MODE,GL_MODULATE); // Określ bieżący obiekt tekstury: glbindtexture(gl_texture_2d,texture[0]); glenable(gl_texture_2d); // Włącz teksturowanie glbegin(gl_quads); glnormal3d(0,0,1); // Powiąż współrzędne tekstury z wierzchołkami: gltexcoord2d(1.0,1.0); glvertex3d(25,25,25); gltexcoord2d(0.0,1.0); glvertex3d(-25,25,25); gltexcoord2d(0.0,0.0); glvertex3d(-25,-25,25); gltexcoord2d(1.0,0.0); glvertex3d(25,-25,25); glend(); gldisable(gl_texture_2d); // Wyłącz teksturowanie } 7

Teksturowanie współrzędne tekstury (0.0, 1.0) (1.0, 1.0) (0.0, 0.0) (1.0, 0.0) (0.0, 1.0) (0.5, 1.0) (0.0, 0.0) (0,5, 0.0) gltexcoord2d(1.0,1.0); glvertex3d(25,25,25); gltexcoord2d(0.0,1.0); glvertex3d(-25,25,25); gltexcoord2d(0.0,0.0); glvertex3d(-25,-25,25); gltexcoord2d(1.0,0.0); glvertex3d(25,-25,25); gltexcoord2d(0.5,1.0); glvertex3d(25,25,25); gltexcoord2d(0.0,1.0); glvertex3d(-25,25,25); gltexcoord2d(0.0,0.0); glvertex3d(-25,-25,25); gltexcoord2d(0.5,0.0); glvertex3d(25,-25,25); 8

Teksturowanie mipmampy gltexparameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER,GL_LINEAR); gltexparameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_LINEAR); glubuild2dmipmaps( GL_TEXTURE_2D, GL_RGB, 64, 64, GL_RGB,GL_UNSIGNED_BYTE, TextureImage[i]->data);... (64 x 64) (32 x 32) (16 x 16) (1 x 1) 9

Kwadryki OpenGL Utworzenie kwadryki: #include <gl\glu.h> GLUquadricObj *obj; //zdefiniowanie wskaźnika do obiektu obj=glunewquadric(); //powołanie nowego obiektu Określenie stanu kwadryki: Styl powierzchni: gluquadricdrawstyle(gluquadricobj * qobj, GLenum drawstyle); Parametr drawstyle GLU_FILL GLU_LINE GLU_SILHOUETTE GLU_POINT Opis Kwadryga rysowana jest przy pomocy wypełnionych pasów wielokątów. Kwadryga rysowana jest w postaci siatki składającej się z linii Kwadryga rysowana jest w postaci siatki złożonej z linii, widoczne są tylko zewnętrzne krawędzie Kwadryga rysowana jest w postaci chmury wierzchołków 10

Wektory normalne: Kwadryki OpenGL gluquadricnormals(gluquadricobj *qobj,glenum normals); Parametr normals GLU_NONE GLU_FLAT GLU_SMOOTH Opis Normalne nie są generowane Normalne generowane są jako prostopadłe do wielokątów tworzących powierzchnię Normalne generowane są dla każdego wierzchołka osobno w celu nadania "gładkości" powierzchniom tworzącym obiekt Orientacja: gluquadricorientation( GLUquadricObj * quadobject, GLenum orientation); Parametr orientation GLU_OUTSIDE GLU_INSIDE Opis Normalne skierowane są na zewnątrz Normalne skierowane są do wewnątrz 11

Współrzędne tekstury: Kwadryki OpenGL gluquadrictexture( GLUquadricObj * quadobject, GLboolean texturecoords); Parametr texturecoords GL_TRUE GL_FALSE Opis Współrzędne tekstury są tworzone Współrzędne tekstury nie są tworzone Usuwanie obiektów kwadryk: gludeletequadric(gluquadricobj * quadobject); 12

Kwadryki OpenGL Dysk: void gludisk( GLUquadricObj * qobj, GLdouble innerradius, GLdouble outerradius, GLint slices, GLint loops); Walec: void glucylinder( GLUquadricObj * qobj, GLdouble baseradius, GLdouble topradius, GLdouble height, GLint slices, GLint stacks ); 13

Kwadryki OpenGL Kula: void glusphere( GLUquadricObj * qobj, GLdouble radius, GLint slices, GLint stacks ); Częściowy dysk: void glupartialdisk( GLUquadricObj * qobj, GLdouble innerradius, GLdouble outerradius, GLint slices, GLint loops, GLdouble startangle, GLdouble sweepangle ); 14

Kwadryki OpenGL przykład oświetlony walec void walec(void) { GLUquadricObj *obj; obj=glunewquadric(); glcolor3d(1,0,0); glucylinder(obj,20,20,30,15,7); } 15

Kwadryki OpenGL przykład teksturowana kula void kula(void) { GLUquadricObj *obj; obj=glunewquadric(); gluquadrictexture(obj,gl_true); glbindtexture(gl_texture_2d,texture[0]); gltexenvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); glcolor3d(1.0,0.8,0.8); glenable(gl_texture_2d); glusphere(obj,20,15,7); gldisable(gl_texture_2d); } 16

Zastosowania teksturowania odwzorowanie otoczenia 17

Zastosowania teksturowania teksturowane napisy 18

Zastosowania teksturowania nakładanie wielu tekstur mapy oświetlenia + 19

Zastosowania teksturowania symulowanie chropowatości 20

Zastosowania teksturowania mapa wysokości + sky-box 21