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



Podobne dokumenty
OpenGL model oświetlenia

Laboratorium Grafiki Komputerowej i Animacji. Ćwiczenie V. Biblioteka OpenGL - oświetlenie sceny

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

Laboratorium grafiki komputerowej i animacji. Ćwiczenie III - Biblioteka OpenGL - wprowadzenie, obiekty trójwymiarowe: punkty, linie, wielokąty

Materiały. Dorota Smorawa

6 Przygotował: mgr inż. Maciej Lasota

3 Przygotował: mgr inż. Maciej Lasota

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

Elementarne obiekty geometryczne, bufory. Dorota Smorawa

1. Prymitywy graficzne

GRAFIKA KOMPUTEROWA 7: Kolory i cieniowanie

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

Temat: Transformacje 3D

OpenGL przezroczystość

Oświetlenie obiektów 3D

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

Ćwiczenie nr 2 - Rysowanie precyzyjne

(1,10) (1,7) (5,5) (5,4) (2,1) (0,0) Grafika 3D program POV-Ray

Grafika 3D OpenGL część II

Ćwiczenie nr 5 i 6 Przygotowanie dokumentacji technicznej dla brył

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

Plan wynikowy, klasa 3 ZSZ

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

XII. GEOMETRIA PRZESTRZENNA GRANIASTOSŁUPY

2. Permutacje definicja permutacji definicja liczba permutacji zbioru n-elementowego

SPOSOBY POMIARU KĄTÓW W PROGRAMIE AutoCAD

Zadanie polega na zbudowaniu i wyświetleniu przykładowej animowanej sceny przedstawiającej robota spawalniczego typu PUMA.

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

Laboratorium grafiki komputerowej i animacji. Ćwiczenie IV - Biblioteka OpenGL - transformacje przestrzenne obiektów

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

Janusz Ganczarski. OpenGL Pierwszy program

Projektowanie systemów zrobotyzowanych

Podstawowe zasady modelowania śrub i spoin oraz zestawienie najważniejszych poleceń AutoCAD 3D,

Plan wykładu. Akcelerator 3D Potok graficzny

str 1 WYMAGANIA EDUKACYJNE ( ) - matematyka - poziom podstawowy Dariusz Drabczyk

1.2. Ostrosłupy. W tym temacie dowiesz się: jak obliczać długości odcinków zawartych w ostrosłupach, jakie są charakterystyczne kąty w ostrosłupach.

STEREOMETRIA CZYLI GEOMETRIA W 3 WYMIARACH

1 Tworzenie brył obrotowych

PRZEWODNIK PO PRZEDMIOCIE

Wymagania kl. 3. Zakres podstawowy i rozszerzony

Ćwiczenia nr 7. TEMATYKA: Krzywe Bézier a

Wymagania edukacyjne z matematyki dla klasy III a,b liceum (poziom podstawowy) rok szkolny 2018/2019

Rys. 1. Brama przesuwna do wykonania na zajęciach

Laboratorium nr 10. Temat: Funkcje cz.2.

Graniastosłupy mają dwie podstawy, a ich ściany boczne mają kształt prostokątów.

11.3 Definiowanie granic obszaru przeznaczonego do kreskowania

Wymagania na poszczególne oceny szkolne z. matematyki. dla uczniów klasy IIIa i IIIb. Gimnazjum im. Jana Pawła II w Mętowie. w roku szkolnym 2015/2016

SPRAWDZIAN NR 1. Suma długości krawędzi prostopadłościanu o wymiarach 4 cm x 6 cm x 10 cm jest równa. A. 20 cm B. 40 cm C. 60 cm D.

Kryteria oceniania z matematyki Klasa III poziom podstawowy

Systemy wirtualnej rzeczywistości. Komponenty i serwisy

Plan wynikowy klasa 3. Zakres podstawowy

Politechnika Krakowska im. Tadeusza Kościuszki. Karta przedmiotu. obowiązuje studentów rozpoczynających studia w roku akademickim 2013/2014

Ćwiczenie nr 5 Zautomatyzowane tworzenie dokumentacji

w jednym kwadrat ziemia powietrze równoboczny pięciobok

Pochylenia, Lustro. Modelowanie ramienia. Zagadnienia. Wyciągnięcie/dodania/bazy, Pochylenia ścian, Lustro (ewent. wstawianie części, łączenie części)

Ćwiczenie nr 6 Temat: BADANIE ŚWIATEŁ DO JAZDY DZIENNEJ

Technikum Nr 2 im. gen. Mieczysława Smorawińskiego w Zespole Szkół Ekonomicznych w Kaliszu

Zadania z podstaw programowania obiektowego

PRZEWODNIK PO PRZEDMIOCIE

I. Potęgi. Logarytmy. Funkcja wykładnicza.

Agnieszka Kamińska, Dorota Ponczek. MATeMAtyka 3. Szczegółowe wymagania edukacyjne z matematyki w klasie trzeciej.

R o z w i ą z a n i e Przy zastosowaniu sposobu analitycznego należy wyznaczyć składowe wypadkowej P x i P y

Skrypt 18. Bryły. 2. Inne graniastosłupy proste rozpoznawanie, opis, rysowanie siatek, brył

Projektowanie graficzne. Wykład 2. Open Office Draw

Agnieszka Kamińska, Dorota Ponczek. MATeMAtyka 3. Plan wynikowy. Zakres podstawowy

Temat: WYZNACZANIE OBROTOWO-SYMETRYCZNEJ BRYŁY FOTOMETRYCZNEJ

OpenGL Światło (cieniowanie)

Wykład 12. Wprowadzenie do malarstwa, str. 1 OpenGL Open Graphics Library. OpenGL składa się z

Ćwiczenie nr 3 Edycja modeli bryłowych

8 Przygotował: mgr inż. Maciej Lasota

SPRAWDZIAN NR Oceń prawdziwość zdania. 2. Zaznacz poprawną odpowiedź. 3. Na rysunkach przedstawiono dwie bryły. Nazwij każdą z nich.

Katalog wymagań programowych na poszczególne stopnie szkolne. Matematyka. Poznać, zrozumieć

KRYTERIA OCEN Z MATEMATYKI DLA UCZNIÓW KL. II GIMNAZJUM

Krzyżówka oraz hasła do krzyżówki. Kalina R., Przewodnik po matematyce dla klas VII-VIII, część IV, SENS, Poznań 1997, s

Elementy geometrii analitycznej w R 3

1. Potęgi. Logarytmy. Funkcja wykładnicza

Dziedziczenie. Zadanie 1

Tomasz Tobiasz PLAN WYNIKOWY (zakres podstawowy)

OpenGL Światło (cieniowanie)

DesignCAD 3D Max 24.0 PL

PRZEWODNIK PO PRZEDMIOCIE

Rok akademicki: 2017/2018 Kod: JFM s Punkty ECTS: 7. Poziom studiów: Studia I stopnia Forma i tryb studiów: Stacjonarne

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.:

ZAKRES PODSTAWOWY CZĘŚĆ II. Wyrażenia wymierne

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

OpenGL teksturowanie

Przykład zastosowania poleceń 3DWYRÓWNAJ i RÓŻNICA

WYMAGANIA EDUKACYJNE NIEZBĘDNE DO UZYSKANIA POSZCZEGÓLNYCH ŚRÓDROCZNYCH I ROCZNYCH OCEN KLASYFIKACYJNYCH Z MATEMATYKI

WYMAGANIA EDUKACYJNE Z MATEMATYKI 2016/2017 (zakres podstawowy) klasa 3abc

Zad. 6: Sterowanie robotem mobilnym

GEOMETRIA PRZESTRZENNA (STEREOMETRIA)

9. Podstawowe narzędzia matematyczne analiz przestrzennych

Informatyka I stopień (I stopień / II stopień) Ogólnoakademicki (ogólno akademicki / praktyczny)

Stereometria bryły. Wielościany. Wielościany foremne

ANDROID. OpenGL ES 1.0. Tomasz Dzieniak

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

Wyobraźnia w budowie Projekt współfinansowany ze środków Europejskiego Funduszu Społecznego

Gry komputerowe, Informatyka N1, III Rok

GEOPLAN Z SIATKĄ TRÓJKĄTNĄ

Bartosz Bazyluk POTOK RENDEROWANIA Etapy renderowania w grafice czasu rzeczywistego. Grafika Komputerowa, Informatyka, I Rok

Transkrypt:

Laboratorium grafiki komputerowej i animacji Ćwiczenie V - Biblioteka OpenGL - oświetlenie sceny Przygotowanie do ćwiczenia: 1. Zapoznać się ze zdefiniowanymi w OpenGL modelami światła i właściwości materiałów. 2. Zapoznać się z zestawem komend OpenGL umożliwiającym zdefiniowanie źródeł światła i właściwości materiałów. Przebieg ćwiczenia: 1. Założenia: a. Celem prac na zajęciach laboratoryjnych jest zdefiniowanie parametrów oświetlenia i oświetlenie modelu manipulatora Puma (rysunek 1.1). b. Wynikiem prac na dzisiejszych zajęciach ma być program zbliżony w działaniu do programu puma_swiatlo.exe dostarczonego do materiałów laboratoryjnych. c. Realizacja ćwiczenia polega na uzupełnieniu kodu programu gl_template modyfikowanego na ostatnich zajęciach. d. W realizacji prac wzorować się należy na rozwiązaniach przyjętych w programie shinyjet również dołączonym do materiałów laboratoryjnych. Rys 1.1 Oświetlony model manipulatora Puma 2. Uwagi do sposobu realizacji celu dzisiejszych zajęć laboratoryjnych: a. W pierwszej kolejności należy zdefiniować parametry źródła światła. Charakterystyki źródła światła dokonuje się zwykle jednokrotnie przed wyświetlaniem sceny (w przykładowych programach definicja oświetlenia znajduje się w funkcji SetupRC() ). Szczegóły można znaleźć w materiałach wprowadzających do ćwiczenia. Poniżej zawarto przykładowy ciąg poleceń OpenGL ustalający oświetlenie na scenie: // wartości składowych oświetlenia i koordynaty źródła światła: GLfloat ambientlight[] = 0.3f, 0.3f, 0.3f, 1.0f ; GLfloat diffuselight[] = 0.7f, 0.7f, 0.7f, 1.0f ; GLfloat specular[] = 1.0f, 1.0f, 1.0f, 1.0f; GLfloat lightpos[] = 0.0f, 150.0f, 150.0f, 1.0f ;

GLfloat specref[] = 1.0f, 1.0f, 1.0f, 1.0f ; glenable(gl_depth_test); // usuwanie niewidocznych powierzchni glfrontface(gl_ccw); // ustalenie zewnętrznych ścian glenable(gl_cull_face); // wyłączenie obliczania wewnętrznych ścian // Uaktywnienie oświetlenia glenable(gl_lighting); // Ustawienie parametrów źródła światła 0 gllightfv(gl_light0,gl_ambient,ambientlight); gllightfv(gl_light0,gl_diffuse,diffuselight); gllightfv(gl_light0,gl_specular,specular); gllightfv(gl_light0,gl_position,lightpos); glenable(gl_light0); // Uaktywnienie śledzenia kolorów glenable(gl_color_material); // Materiały mają śledzić kolory ustalone poleceniem glcolor glcolormaterial(gl_front, GL_AMBIENT_AND_DIFFUSE); // Od tej chwili wszystkie materiały będą miały pełną odblaskowość // z dużą jasnością glmaterialfv(gl_front, GL_SPECULAR,specref); glmateriali(gl_front,gl_shininess,128); // Normalne zostaną automatycznie normalizowane glenable(gl_normalize); b. Kolejnym etapem tworzenia efektu oświetlenia jest zdefiniowanie wektorów normalnych do ścian, które chcemy widzieć jako oświetlone. Normalną można zdefiniować dla każdego wierzchołka wielokąta. Ponieważ zakładamy, że pojedynczy wielokąt wyznacza płaszczyznę, wystarczy dla wszystkich wierzchołków wielokąta wyznaczyć jedną normalną. Wyjątek w naszym programie stanowić będą tworzące walców. Dla osiągnięcia efektu wygładzenia powierzchni bocznych walca wygodniej jest definiować normalne prostopadłe do krawędzi ciągu czworokątów przybliżających tworzącą walca. c. Przykładowy fragment programu definiujący normalne dla walca zawarto poniżej: void walec(double h, double r) double angle,x,y; glbegin(gl_triangle_fan); glnormal3d(0.0,0.0,-1.0); glvertex3d(0.0f, 0.0f, 0.0f); for(angle = 0.0f; angle <= (2.0f*GL_PI); angle += (GL_PI/8.0f)) x = r*sin(angle);

y = r*cos(angle); glvertex2d(x, y); glbegin(gl_triangle_fan); glnormal3d(0.0,0.0,1.0); glvertex3d(0.0, 0.0, h); for(angle = 0.0f; angle >= -(2.0f*GL_PI); angle -= (GL_PI/8.0f)) x = r*sin(angle); y = r*cos(angle); glvertex3d(x, y, h); glbegin(gl_quad_strip); for(angle = 0.0f; angle >= -(2.0f*GL_PI); angle -= (GL_PI/8.0f)) x = r*sin(angle); y = r*cos(angle); glnormal3d(sin(angle),cos(angle),0.0); glvertex3d(x, y, h); glvertex3d(x, y, 0); d. Dla dowolnego wielokąta, usytuowanego dowolnie w przestrzeni trudno jest poprawnie zdefiniować wektor prostopadły o długości 1. W tym celu uzupełniono zestaw funkcji programu gltemplate o funkcję calcnormal(float v[3][3], float out[3]). Dokładny opis działania funkcji zawarto w materiałach wprowadzających do ćwiczenia. Funkcja umożliwia zdefiniowanie normalnej do wielokąta na podstawie współrzędnych trzech wierzchołków danego wielokąta. Przykład wykorzystania funkcji umieszczono poniżej: glbegin(gl_quads); float v[3][3]= 0.0f, -15.0f, 10.0f, -60.0f,-10.0f,10.0f, -60.0f,-10.0f,0.0f ; float norm[3]; calcnormal(v,norm); glnormal3d(norm[0],norm[1],norm[2]); glvertex3d(0.0, -15.0, 10.0); glvertex3d(-60.0,-10.0,10.0); glvertex3d(-60.0,-10.0,0.0); glvertex3d(0.0, -15.0, 0.0);

3. Przebieg ćwiczenia: a. W funkcji SetupRC() od-komentować wszystkie wywołania instrukcji i funkcji w języku C. Spowoduje to zdefiniowanie i uaktywnianie pojedynczego źródła światła. Dodatkowo nastąpi wyłączenie rysowania wszystkich tylnych ścian wielokątów (glenable(gl_cull_face);). W programie zastosowano model oświetlenia ze śledzeniem kolorów. Zdefiniowano również światło kierunkowe, które będzie modelowało białe odbłyski od wszystkich wielokątów. b. Ustalić następujący tryb rysowania wielokątów: przednie ściany wypełnione, tylne ściany rysowane jako siatka (należy w funkcji RenderScene() uaktywnić wywołanie funkcji glpolygonmode(gl_back,gl_line);) c. Dla opracowanych modeli brył: sześcian, walec, ramię robota ustalić jednolite kolory wszystkich ścian. d. Zdefiniować normalne dla modelu sześcianu. Rysunek 1 pokazuje wartości normalnych dla poszczególnych ścian. y [0,1,0] [-1,0,0] [0,0,-1] [1,0,0] [0,0,1] z [0,-1,0] x Rys. 1. Współrzędne normalnych do ścian sześcianu. Poniższy fragment kodu pokazuje zasadę wprowadzania normalnych w skrypcie OpenGL rysującym sześcian: void szescian(void) glcolor3d(0.8,0.7,0.3); glbegin(gl_quads); glnormal3d(0,0,1); glvertex3d(25,25,25); glvertex3d(-25,25,25); glvertex3d(-25,-25,25); glvertex3d(25,-25,25); glnormal3d(1,0,0); glvertex3d(25,25,25); glvertex3d(25,-25,25);

glvertex3d(25,-25,-25); glvertex3d(25,25,-25); // glend() e. Zdefiniować normalne dla walca. Rysunek 2 pokazuje wartości odpowiednich normalnych. Łatwo zauważyć, że normalne do podstaw walca mają odpowiednio wartości [0,0,1] oraz [0,0,-1]. Zasadę wyliczenia normalnych dla tworzącej walca pokazano na rysunku 3. y [sin(α), cos(α),0] r [0,0,-1] x [0,0,1] z h Rys. 2. Wartości normalnych dla modelu walca. Y ay α ax a α X Rys. 3. Wyznaczanie normalnej do powierzchni bocznej walca Zależności matematyczne: [ ] W punkcie 2c pokazano, jak pokazane wyżej zależności zaimplementować w skrypcie rysującym model walca.

f. Zdefiniować normalne dla modelu ramienia. W fragmentach modelu będących połowami siatek walca zastosować rozwiązanie zaproponowane w punktach 2c i 3e. Dwa czworokąty leżące w tych samych płaszczyznach, co podstawy połówek walca mają takie same normalne jak te połówki. Dla pozostałych dwu czworokątów należy zastosować funkcję calcnormal(), por. punkt 2d. Do funkcji przekazuje się współrzędne 3 wierzchołków wielokąta, do którego chcemy wyznaczyć normalną. Funkcja na podstawie tych 3 wierzchołków wyznacza współrzędne dwu wektorów zaczepionych w jednym z wierzchołów i mające końce w dwu pozostałych wierzchołkach. Mając współrzędne wektorów funkcja oblicza iloczyn wektorowy tych wektorów, a następnie dokonuje normalizacji tego iloczynu z zastosowaniem funkcji ReduceToUnit(). Wynikiem działania funkcji jest wektor normalny do płaszczyzny wyznaczonej przez 3 wierzchołki wielokąta. Należy zwrócić uwagę, żeby do funkcji calcnormal() przekazać tablice wierzchołków opisane wartościami typu float. g. Zadanie dodatkowe: Stosując rozwiązania zawarte w przykładowym programie spot należy zdefiniować reflektor w scenie z robotem.