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

Podobne dokumenty
OpenGL Światło (cieniowanie)

OpenGL Światło (cieniowanie)

Tekstury. Dorota Smorawa

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

OpenGL - tekstury Mapowanie tekstur

Wypełnianie kolorem lub deseniem

Filtrowanie tekstur. Kinga Laurowska

Mieszanie kolorów. Dorota Smorawa

2 Przygotował: mgr inż. Maciej Lasota

Temat: Transformacje 3D

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

Wprowadzenie do rysowania w 3D. Praca w środowisku 3D

Wstawianie nowej strony

KGGiBM GRAFIKA INŻYNIERSKA Rok III, sem. VI, sem IV SN WILiŚ Rok akademicki 2011/2012

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

CorelDraw - wbudowane obiekty wektorowe - prostokąty Rysowanie prostokątów

3 Przygotował: mgr inż. Maciej Lasota

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

Rysowanie precyzyjne. Polecenie:

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

Zadania domowe. Ćwiczenie 2. Rysowanie obiektów 2-D przy pomocy tworów pierwotnych biblioteki graficznej OpenGL

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

IRONCAD. TriBall IRONCAD Narzędzie pozycjonujące

Program V-SIM tworzenie plików video z przebiegu symulacji

Politechnika Poznańska KONSTRUKCJA FORM WTRYSKOWYCH

POMOC / INSTRUKCJA OBSŁUGI

Grafika Komputerowa 3D Etap drugi

Wprowadzenie. Artur Staszczyk Bartłomiej Filipek

WASM AppInventor Lab 3. Rysowanie i animacja po kanwie PODSTAWY PRACY Z KANWAMI

Widoczność zmiennych Czy wartości każdej zmiennej można zmieniać w dowolnym miejscu kodu? Czy można zadeklarować dwie zmienne o takich samych nazwach?

Użycie przestrzeni papieru i odnośników - ćwiczenie

Przekształcenia geometryczne. Dorota Smorawa

Grafika Komputerowa Materiały Laboratoryjne

WIZUALIZER 3D APLIKACJA DOBORU KOSTKI BRUKOWEJ. Instrukcja obsługi aplikacji

b) Dorysuj na warstwie pierwszej (1) ramkę oraz tabelkę (bez wymiarów) na warstwie piątej (5) według podanego poniżej wzoru:

6 Przygotował: mgr inż. Maciej Lasota

1. Wybierz polecenie rysowania linii, np. poprzez kliknięcie ikony W wierszu poleceń pojawi się pytanie o punkt początkowy rysowanej linii:

Wstęp Pierwsze kroki Pierwszy rysunek Podstawowe obiekty Współrzędne punktów Oglądanie rysunku...

WIZUALIZER 3D APLIKACJA DOBORU KOSTKI BRUKOWEJ. Instrukcja obsługi aplikacji

1. Opis okna podstawowego programu TPrezenter.

Rysunek 1: Okno timeline wykorzystywane do tworzenia animacji.

Tworzenie nowego rysunku Bezpośrednio po uruchomieniu programu zostanie otwarte okno kreatora Nowego Rysunku.

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

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

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

Jak dodać własny szablon ramki w programie dibudka i dilustro

Instrukcja użytkownika. Aplikacja dla WF-Mag

Techniki wstawiania tabel

Grafika Komputerowa 3D Etap drugi

KONSTRUKCJA TRÓJKĄTA 1 KONSTRUKCJA TRÓJKĄTA 2 KONSTRUKCJA CZWOROKĄTA KONSTRUKCJA OKRĘGU KONSTRUKCJA STYCZNYCH

AutoCAD LT praca na obiektach rastrowych i nakładanie barw z palety RGB na rysunki.

narzędzie Linia. 2. W polu koloru kliknij kolor, którego chcesz użyć. 3. Aby coś narysować, przeciągnij wskaźnikiem w obszarze rysowania.

Zadanie Wstaw wykres i dokonaj jego edycji dla poniższych danych. 8a 3,54 8b 5,25 8c 4,21 8d 4,85

CorelDRAW. wprowadzenie

Funkcja Raytracer. Przed korzystaniem z funkcji Raytracer należy zmienić/dostosować jego ustawienia.

Ćwiczenie 3: Rysowanie obiektów w programie AutoCAD 2010

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

Jak rozpocząć pracę? Mapa

Rzutowanie z 4D na 3D

Zad. 4: Rotacje 2D. 1 Cel ćwiczenia. 2 Program zajęć. 3 Opis zadania programowego

Obsługa mapy przy użyciu narzędzi nawigacji

SIMR 2016/2017, Analiza 2, wykład 1, Przestrzeń wektorowa

STEROWNIK TUBY LED STM-64

Edytor tekstu MS Word podstawy

Dodawanie grafiki i obiektów

CorelDraw - podstawowe operacje na obiektach graficznych

Maskowanie i selekcja

Materiały. Dorota Smorawa

Badanie ruchu złożenia

Plan wykładu. Akcelerator 3D Potok graficzny

Grafika komputerowa. Zajęcia 7

Usługi Informatyczne "SZANSA" - Gabriela Ciszyńska-Matuszek ul. Świerkowa 25, Bielsko-Biała

Zad. 3: Rotacje 2D. Demonstracja przykładu problemu skończonej reprezentacji binarnej liczb

Ćwiczenie 1 Automatyczna animacja ruchu

Fotografia cyfrowa obsługa programu GIMP. Cz. 18. Tworzenie ramki do zdjęcia. materiały dla osób prowadzących zajęcia komputerowe w bibliotekach

Google Earth. Co to jest Google Earth? Co to jest KML? Skąd można pobrać Google Earth?

Wymiarowanie i teksty. Polecenie:

1. Wprowadzenie. 1.1 Uruchamianie AutoCAD-a Ustawienia wprowadzające. Auto CAD Aby uruchomić AutoCada 14 kliknij ikonę

Systemy wirtualnej rzeczywistości. Komponenty i serwisy

Grafika 3D program POV-Ray - 1 -

Kultywator rolniczy - dobór parametrów sprężyny do zadanych warunków pracy

Karty pracy. Ustawienia. W tym rozdziale została opisana konfiguracja modułu CRM Karty pracy oraz widoki i funkcje w nim dostępne.

Metaliczny button z deseniem.

jest dostępne na różne systemy operacyjne. Niniejsza instrukcja opisuje podstawowe operacje i opcje niezbędne do rozpoczęcia pracy w tym programie.

OpenGL teksturowanie

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

1. Umieść kursor w miejscu, w którym ma być wprowadzony ozdobny napis. 2. Na karcie Wstawianie w grupie Tekst kliknij przycisk WordArt.

GIMP. Ćwiczenie nr 6 efekty i filtry. Instrukcja. dla Gimnazjum 36 - Ryszard Rogacz Strona 18

GIMP Grafika rastrowa (Ćwiczenia cz. 2)

Sposób odwzorowania wymiarów w wypadku eksportowania z programu Revit do programu AutoCAD

Spis treści. 1 Moduł Mapy 2

11.3 Definiowanie granic obszaru przeznaczonego do kreskowania

OpenGL przezroczystość

GRAFIKA KOMPUTEROWA 8: Konwersja i mieszanie kolorów

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

Mathcad c.d. - Macierze, wykresy 3D, rozwiązywanie równań, pochodne i całki, animacje

Odbicie na szkłach okularów

Fragment tekstu zakończony twardym enterem, traktowany przez edytor tekstu jako jedna nierozerwalna całość.

Materiały dla studentów pierwszego semestru studiów podyplomowych Grafika komputerowa i techniki multimedialne rok akademicki 2011/2012 semestr zimowy

Wprowadzenie do Mathcada 1

Transkrypt:

Zadanie 1. Ściana Zadanie W pliku walls.cpp znajduje się funkcja void draw_back_wall(). Należy uzupełnić ją, ustawiając odpowiednio parametry teksturowania tak, aby na ścianę, która w pierwotnej wersji jest jednolicie szara, zostały nałożone dwie tekstury: tekstura cegieł oraz tekstura plakatu w sposób jak na zrzucie ekranu poniżej: Przed Po 1. Potrzebne zmienne w dołączonym do zadania kodzie źródłowym Uzupełnić należy definicję funkcji void draw_back_wall() w pliku walls.cpp. W pliku tym włączany jest nagłówek textures.h, w którym zadeklarowane są obiekty dwóch interesujących tekstur: Textures::tex_bricks Textures::tex_poster W momencie wywołania draw_back_wall oba te obiekty będą miały: przypisane odpowiednie obrazki załadowane z plików, wygenerowane poziomy mipmap, ustawione filtrowanie trzyliniowe, ustawiony tryb zawijania obrazka na obcinanie do krawędzi format RGBA z kanałem alfa równym wszędzie 1 (odpowiedni kod wywoływany jest w funkcji init w pliku textures.cpp) W pliku textures.cpp zadeklarowana jest jeszcze jedna przydatna zmienna rzeczywista: Textures::lod_bias Jest to zmienna rzeczywista. Jej wartość zmieniana jest przy pomocy ruchu myszki w pionie z wciśniętym środkowym przyciskiem i obcinana do przedziału [-5,5]. Wykorzystamy ją jako parametr podczas ustawienia przesunięcia poziomu mipmap względem standardowo wybieranego na podstawie wielkości obrazka na ekranie.

2. Włączenie multiteksturowania z użyciem dwóch tekstur. Multiteksturowanie to funkcjonalność pozwalająca w jednym przebiegu rysowania siatki trójkątów, pocieniować ich powierzchnię na podstawie funkcji kolorów uzyskanych zarówno z oświetlenia jak i pobranych w określony sposób z kilku kolejno wykorzystywanych tekstur. W multiteksturowaniu można wyróżnić kolejne etapy teksturowania. Z każdym etapem teksturowania związane są: - obiekt tekstury, - współrzędne tekstury dla każdego wierzchołka siatki trójkątów (lub sposób ich generowania na podstawie jego położenia lub normalnej z nim związanej), - sposób połączenia koloru tekstury z kolorem uzyskanym z poprzedniego etapu teksturowania - stan włączenia/wyłączenia teksturowania Współrzędne tekstury w danym wierzchołku siatki definiowane są niezależnie dla każdego etapu teksturowania. Dodatkowo dla każdego etapu teksturowania można określić macierz przekształcenia podanych współrzędnych tekstury. Od momentu wywołania funkcji glactivetexture(gl_texture0); (analogicznie dla kolejnych stałych GL_TEXTURE1,...) tylko tego etapu teksturowania będą dotyczyć ustawienia: włączenia/wyłączenia teksturowania (np. glenable(gl_texture_2d); ), generowania współrzędnych tekstury (np. gltexgeni(gl_s, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR); glenable(gl_texture_gen_s);), wyboru używanego obiektu tekstury (np. glbindtexture(gl_texture_2d, texture_object);) macierzy przekształcenia współrzędnych tekstury (np. glmatrixmode(gl_texture); glrotatef(90.0f,0,0,1);) Należy dwukrotnie ustawić aktywny etap teksturowania (glactivetexture), włączyć dla niego teksturowanie (glenable) i wybrać używany obiekt tekstury (glbindtexture). Należy zamienić wywołania gltexcoord2f(...) w definicji kwadratu ściany na pary wywołań glmultitexcoord2f(gl_texture0,...); glmultitexcoord2f(gl_texture1,...); tak, aby zdefiniowane zostały współrzędne tekstury dla wszystkich wierzchołków, dla każdego etapu teksturowania (gltexcoord2f(...) jest równoważne glmultitexcoord2f(gl_texture0,...);).

3. Ustawienie właściwego trybu zawijania obrazka dla obu tekstur. Tryb zawijania związany jest z obiektem tekstury. Przed jego ustawieniem należy się upewnić, że dla aktualnego etapu teksturowania (glactivetexture) związany jest właściwy obiekt tekstury (glbind). Tryb ustala się poprzez wywołanie: gltexparameteri(gl_texture_2d, GL_TEXTURE_WRAP_S, mode);, gdzie zamiast mode powinna pojawić się odpowiednia stała. Najczęściej używane są trzy tryby zawijania obrazka: - powtarzanie obrazka (GL_REPEAT) - obcinanie do krawędzi obrazka (GL_CLAMP_TO_EDGE) - obcinanie do ustalonego koloru brzegu (GL_CLAMP_TO_BORDER) Kolor brzegu można ustalić za pomocą wywołań jak poniżej: vector4 border = vector4(.0f,.0f,.0f,.0f); gltexparameterfv(gl_texture_2d, GL_TEXTURE_BORDER_COLOR,(float*)&border.x); Należy dla tekstury cegieł ustawić tryb zawijania na powtarzanie, a dla tekstury plakatu na obcinanie do koloru brzegu, gdzie kolor brzegu ma składową alfa równą zero.

4. Ustawienie właściwych funkcji mieszania koloru obu tekstur. Sposób połączenia koloru definiowany jest oddzielnie dla składowych RGB koloru i oddzielnie dla kanału alfa. Definicja składa się z: - podania jednej ze stałych określających rodzaj funkcji (dwu- lub trzyargumentowej) np. GL_MODULATE (mnożenie dwóch argumentów), GL_INTERPOLATE (interpolacja liniowa pomiędzy dwoma pierwszymi argumentami na podstawie wartości trzeciego) - podania dla każdego argumentu jego źródła np. GL_PREVIOUS (wynik poprzedniego etapu teksturowania, dla etapu o numerze zero oznacza kolor obiektu po zastosowaniu równań oświetlenia), GL_TEXTURE (kolor pobrany z tekstury związanej z aktualnym etapem teksturowania) Gdy nie korzystamy z multiteksturowania najczęściej sposób liczenia koloru przy użyciu tekstury wybiera się za pomocą jednego z wywołań: gltexenvi(gl_texture_env, GL_TEXTURE_ENV_MODE, GL_REPLACE); gltexenvi(gl_texture_env, GL_TEXTURE_ENV_MODE, GL_MODULATE); Przy korzystaniu z multiteksturowania, aby podać pełną postać funkcji liczenia koloru należy poniższy schemat wywołań powtórzyć dla każdego etapu teksturowania (pomijając ustawienia dla kanału alfa, jeśli nie jest on wykorzystywany na danym etapie): glactivetexture(gl_texture0); gltexenvi(gl_texture_env, GL_TEXTURE_ENV_MODE, GL_COMBINE); gltexenvi(gl_texture_env, GL_COMBINE_RGB, GL_MODULATE); gltexenvi(gl_texture_env, GL_SRC0_RGB, GL_TEXTURE); gltexenvi(gl_texture_env, GL_OPERAND0_RGB, GL_SRC_COLOR); gltexenvi(gl_texture_env, GL_SRC1_RGB, GL_PREVIOUS); gltexenvi(gl_texture_env, GL_OPERAND1_RGB, GL_SRC_COLOR); //Dla GL_INTERPOLATE doszedłby trzeci argument //gltexenvi(gl_texture_env, GL_SRC2_RGB, GL_TEXTURE); //gltexenvi(gl_texture_env, GL_OPERAND2_RGB, GL_SRC_ALPHA); gltexenvi(gl_texture_env, GL_COMBINE_ALPHA, GL_MODULATE); gltexenvi(gl_texture_env, GL_SRC0_ALPHA, GL_TEXTURE); gltexenvi(gl_texture_env, GL_OPERAND0_ALPHA, GL_SRC_ALPHA); gltexenvi(gl_texture_env, GL_SRC1_ALPHA, GL_PREVIOUS); gltexenvi(gl_texture_env, GL_OPERAND1_ALPHA, GL_SRC_ALPHA); W tym zadaniu należy: interpolować kolor pomiędzy kolorem tekstury plakatu, a iloczynem koloru obiektu po oświetleniu i koloru tekstury cegieł, na podstawie wartości kanału alfa wyznaczonego dla tekstury plakatu. Wtedy wszędzie poza prostokątem plakatu na ścianie, gdzie kanał alfa pobrany z tekstury plakatu będzie równy zero, pojawi się wyłącznie tekstura cegieł, a w obrębie prostokąta plakatu wyłącznie tekstura plakatu. Wcześniej zdefiniowany został sposób zawijania tekstury plakatu z obcięciem do koloru brzegu, który ma składową alfa równą zero, natomiast sama tekstura plakatu ma cztery składowe koloru (to jest ważne, bo nie można pobrać kanału alfa dla tekstury w formacie RGB) z czwartą składową alfa równą jeden dla każdego teksela. To zapewnia poprawne wartości kanału alfa dla przeprowadzenia powyższej operacji.

5. Pozycjonowanie tekstury plakatu. Należy wykorzystać macierz przekształcenia tekstury do ustalenia rozmiaru, pozycji i obrotu plakatu na ścianie. 1 1 Plakat powinien mieć wymiary równe x boku ściany. Środek plakatu powinien 4 3 znajdować się w odległości.3 boku ściany od jej lewej krawędzi i.5 boku ściany od jej górnej krawędzi. Plakat powinien być obrócony w prawo o 10 stopni. Należy obliczyć macierz przekształcenia współrzędnych tekstury i ustawić ją dla tekstury plakatu. Odpowiedni blok instrukcji OpenGL powinien mieć postać: glactivetexture(...); // Etap teksturowania, którego dotyczy przekształcenie glmatrixmode(gl_texture); glpushmatrix(); // Zachowanie poprzedniego przekształcenia na stosie glloadidentity(); // tutaj powinien się znaleźć ciąg instrukcji glrotatef(...), gltranslatef(...), glscalef(...) // przekształcenia powinny odpowiadać macierzy M na rysunku powyżej, // pozostawiam ten etap do samodzielnego rozwiązania // rysowanie ściany glpopmatrix(); // Odtworzenie poprzedniego przekształcenia glmatrixmode(gl_modelview);

6. Zmiana standardowo wybieranego poziomu mipmap (rozmycie). Przy korzystaniu z mipmap dla każdego obrazka tekstury tworzone i pamiętane są również kolejne poziomy obrazków, z których każdy następny ma rozmiar dwukrotnie mniejszy od poprzedniego. Poziom mipmap wykorzystywany przy włączonym filtrowaniu trzyliniowym ustalany jest na podstawie wielkości tekseli (punktów tekstury) na ekranie. Można zmienić standardowy sposób wyboru poziomu mipmap, dodając do niego liczbę rzeczywistą, przy czym dodanie jednostki wiąże się mniej więcej z użyciem poziomów mipmap o jeden większych (przy czym zwiększenie poziomu mipmap oznacza użycia obrazka o mniejszej rozdzielczości). Poziomy mipmap mogą i najczęściej są generowane automatycznie. W OpenGL służy do tego instrukcja: gltexparameteri(gl_texture_2d, GL_GENERATE_MIPMAP, GL_TRUE);. Teksel następnego poziomu odpowiada średniej wartości kilku (na przykład czterech) tekseli poprzedniego poziomu. Należy dla każdego etapu teksturowania (glactivetexture(gl_texture0);...glactivetexture(gl_texture1);...) ustawić przesunięcie poziomu mipmap: gltexparameterf(gl_texture_2d, GL_TEXTURE_LOD_BIAS, Textures::lod_bias); Wtedy po uruchomieniu programu, podczas przesuwania myszy z wciśniętym środkowym przyciskiem, będzie można zobaczyć efekt wzmocnionego lub osłabionego filtrowania trzyliniowego: