8 Przygotował: mgr inż. Maciej Lasota

Podobne dokumenty
6 Przygotował: mgr inż. Maciej Lasota

3 Przygotował: mgr inż. Maciej Lasota

2 Przygotował: mgr inż. Maciej Lasota

Materiały. Dorota Smorawa

Wykład 5. Rendering (2) Geometria

Zatem standardowe rysowanie prymitywów wygląda następująco:

GRAFIKA KOMPUTEROWA 7: Kolory i cieniowanie

Temat: Transformacje 3D

Bartosz Bazyluk OpenGL Programowalny potok renderowania, buforowanie geometrii (VBO, IBO, VAO).

Grafika trójwymiarowa

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

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

Teksturowanie (ang. texture mapping)

Programowanie warstwy wizualnej gry

Oprogramowanie i wykorzystanie stacji roboczych. Wykład 6

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

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

Elementarne obiekty geometryczne, bufory. Dorota Smorawa

Wprowadzenie do programowania z wykorzystaniem biblioteki OpenGL. Dorota Smorawa

Janusz Ganczarski. OpenGL Pierwszy program

Bufor koloru cd. Czyszczenie bufora koloru glclearcolor( )

Tekstury. Dorota Smorawa

RENDERING W CZASIE RZECZYWISTYM. Michał Radziszewski

1 Wstęp teoretyczny. Temat: Manipulowanie przestrzenią. Grafika komputerowa 3D. Instrukcja laboratoryjna Układ współrzędnych

Bartosz Bazyluk Oświetlenie Zaawansowane techniki oświetlenia, c.d.

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

Bartosz Bazyluk Oświetlenie Zaawansowane techniki oświetlenia, c.d. Gry komputerowe, Informatyka N1, III Rok

OpenGL teksturowanie

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main.

Specyfikacja OpenGL Podstawy programowania grafiki komputerowej*

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

Smarty PHP. Leksykon kieszonkowy

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

Programowanie w Javie 1 Wykład i Ćwiczenia 3 Programowanie obiektowe w Javie cd. Płock, 16 października 2013 r.

Nowoczesna OpenGL - rendering wielokątów Rendering wielokątów w kontekście biblioteki SFML

Wykład 5: Klasy cz. 3

OpenGL Światło (cieniowanie)

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

Oprogramowanie i wykorzystanie stacji roboczych. Wykład 5

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

Szablony funkcji i klas (templates)

Pliki. Funkcje tworzące pliki i operujące na nich opisane są w części 2 pomocy systemowej. Tworzenie i otwieranie plików:

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

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

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

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

Wskaźniki i dynamiczna alokacja pamięci. Spotkanie 4. Wskaźniki. Dynamiczna alokacja pamięci. Przykłady

Plan wykładu. Akcelerator 3D Potok graficzny

Temat: Wprowadzenie do OpenGL i GLUT

1. Prymitywy graficzne

Wyjątki Monika Wrzosek (IM UG) Programowanie obiektowe 180 / 196

Systemy wirtualnej rzeczywistości. Komponenty i serwisy

Język C++ zajęcia nr 2

1 Temat: Vertex Shader

GRAFIKA KOMPUTEROWA 8: Konwersja i mieszanie kolorów

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 6

ECDL/ICDL CAD 2D Moduł S8 Sylabus - wersja 1.5

OpenGL Światło (cieniowanie)

Technologie i usługi internetowe cz. 2

Laboratorium 1. Część I. Podstawy biblioteki graficznej OpenGL.

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

Wizualne systemy programowania. Wykład 11 Grafika. dr Artur Bartoszewski -Wizualne systemy programowania, sem. III- WYKŁAD

Analiza obrazów. Segmentacja i indeksacja obiektów

Mieszanie kolorów. Dorota Smorawa

Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie.

Wyjątki (exceptions)

Podstawy Processingu. Diana Domańska. Uniwersytet Śląski

Zaawansowane programowanie w C++ (PCP)

Klasy Obiekty Dziedziczenie i zaawansowane cechy Objective-C

STWORZENIE BIBLIOTEKI SŁUŻĄCEJ DO WCZYTYWANIA

Programowanie strukturalne i obiektowe. Funkcje

dr Artur Bartoszewski dr Artur Bartoszewski - Aplikacje mobilne - Wykład

Ćwiczenie 4. Obsługa plików. Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Laboratorium Podstaw Informatyki Strona 1.

Lab 9 Podstawy Programowania

Laboratorium nr 12. Temat: Struktury, klasy. Zakres laboratorium:

76.Struktura oprogramowania rozproszonego.

OpenGL. Silicon Graphics (IRIS GL stacje graficzne)

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość

Laboratorium 7 Blog: dodawanie i edycja wpisów

Następnie zdefiniujemy utworzony szkic jako blok, wybieramy zatem jak poniżej

Listy powiązane zorientowane obiektowo

Laboratorium Systemów Operacyjnych. Ćwiczenie 4. Operacje na plikach

Grafika Komputerowa Materiały Laboratoryjne

ANALIZA I INDEKSOWANIE MULTIMEDIÓW (AIM)

AUTOCAD MIERZENIE I PODZIAŁ

Programowanie w języku Java - Wyjątki, obsługa wyjątków, generowanie wyjątków

Grafika Komputerowa Wykład 4. Synteza grafiki 3D. mgr inż. Michał Chwesiuk 1/30

Programowanie w języku C++

Przekształcenia geometryczne. Dorota Smorawa

Wskaźnik może wskazywać na jakąś zmienną, strukturę, tablicę a nawet funkcję. Oto podstawowe operatory niezbędne do operowania wskaźnikami:

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Podstawy Programowania Obiektowego

Tablice (jedno i wielowymiarowe), łańcuchy znaków

Obsługa plików. Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Laboratorium Podstaw Informatyki Strona 1. Kraków 2013

Grafika 3D OpenGL część II

Warsztaty dla nauczycieli

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

GRAFIKA KOMPUTEROWA 10: Antyaliasing

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

Transkrypt:

Laboratorium nr 8 1/6 Grafika Komputerowa Instrukcja laboratoryjna Temat: Listy wyświetlania i tablice wierzchołków 8 Przygotował: mgr inż. Maciej Lasota 1) Listy wyświetlania Listy wyświetlania (ang. display lists) pełnią ważną role w bibliotece OpenGL. Zasada działania list wyświetlania sprowadza się do grupowania instrukcji biblioteki OpenGL. Tak pogrupowane instrukcje można wykorzystywać wielokrotnie w dalszej części kodu źródłowego. Dzięki listom wyświetlania możliwe jest wyrenderowanie np. sześcianu tylko jeden raz przy starcie aplikacji, a następnie wielokrotne wykorzystanie tego kodu. 1.1) Tworzenie i usuwanie list Listy wyświetlania podobnie jak tekstury potrzebują swojego identyfikatora reprezentowanego przez liczbę całkowitoliczbową. Na podstawie tego identyfikatora możemy utworzyć listę lub kilka list jednocześnie. int mojalista; Do generowania identyfikatora listy wyświetlania wykorzystujemy funkcję glgenlists, funkcja ta przyjmuje jeden parametr określający liczbę list do wygenerowania GLuint glgenlists(glsizei range); mojalista = glgenlists(1); Każdą wygenerowaną i już niepotrzebną listę należy usunąć za pomocą funkcji gldeletelists. Funkcja ta przyjmuje dwa parametry. Pierwszy parametr list określa identyfikator list, drugi range natomiast liczbę tych list. void gldeletelists(gluint list, GLsizei range); gldeletelists(mojalista,1);

Laboratorium nr 8 2/6 1.2) Umieszczanie instrukcji na liście Przed umieszczaniem instrukcji, należy listę odpowiednio przygotować. Służy do tego celu funkcja glnewlist. Pierwszy parametr funkcji, to zmienna wskazująca na listę, drugi parametr to tryb. void glnewlist(gluint list, GLenum mode); Parametr mode GL_COMPILE GL_COMPILE_AND_EXECUTE Opis Umieszczenie instrukcji na liście Umieszczenie i natychmiastowe jednorazowe wywołanie instrukcji znajdujących się na liście Po wywołaniu funkcji glnewlists wypisujemy wszystkie instrukcje, które znajdą się na liście. Listę należy zamknąć funkcją glendlist. Przykład 1: mojallista = glgenlists(1); glnewlists(mojalista, GL_COMPILE); UWAGA!!! Fragment kodu generujący listę należy umieścić w takim miejscu kodu źródłowego, który wykonuje się tylko raz na początku działania aplikacji. W czasie działania aplikacji nie ma możliwości modyfikacji wierzchołków generowanego obiektu

Laboratorium nr 8 3/6 Przykład 2: mojallista = glgenlists(3); glnewlists(mojalista, GL_COMPILE); glnewlists(mojalista + 1, GL_COMPILE); glnewlists(mojalista + 2, GL_COMPILE); UWAGA!!! mojalista, mojalista + 1 oraz mojalista + 2 to trzy zupełne różne listy wyświetlania wygenerowane w obrębie tego samego identyfikatora.

Laboratorium nr 8 4/6 1.3) Wykonywanie list wyświetlania Do wykonywania list wyświetlania służą dwie funkcje. Pierwsza glcalllist wykonuje dokładnie jedną listę. Przyjmuje ona identyfikator listy, którą wykonuje. void glcalllist(gluint list); Druga funkcja to glcalllists, która wykonuje tablicę list. Przyjmuje ona trzy parametry. Pierwszy parametr to liczba wykonywanych list. Drugi parametr wskazuje typ list znajdujących się w tablicy i może przyjąć wartość jednej ze stałych: GL_BYTE, GL_UNSIGNED_BYTE, GL_SHORT, GL_UNSIGNED_SHORT, GL_INT, GL_UNSIGNED_INT, GL_FLOAT. Trzeci parametr to wskaźnik na tablicę list. void glcalllists(glsizei n, GLenum type, const GLvoid *lists); 2) Tablice wierzchołków Zaletą list wyświetlania jest to, że można w nich umieszczać wywołania funkcji OpenGL (nawet funkcje renderujące obiekty). Natomiast gdy obiekt składa się z kilku tysięcy trójkątów, lepszym rozwiązaniem jest zastosowanie tablic wierzchołków. Tablice wierzchołków umożliwiają przechowywanie danych w specjalnych tablicach dotyczących wierzchołków, a następnie wyrenderowanie obiektów na podstawie danych z tych tablic. 2.1) Włączanie i wyłączanie tablic wierzchołków Aby używać tablic wierzchołków, musimy najpierw włączyć ich mechanizm w OpenGL. Służą do tego dwie funkcje glenableclientstate oraz gldisableclientstate. void glenableclientstate(glenum cap); void gldisableclientstate(glenum cap); Funkcje te przyjmują jako parametr typ włączanej i wyłączanej tablicy wierzchołków.

Laboratorium nr 8 5/6 Parametr cap GL_VERTEX_ARRAY GL_NORMAL_ARRAY GL_TEXTURE_COORD_ARRAY GL_COLOR_ARRAY GL_INDEX_ARRAY GL_EDGE_FLAG_ARRAY Opis Tablica przechowuje współrzędne wierzchołków Tablica przechowuje wartości wektorów normalnych wierzchołków Tablica przechowuje współrzędne tekstur wierzchołków Tablica przechowuje wartości kolorów wierzchołków Tablica przechowuje indeksowane wartości kolorów wierzchołków Tablica przechowuje znaczniki krawędzi wierzchołków Do przypisywania danych do tablic wykorzystujemy specjalne funkcje. Jest ich tyle samo co rodzajów tablic wierzchołków. Funkcja glvertexpointer przypisuje dane o współrzędnych wierzchołkowych. Pierwszy parametr określa liczbę współrzędnych i przyjmuje wartości całkowite od 2 do 4. Parametr type określa typ wierzchołków i może przyjmować wartości stałych GL_FLOAT, GL_INT lub GL_DOUBLE. Parametr stride określa liczbę bajtów, jakie przypadają na jeden segment danych (zazwyczaj ustawiamy na 0). Ostatni parametr pointer określa wskaźnik na tablicę z danymi. void glvertexpointer(glint size, GLenum type, GLsizei stride, const GLvoid *pointer); Funkcja glnormalpointer przypisuje dane o wektorach normalnych wierzchołkowych. Znaczenie parametrów jest takie same jak w przypadku glvertexpointer. Funkcja ta nie posiada parametru size. void glnormalpointer(glenum type, GLsizei stride, const GLvoid *pointer); Funkcja gltexcoordpointer przypisuje dane o współrzędnych tekstur. Znaczenie parametrów jest takie same jak w przypadku glvertexpointer. void gltexcoordpointer(glint size, GLenum type, GLsizei stride, const GLvoid *pointer); Funkcja glcolorpointer przypisuje dane o kolorach wierzchołków. Znaczenie parametrów jest takie same jak w przypadku glvertexpointer.

Laboratorium nr 8 6/6 void glcolorpointer(glint size, GLenum type, GLsizei stride, const GLvoid *pointer); Funkcja glindexpointer przypisuje dane o indeksach kolorów. Znaczenie parametrów jest takie same jak w przypadku glnormalpointer. void glindexpointer(glenum type, GLsizei stride, const GLvoid *pointer); Funkcja gledgeflagpointer przypisuje dane o znacznikach krawędzi. void gledgeflagpointer(glsizei stride, const GLvoid *pointer); 2.2) Renderowanie z wykorzystaniem tablic wierzchołków Do wyrednerowania obiektów na podstawie tablic wierzchołków, wykorzystujemy trzy różne funkcje. Pierwszą funkcją jest gldrawarrays, przyjmuje ona trzy parametry. Parametr pierwszy określa jakie prymitywy mają być renderowane z wykorzystaniem danych z tablic. Parametr drugi to indeks wierzchołka, od którego rozpoczyna się renderowanie. Trzeci parametr określa liczbę wierzchołków jaka zostanie wyrenderowana. void gldrawarrays(glenum mode, GLint first, GLsizei count); Drugą funkcją jest gldrawelements, przyjmuje ona cztery parametry. Parametr pierwszy definiuje jakiego typu prymitywy będą renderowane. Drugi to liczba indeksów jaka zostanie użyta do renderowania. Trzeci parametr określa typ indeksów w tablicy. Czwarty to wskaźnik na tablicę wierzchołków. void gldrawelements(glenum mode, GLsizei count, GLenum type, const GLvoid *indices); Trzecią funkcją jest glarrayelement. Funkcja ta wybiera z listy wierzchołek o indeksie podanym w parametrze i wykorzystuje go do renderowania. Należy ją wywoływać pomiędzy blokami glbegin oraz glend. void glarrayelement(glint i);