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

Podobne dokumenty
Zaawansowana Grafika Komputerowa

Metoda śledzenia promieni (ang. ray tracing)

Gry Komputerowe Interaktywna kamera FPP

Gry Komputerowe - laboratorium 2. Kamera FPP / TPP. mgr inż. Michał Chwesiuk 1/11. Szczecin, r

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

Elementy geometrii analitycznej w R 3

Załącznik nr 8. do Studium Wykonalności projektu Sieć Szerokopasmowa Polski Wschodniej województwo podkarpackie

SFML. (Simple and Fast Multimedia Library)

Tworzenie projektu asemblerowego dla środowiska Visual Studio 2008.

Informatyka I : Tworzenie projektu

Julia 4D - raytracing

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

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

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

Wykład 12. Programowanie serwera MS SQL 2005 w C#

KRYPTOGRAFIA I OCHRONA DANYCH PROJEKT

Prosta i płaszczyzna w przestrzeni

Ćwiczenia laboratoryjne. Oprogramowanie i badanie prostych metod sortowania w tablicach

Plan wykładu. Akcelerator 3D Potok graficzny

Podstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk. Wydział Inżynierii Metali i Informatyki Przemysłowej

GRK 2. dr Wojciech Palubicki

Geometria analityczna

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 8. Karol Tarnowski A-1 p.

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

Wykład II. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

Pętla for. Wynik działania programu:

dr inż. Piotr Odya dr inż. Piotr Suchomski

Wprowadzenie do programowania w języku Visual Basic. Podstawowe instrukcje języka

Klasy i obiekty cz II

Programowanie wielowarstwowe i komponentowe

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

Zestaw Obliczyć objętość równoległościanu zbudowanego na wektorach m, n, p jeśli wiadomo, że objętość równoległościanu zbudowanego na wektorach:

ALGEBRA z GEOMETRIA, ANALITYCZNA,

Technologie Map Cyfrowych

Allegro5 część 1 - Witaj Świecie! Projekt, inicjalizacja, tworzenie okna, czcionki. Autor: Kamil Krzyszczuk - C mons

= [6; 2]. Wyznacz wierzchołki tego równoległoboku.

Instrukcja laboratoryjna cz.3

Podstawy programowania. Ćwiczenie. Pojęcia bazowe. Języki programowania. Środowisko programowania Visual Studio

Intro 4kb. sphere tracing. Maciej Matyka (maq / floppy) Dla koła naukowego Voxel

JSLib 4.1 Dokumentacja

Układy współrzędnych

TEMAT: PRZEKSZTAŁCENIA WYKRESÓW FUNKCJI PRZESUNIĘCIE O WEKTOR

Geometria Analityczna w Przestrzeni

Model oświetlenia. Radosław Mantiuk. Wydział Informatyki Zachodniopomorski Uniwersytet Technologiczny w Szczecinie

I - Microsoft Visual Studio C++

Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.

Wykład 03 JavaScript. Michał Drabik

Wybieramy File->New->Project Wybieramy aplikację MFC->MFC Application jak na rysunku poniżej:

FUNKCJE I RÓWNANIA KWADRATOWE. Lekcja 78. Pojęcie i wykres funkcji kwadratowej str

- Narzędzie Windows Forms. - Przykładowe aplikacje. Wyższa Metody Szkoła programowania Techniczno Ekonomiczna 1 w Świdnicy

3. Macierze i Układy Równań Liniowych

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

Janusz Ganczarski. OpenGL Pierwszy program

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

Czym jest wykrywanie kolizji. Elementarne metody detekcji kolizji. Trochę praktyki: Jak przygotować Visual Studio 2010 do pracy z XNA pod Windows

Arkusz 6. Elementy geometrii analitycznej w przestrzeni

do MATLABa programowanie WYKŁAD Piotr Ciskowski

1.Wstęp. 2.Generowanie systemu w EDK

SUBIEKT GT IMPORT XLS Towarów

Ekoenergetyka Matematyka 1. Wykład 6.

Wprowadzenie do języka Java

Politechnika Gdańska Katedra Optoelektroniki i Systemów Elektronicznych

Hurtownia Świętego Mikołaja projekt bazy danych

Formaty plików graficznych

Wykład IX. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

Unity 3D - tworzenie sceny

Rodzina protokołów TCP/IP. Aplikacja: ipconfig.

WYKONANIE APLIKACJI OKIENKOWEJ OBLICZAJĄCEJ SUMĘ DWÓCH LICZB W ŚRODOWISKU PROGRAMISTYCZNYM. NetBeans. Wykonał: Jacek Ventzke informatyka sem.

Geometria analityczna

dr hab. inż. Lidia Jackowska-Strumiłło, prof. PŁ Instytut Informatyki Stosowanej, PŁ

APEK MeasureInWeb program komunikacyjny do systemów pomiarowych.

Bartłomiej Filipek

GRK 4. dr Wojciech Palubicki

Techniki programowania INP001002Wl rok akademicki 2017/18 semestr letni. Wykład 7. Karol Tarnowski A-1 p.

Pętle iteracyjne i decyzyjne

Spis treści. Konwencje zastosowane w książce...5. Dodawanie stylów do dokumentów HTML oraz XHTML...6. Struktura reguł...9. Pierwszeństwo stylów...

8. Wektory. Przykłady Napisz program, który pobierze od użytkownika 10 liczb, a następnie wypisze je w kolejności odwrotnej niż podana.

Grafika Komputerowa Wykład 1. Wstęp do grafiki komputerowej Obraz rastrowy i wektorowy. mgr inż. Michał Chwesiuk 1/22

PRÓBNA MATURA ZADANIA PRZYKŁADOWE

Język ludzki kod maszynowy

Kompilacja javac prog.java powoduje wyprodukowanie kilku plików o rozszerzeniu.class, m.in. Main.class wykonanie: java Main

GEOMETRIA ANALITYCZNA W PRZESTRZENI

Egzamin ustny z matematyki semestr II Zakres wymaganych wiadomości i umiejętności

Podstawy POV-Ray a. Diana Domańska. Uniwersytet Śląski

Podstawy użytkowania systemu Linux

Cover sheet. WinCC (TIA Portal) FAQ Listopad 2012

1 Powtórzenie wiadomości

Funkcje i instrukcje języka JavaScript

Geometria analityczna - przykłady

Wprowadzenie do programowania i programowanie obiektowe

Aplikacje WWW - laboratorium

BAZA DANYCH SIECI HOTELI

Programowanie - wykład 4

Laboratorium 03: Podstawowe konstrukcje w języku Java [2h]

WPROWADZENIE DO INFORMATYKI

Shadery. Artur Staszczyk Bartłomiej Filipek

Grafika PHP dla początkujących

Aerotiangulacja plik chańcza_blok folder fotopunkty - folder camera

Podstawowe wykorzystanie Hibernate

ANALIZA MATEMATYCZNA

Transkrypt:

Ray Tracer cz.1 Michał Chwesiuk Zachodniopomorski Uniwersytet Technologiczny w Szczecinie Wydział Informatyki 4 Kwiecień 2017 Michał Chwesiuk Ray Tracer cz.1 4 Kwiecień 2017 1/21

Plan zajęć laboratoryjnych Równanie oświetlenia wektorów normalnych Wyznaczanie cieni Rekurencyjne śledzenie promieni odbitych Teksturowanie kuli Antyaliasing Michał Chwesiuk Ray Tracer cz.1 4 Kwiecień 2017 2/21

GLM OpenGL Mathematics Biblioteka zawierająca operacje wektorowe i macierzowe Często używana z połączeniem z OpenGL, użyciem przypomina GLSL Sama a jest zamieszczona w plikach header owych http://glm.g-truc.net/0.9.8/index.html Michał Chwesiuk Ray Tracer cz.1 4 Kwiecień 2017 3/21

FreeImage Biblioteka do obsługi obrazów, m.in. pozwala na ich zapis i odczyt Obsługuje takie formaty jak PNG, BMP, JPEG, TIFF i wiele innych Składa się z trzech plików : freeimage.h, freeimage.lib, i freeimage.dll http://glm.g-truc.net/0.9.8/index.html Michał Chwesiuk Ray Tracer cz.1 4 Kwiecień 2017 4/21

Struktura projektu Zachęcam do przemyślenia struktury projektu, to znaczy odpowiedniego dołączenia plików i w odpowiedni sposób. Wszystkie pliki header owe zachęcam do wstawienia do folderu <folder projektu>/include. Wszystkie pliki statycznych (pliki lib ) zachęcam do wstawienia do folderu <folder projektu>/lib Michał Chwesiuk Ray Tracer cz.1 4 Kwiecień 2017 5/21

Struktura projektu Aby dodać do środowiska Visual Studio foldery zawierające i, należy je wskazać we właściwościach projektu Folder zawierający pliki header owe dodajemy w opcji Project ->Properties ->Configuration Properties ->C/C++ ->General ->Additional Include Directories Folder zawierający pliki i statycznej (pliki *.lib ) dodajemy w opcji Project ->Configuration Properties ->Linker ->General ->Additional Library Directories Ddoatkowo, każdy używany plik *.lib powinien zostać dodany do listy zawierającej się w (pliki *.lib ) dodajemy w opcji Project ->Configuration Properties ->Linker ->Input ->Additional Dependencies Zamiast używania ścieżki bezpośredniej ( C:/...) w praktyce korzysta się z makra $(SolutionDir), które wskazuje na folder projektu (np. $(SolutionDir)include) Dla ambitnych zachęcam do nauki i skorzystania z NuGet Michał Chwesiuk Ray Tracer cz.1 4 Kwiecień 2017 6/21

Należy opracować klasę CBitmap, która obsługuje zapis do pliku w formie bitmapy Funkcje : Inicjacja bitmapy, parametrami funkcji to rozmiary bitmapy, szerokość i wysokość (może to być także konstruktor) Edytowanie wartości piksela na bitmapie, parametrami funkcji powinna być pozycja piksela i nowy kolor tego piksela Zapis bitmapy, parametrem powinna być nazwa pliku, do którego bitmapa powinna być zapisana (rozszerzenie BMP) Michał Chwesiuk Ray Tracer cz.1 4 Kwiecień 2017 7/21

Kamera Atrybuty kamery : Pozycja (position) Punkt patrzenia (target) Wektor góry (up) Pole widzenia(field of View FOV) Ilość pikseli w szerokości bitmapy (width) Ilość pikseli w wysokości bitmapy (height) up width target height FOV position Michał Chwesiuk Ray Tracer cz.1 4 Kwiecień 2017 8/21

Promień ray = pos + t * dir pos t=0 dir 1 t=1 t=2 t=3 Atrybuty : Pozycja Kierunek Michał Chwesiuk Ray Tracer cz.1 4 Kwiecień 2017 9/21

Promień pierwotny Promień pierwotny jest to promień, który zaczyna się w pozycji kamery i przechodzi przez dany piksel obrazu. przez pozycje kamery i dany piksel obrazu. O ux vx ox i ~ = ~ ray.pos ~ = position, ray.dir uy vy oy j uz vz oz 1 U V i, j numer kolumny, wiersza piksela ~ = target ~ ~ position dir ~ ~ ~u = up ~ dir, ~v = ~u dir width height width ~ ~u ~v ~o = dir 2 2 2 tan( F OV ) 2 Michał Chwesiuk Ray Tracer cz.1 4 Kwiecień 2017 10/21

Przykładowy loader sceny #include <fstream> #include <sstream> int main() { std::ifstream file; std::string filename = scena.txt ; file.open(filename.c str(), std::ios::in); if(file.fail()) return 1; std::string line; while (getline(file, line)) { std::istringstream iss(line); std::string type; iss >>type; if (type.compare( cam width ) == 0) { int cam width; iss >>cam width; } } return 0; } Michał Chwesiuk Ray Tracer cz.1 4 Kwiecień 2017 11/21

Funkcja run for each PIXEL { ENERGY = 1.0 RAY = generate PRIMARY RAY COLOR = trace ray(ray,background color,energy) set COLOR in PIXEL } Michał Chwesiuk Ray Tracer cz.1 4 Kwiecień 2017 12/21

Funkcja trace ray function COLOR trace ray(ray, &COLOR, &ENERGY) { INTERSECTION = find intersection(ray, true) if(intersetion == null) return COLOR generate SHADOW RAY(INTERSECTION POINT) INTERSECTION = find intersection(shadow RAY, false) if(intersection == null) { compute new color(solve light equation) COLOR = COLOR + ENERGY * new color } decrease ENERGY if(energy<small value) return COLOR generate SECONDARY RAY trace ray(secondary RAY, COLOR, ENERGY) return COLOR } Michał Chwesiuk Ray Tracer cz.1 4 Kwiecień 2017 13/21

Funkcja find intersection function OBJECT find intersection(ray, closest intersection) { INTERSECTION = null for each OBJECT in SCENE { INTERSETION = is RAY intersect OBJECT if(intersetion == true) { if(closest intersection == true) { INTERSECTION = closest OBJECT continue } else { INTERSETION = OBJECT break } } return INTERSECTION } Michał Chwesiuk Ray Tracer cz.1 4 Kwiecień 2017 14/21

Funkcja trace ray function COLOR trace ray(ray, &COLOR, &ENERGY) { INTERSECTION = find intersection(ray, true) if(intersetion == null) return COLOR generate SHADOW RAY(INTERSECTION POINT) INTERSECTION = find intersection(shadow RAY, false) if(intersection == null) { compute new color(solve light equation) COLOR = COLOR + ENERGY * new color } decrease ENERGY if(energy<small value) return COLOR generate SECONDARY RAY trace ray(secondary RAY, COLOR, ENERGY) return COLOR } Michał Chwesiuk Ray Tracer cz.1 4 Kwiecień 2017 15/21

Sferę określa się za pomocą dwóch atrybutów : Pozycja - punkt w przestrzeni określający jej środek Promień - odległość zbioru punktów należących do sfery od jej środka Aby obliczyć, czy promień przecina się ze sferą (a także punkt przecięcia) należy rozwiązać układ równań ( x o 2 = r2 równanie sfery x = pos + t dir równanie pos + t dir o 2 = r2 v = pos o v + t dir 2 = r2 v 2 + 2v t dir + t2 dir2 = r2 v 2 + 2v t dir + t2 dir2 r2 = 0 Michał Chwesiuk sphere.o t ray.pos Ray Tracer cz.1 sphere.r punkt przecięcia ray.dir 4 Kwiecień 2017 16/21

(dir2 )t2 + (2v dir)t + (v 2 r2 ) = 0 A t2 + B t + C = 0 A = dir2 B = 2v dir C = v2 r2 = B2 4 A C B± t = 2 A sphere.o t ray.pos sphere.r punkt przecięcia ray.dir t - odległość od kamery do punktu przecięcia liczona wzdłuż. Wybieramy najmniejszy dodatni parametr t. Michał Chwesiuk Ray Tracer cz.1 4 Kwiecień 2017 17/21

Δ<0 t<0 Δ>0 Δ=0 Wybieramy najmniejszy dodatni parametr t Michał Chwesiuk Ray Tracer cz.1 4 Kwiecień 2017 18/21

Trójkąt określa się za pomocą trzech punktów, będącymi wierzchołkami Aby obliczyć, czy promień przecina się z należy najpierw wyznaczyć równanie płaszczyzny, na której się on znajduje Ax + By + Cz + D = 0, gdzie [A B C] to wektor normalny trójkąta Kolejnym krokiem jest uzyskanie punktu przecięcia z tą płaszczyzną A pos.x + B pos.y + C pos.z + D t = A dir.x + B dir.y + C dir.z P = pos + t dir Michał Chwesiuk Ray Tracer cz.1 4 Kwiecień 2017 19/21

Ostatnim etapem jest sprawdzenie czy punkt P leży wewnątrz trójkąta Michał Chwesiuk Ray Tracer cz.1 4 Kwiecień 2017 20/21

gamma for each PIXEL in IMAGE : // osobno dla kanałów R, G i B if P IXEL.COLOR<0.00304 : P IXEL.COLOR = P IXEL.COLOR 12.92 else : P IXEL.COLOR = 1.055 c 1 2.4 0.055 Michał Chwesiuk Ray Tracer cz.1 4 Kwiecień 2017 21/21