Silnik graficzny 3D PRACA DYPLOMOWA MAGISTERSKA. Stanisław Ignacy Gąsiorowski. Rok akademicki 2010/2011

Wielkość: px
Rozpocząć pokaz od strony:

Download "Silnik graficzny 3D PRACA DYPLOMOWA MAGISTERSKA. Stanisław Ignacy Gąsiorowski. Rok akademicki 2010/2011"

Transkrypt

1 Politechnika Warszawska Wydział Elektroniki i Technik Informacyjnych Instytut Informatyki Rok akademicki 2010/2011 PRACA DYPLOMOWA MAGISTERSKA Stanisław Ignacy Gąsiorowski Silnik graficzny 3D Opiekun pracy dr inż. Tomasz Martyn Ocena: Podpis Przewodniczącego Komisji Egzaminu Dyplomowego

2 Streszczenie Przedmiotem niniejszej pracy jest rozbudowa silnika graficznego. W pracy przedstawiono nową architekturę silnika, opisano jego działanie, a także przetestowano przydatność do tworzenia gier komputerowych. Silnik napisano w językach C++, CG oraz GLSL i przystosowano do pracy w systemach Windows oraz Linux. Do generowania grafiki wykorzystana została biblioteka OpenGL. Z silnikiem zintegrowano silnik fizyki NVidia PhysX. Dodano również nowe elementy: mechanizm zarządzania sceną, efekty cząsteczkowe, mechanizm renderowania map kubicznych. Jednym z ciekawszych elementów jest autorski system portali, którego implementacja sprawiła najwięcej trudności. Powstała także baza materiałów, które można nakładać na obiekty. Zastosowanie kubicznych map otoczenia pozwoliło stworzyć materiały przezroczyste i odbijające. Opracowano szereg efektów, z których najbardziej złożone to symulacja głębi ostrości, rozmycie ruchu i mgła wolumetryczna. Pozostałe efekty to m.in.: stereoskopia, rozmycie, wyostrzenie, poświata, mieszanie kolorów. Wygodny w obsłudze interfejs użytkownika pozwala na proste zarządzanie efektami. Słowa kluczowe: silnik graficzny, grafika 3d, efekty, głębia ostrości, mgła, rozmycie ruchu, portale, efekty cząsteczkowe, interfejs użytkownika, OpenGL, shadery. Title: 3D graphics engine Abstract The subject of this thesis is development of graphics engine. Thesis describes new engine architecture and the usability to create games. Engine was written in C++, CG and GLSL and uses OpenGL for rendering graphics. It can work in both Windows and Linux. NVidia PhysX physics engine was integrated with the engine. New elements were added, such as: scene management, particle effects, environmental cube map rendering. One of the most interesting elements is a portal system, which was created from the beginning. The engine has set of base materials, which can be applied to objects. Transparent and reflective materials can be created using environmental cube maps. Many effects were created, of which the most interesting are depth of field, motion blur and volumetric fog. There are also other effects such as: blur, sharpen, glow, color blend. The engine offers a useful interface for managing effects. Keywords: graphics engine, 3d graphics, effects, depth of field, fog, motion blur, portals, particles, user interface, OpenGL, shaders.

3 Spis treści 1 Wprowadzenie Przegląd istniejących rozwiązań Podział przestrzeni Fizyka Portale Cel i zakres pracy Architektura Założenia sprzętowe Silnik Narzędzia Implementacja Drzewo ósemkowe Silnik fizyki NVidia PhysX Portale Wprowadzenie Renderowanie sceny za portalem Integracja fizyki z mechanizmem portali Fałszywe kolizje Skalowanie portali Kamera a portale Oświetlenie a portale Kubiczne mapy otoczenia Efekty cząsteczkowe Efekty i materiały Stereoskopia Głębia ostrości Rozmycie ruchu Mgła Inne efekty Materiały Przykładowa gra Podsumowanie Bibliografia Spis załączników... Błąd! Nie zdefiniowano zakładki.

4 1 Wprowadzenie Grafika komputerowa to dziedzina zajmująca się tworzeniem grafiki za pomocą komputera. Istnieje ona od czasów pierwszych komputerów zdolnych przedstawiać obrazy. Od lat używana jest przez artystów jako ich kolejne narzędzie, obok pędzla i ołówka. Grafikę komputerową wykorzystuje się m.in. do wzbogacania filmów o efekty specjalne, tworzenia gier komputerowych, a także obrazowania medycznego. Grafika komputerowa może być dwuwymiarowa lub trójwymiarowa. Pojęcie trójwymiarowości w grafice komputerowej można interpretować na kilka sposobów. W tej pracy będzie oznaczało przedstawianie trójwymiarowych obiektów na dwuwymiarowej płaszczyźnie ekranu za pomocą odpowiednich rzutowań perspektywicznych. Gałęzią grafiki komputerowej, na której skupia się niniejsza praca, jest grafika czasu rzeczywistego. Polega ona na tym, że obrazy muszą być wygenerowane w czasie rzeczywistym, co oznacza, że muszą zostać stworzone w skończonym, krótkim czasie. W praktyce jest to czas rzędu kilkudziesięciu milisekund. Właśnie dlatego jednym z kluczowych parametrów opisujących system tworzący grafikę jest liczba klatek generowanych na sekundę (FPS ang. frames per second). W grafice czasu rzeczywistego jakość grafiki nie jest najważniejsza i może zostać zdegradowana w celu zwiększenia liczby klatek generowanych na sekundę. W tradycyjnej grafice komputerowej ilość czasu, który można poświęcić na wygenerowanie obrazu jest teoretycznie nieograniczona, dlatego też można stworzyć obrazy w dowolnie wysokiej jakości. W grafice czasu rzeczywistego ograniczenie narzucone na czas generowania jest bardzo ostre i dlatego grafika ta stanowi duże wyzwanie dla programisty [1]. Grafika czasu rzeczywistego znajduje zastosowanie tam, gdzie wymagana jest interakcja z użytkownikiem. Zdarzają się jednak wyjątki, takie jak animacje generowane w czasie rzeczywistym, pokazujące możliwości sprzętu oraz programistów. Systemy szkoleniowe pilotów cywilnych, jak i wojskowych, używają systemów grafiki czasu rzeczywistego dla symulatorów lotniczych. Programy dla architektów pozwalają na wizualizację m.in. budynków i jachtów, stwarzając możliwość odbycia spaceru przez klienta, np. po swoim przyszłym mieszkaniu. Jednak największą dziedziną wykorzystującą grafikę czasu rzeczywistego są gry komputerowe. To właśnie dzięki nim przemysł sprzętu komputerowego rozwija się tak szybko. Coraz większe wymagania gier powodują bardzo dynamiczny rozwój sprzętu. Gry komputerowe wyznaczają kierunek rozwoju sprzętu komputerowego i najlepiej pokazują jego możliwości. Gry dążą do fotorealizmu i bardzo szybko zbliżają się do poziomu obrazu znanego z filmów. Gry komputerowe tworzone są w oparciu o tzw. silnik graficzny. W przypadku gier trójwymiarowych rola silnika graficznego w dzisiejszych produkcjach nie ogranicza się tylko do generowania grafiki. Silnik graficzny pełni kluczową rolę w całym programie. To od możliwości silnika zależy, jakie gry można na nim zrobić. Niestety, pojęcia silnika graficznego i silnika gry są coraz częściej mylone, a najpopularniejsze staje się używanie samego określenia silnik, bez podawania jakiego jest on rodzaju. Jest to silnik do wszystkiego. Poprawną nazwą będzie w tym wypadku silnik gry, natomiast silnik graficzny jest raczej modułem graficznym silnika gry. Silnik gry integruje wszystkie ~ 4 ~

5 1.1 Przegląd istniejących rozwiązań elementy, takie jak moduł graficzny, dźwiękowy, silnik fizyki, interfejs, mechanizmy wejścia-wyjścia, komunikację sieciową oraz wiele innych, w jedną całość. Silnik stanowi podstawę, na której buduje się grę komputerową. Wprowadza on wyższy poziom abstrakcji dla projektanta gry, ukrywając szczegóły implementacyjne poszczególnych elementów. Udostępnia tak abstrakcyjne byty jak: scena, obiekt, kamera, światło, tekstura. Programista gry nie musi zastanawiać się nad implementacją tych elementów. Dzięki takiemu rozdzieleniu możliwe jest stworzenie gry na bazie silnika, którą potem można przenieść na inne platformy, zmieniając tylko implementację silnika. Silnik stanowi również warstwę między grą a systemem operacyjnym. 1.1 Przegląd istniejących rozwiązań Na temat grafiki komputerowej czasu rzeczywistego powstało bardzo wiele książek, artykułów i stron internetowych. Można na nich znaleźć kursy dla początkujących, chcących programować grafikę komputerową, jak również informacje dla osób na każdym poziomie zaawansowania. Pierwszym zagadnieniem jest budowa samego silnika. Na temat jego tworzenia można znaleźć wzmianki w wielu książkach, jednak skupiających się głównie na tym zagadnieniu jest niewiele. Warto wymienić [2], [3] i [4]. Znaleźć można również wiele artykułów na stronach internetowych, niektóre z nich zawierają sporo użytecznych informacji, np. [5] i [6]. Kolejnym zagadnieniem jest przeanalizowanie dostępnych bibliotek graficznych. Dzisiaj w praktyce liczą się tylko dwie technologie: OpenGL oraz DirectX. Wybór między nimi jest trudny. Obydwie udostępniają podobne możliwości, jednak na niekorzyść technologii DirectX przemawia fakt, że wszystkie nowe funkcje dostępne od 10. wersji biblioteki dostępne są tylko na systemach Windows Vista i Seven. OpenGL natomiast udostępnia wszystkie swoje możliwości niemalże na każdym systemie operacyjnym. OpenGL dostępny jest na wszystkie wersje systemu Windows, a także na systemach Linux oraz Mac OS [7]. Przy tworzeniu silnika gry warto przyjrzeć się profesjonalnym silnikom i ich możliwościom. Bardzo wartościowe wskazówki co do tworzenia silnika dostarczają kody źródłowe trzech części gry Quake, udostępnione publicznie [8]. Silnik Unreal Engine 3.0 jest jednym z najlepszych silników dostępnych na rynku. Warto wzorować się na możliwościach i elastyczności jakie oferuje [9]. Następnie warto wymienić kolejne wersje silnika ID Tech o numerach 4 i 5, o których można się dowiedzieć od Johna Carmacka. Zamieszcza on swoje wypowiedzi odnośnie problemów podczas pisania silników na wielu stronach internetowych [10, 11]. Kolejnym silnikiem wartym uwagi jest CryENGINE, aktualnie w wersji 3 [12]. Warto zwrócić również uwagę na silnik Unigine [13]. Jego autor tworzył małe programy z dziedziny grafiki trójwymiarowej i zamieszczał je na swojej stronie. Nabierając doświadczenia zaczął pisać swój silnik, aż w końcu postanowił rozwinąć go do postaci komercyjnej. Warto zatem przejrzeć programy wcześniej udostępniane przez tego autora. ~ 5 ~

6 1.1 Przegląd istniejących rozwiązań Podział przestrzeni Podział przestrzeni i zarządzanie geometrią jest bardzo ważną składową silnika. Od mechanizmu zarządzania geometrią wymaga się, by można było dodawać do niego obiekty, usuwać je, a także zmieniać ich położenie i wielkość. Mechanizm ten odpowiada również za to, które obiekty są widoczne przez kamerę lub światło. Najpopularniejszymi metodami dzielenia przestrzeni są m.in. drzewa BSP (ang. binary space partition), drzewa ósemkowe (ang. octree) i portale. Drzewa BSP oraz ósemkowe dzielą przestrzeń na komórki (sektory), do których przypisują obiekty. Zastosowanie portali polega natomiast na podzieleniu sceny na sektory, a między nimi umieszczenie portali przejść miedzy sektorami. Drzewa BSP opisane są w wielu źródłach, m.in. [14], [15] i [16]. Opis portali można znaleźć w [17] oraz [18]. Drzewa ósemkowe opisane są w [19]. Metody używające drzew BSP i ósemkowych dobrze sprawdzają się dla otwartych przestrzeni (ang. out-door). Natomiast portale najlepiej spisują się w przestrzeniach zamkniętych (ang. in-door), ponieważ mogą być z powodzeniem umieszczone np. w drzwiach pomiędzy pomieszczeniami (sektorami). Jednak drzewa BSP i ósemkowe również sprawdzają się w przestrzeniach zamkniętych. Możliwe jest także łączenie metod. Np. dla zamkniętych przestrzeni, w których niektóre pomieszczenia (sektory) mają duże rozmiary, można zastosować portale dzielące pomieszczenia, a także drzewa ósemkowe dla podziału dużych pomieszczeń. Przeważnie sceny obsługiwane przez silnik są typu zamkniętego lub otwartego. Wtedy wybór mechanizmu podziału przestrzeni jest łatwy. Jednak czasami sceny są otwarte, lecz zawierają w sobie przestrzenie zamknięte, np. planszą gry jest wyspa, na której znajduje się wejście do podziemnej bazy. Wtedy przestrzenią otwartą jest teren wyspy, a przestrzenią zamkniętą podziemna baza. Elementem łączącym te dwie przestrzenie mogą być drzwi. Najlepszym rozwiązaniem jest wtedy łączenie metod, np. do przestrzeni otwartej drzewa ósemkowego, a dla przestrzeni zamkniętej systemu sektorów i łączących je portali. Drzwi do bazy mogą być zatem portalem, który łączy przestrzeń otwartą z przestrzenią zamkniętą. Jednak podział sceny na przestrzeń otwartą i zamkniętą musi być wykonany przez projektanta poziomu, ponieważ automatyczne wykrycie gdzie przestrzeń jest zamknięta, a gdzie otwarta jest wyjątkowo trudnym zadaniem. Największym problemem przy łączeniu mechanizmu portali z np. drzewem ósemkowym jest określenie czy kamera znajduje się w przestrzeni zamkniętej czy otwartej. Jeśli jednak założymy, że przestrzeń zamknięta będzie opisana przez projektanta poziomu za pomocą w miarę prostej bryły, sprawdzenie, iż znajdujemy się w przestrzeni zamkniętej będzie wymagało tylko określenia czy jesteśmy w środku bryły. Jeśli tak, to widoczne obiekty określamy za pomocą mechanizmu portali, a jeśli nie to za pomocą drzewa ósemkowego. Jeśli natomiast widoczny jest portal łączący obie przestrzenie, to w zależności, w której przestrzeni jesteśmy, dodajemy obiekty, które są widoczne przez portal z drugiej przestrzeni. ~ 6 ~

7 1.1 Przegląd istniejących rozwiązań Fizyka Silnik fizyki wzbogaca silnik gry o dodatkowe cechy nadające realności rozgrywce. Dzięki niemu możliwe jest symulowane zachowania obiektów, które jest wystarczająco zgodne z zachowaniem obiektów w prawdziwym świecie. Umożliwia także tworzenie gier opartych na fizyce, w których istotnym elementem jest właśnie zachowanie obiektów lub cieczy. Można na przykład stworzyć prostą grę polegającą na rzucaniu przedmiotów do celu, graniu w bilard lub kręgle albo balansowaniu na linie. Silnik fizyki odpowiada za symulowanie zachowania obiektów. Należy dostarczyć mu opis sceny, w tym obiektów i materiałów z jakich są wykonane, a także parametrów symulacji, takich jak siła i kierunek grawitacji czy odcinek czasu jaki ma być symulowany. Najpopularniejszymi silnikami używanymi w grach są Havok Physics [20], który jest jednak silnikiem płatnym, oraz NVidia PhysX [21]. Używane są także mniej profesjonalne silniki, takie jak Newton Dynamics [22], które również oferują duże możliwości. Wiele silników gier zawiera własne implementacje silnika fizyki. Pozwala to na dowolną kontrolę nad kodem silnika, jednak wymaga opracowania takiego silnika, co związane jest z dużym nakładem pracy Portale Portale opisane w niniejszej pracy nie są związane z portalami wykorzystywanymi do podziału przestrzeni. Zbieżność nazw może być myląca, jednak w niniejszej pracy nie będziemy się zajmować portalami w podziale przestrzeni. Portale, opisane w niniejszej pracy, są to teleporty, przez które mogą się przedostawać obiekty oraz światło. Portale łączą się w pary, tzn. każdy portal ma odpowiadający mu drugi portal. Często portal, o którym mówimy, będziemy nazywać portalem wejściowym, a sparowany z nim portal wyjściowym. Patrząc przez portal widzimy w nim to, co znajduje się za odpowiadającym mu portalem wyjściowym. Portal jest płaski i ma ograniczoną powierzchnię, np. prostokąta. Nie istnieje praktycznie żadna literatura opisująca portale, przez które może przedostawać się światło oraz obiekty symulowane przez silnik fizyki, i które to portale same mogą się poruszać. Portale takie pojawiły się w grze Prey filmy 3D Realms, jednak nie umożliwiały przemieszczania obiektów przez portale. Dopiero gra Portal firmy Valve pokazała potencjał portali. Gracze mogli przemieszczać obiekty pomiędzy portalami. Gra zawierała zagadki logiczne, do rozwiązania których trzeba było wykorzystać portale, np. mając przed sobą mur nie do przeskoczenia, można było stworzyć jeden portal w podłodze, a drugi na suficie za przeszkodą i wskoczyć w portal na podłodze, wyskakując w ten sposób za przeszkodą. Jednym ze źródeł informacji o portalach są komentarze twórców gry Portal, zawarte w samej grze. Pewne wypowiedzi twórców na temat technologii stojących za portalami można znaleźć w [23]. ~ 7 ~

8 1.2 Cel i zakres pracy 1.2 Cel i zakres pracy Celem pracy jest rozszerzenie silnika grafiki trójwymiarowej, opracowanego w ramach pracy inżynierskiej, o nowe elementy, takie jak: integracja z silnikiem fizyki NVidia PhysX, mechanizm zarządzania geometrią sceny, system portali (w rozumieniu teleportów wspomnianych w pkt ), efekty cząsteczkowe, mechanizm renderowania map kubicznych. Kolejnym celem pracy jest stworzenie bazy wielu prostych efektów, a także kilku bardziej złożonych efektów, takich jak: głębia ostrości, rozmycie ruchu, specjalna mgła oraz mgła wolumetryczna. Dodatkowym celem jest stworzenie bazy materiałów, takich jak: różne rodzaje metalu, drewno, szkło, kamień. Ponadto celem jest przystosowanie silnika do pracy w systemie Linux. Ostatnim celem jest stworzenie przykładowej gry opartej na rozbudowanym silniku. Praca ma charakter integracyjny z elementami innowacyjności. Opracowany silnik składa się z wielu małych elementów, które należy zintegrować w jedną spójną całość. Innowacyjnymi elementami są: system zarządzania efektami, bardziej złożone efekty, takie jak głębia ostrości, której w ramach niniejszej pracy poświęcono najwięcej czasu, a także system portali, który jest w całości autorski. ~ 8 ~

9 2 Architektura 2.1 Założenia sprzętowe Architektura silnika została zaprojektowana na komputer klasy PC wyposażony w kartę graficzną zgodną z Shader Model 3. Mogą to być m.in. karty NVidia GeForce począwszy od serii 6xxx. Niektóre funkcje silnika, takie jak bardziej złożone efekty, będą wymagały jednak bardziej nowoczesnych kart, obsługujących Shader Model 4, np. karty GeForce serii 8xxx. Silnik będzie starał się wykorzystać możliwości komputera, na którym zostanie uruchomiony. Pozostałe komponenty komputera nie odgrywają tak istotnej roli jak karta graficzna. Dlatego też, do poprawnego działania wystarczy procesor odpowiadający mocą procesorowi AMD Athlon , a także przynajmniej 1 GB pamięci RAM. 2.2 Silnik Opracowana architektura silnika składa się wielu elementów, są to m.in.: interpreter, konsola, zbiór funkcji matematycznych, warstwa obsługująca system operacyjny, system obsługi shaderów, mechanizm przechowywania scen, mechanizm obsługi materiałów, mechanizm wczytywania tekstur, system animacji, system zarządzania sceną i pamięcią, mechanizm sterowania światłami i cieniami, mechanizm wczytywania scen z plików, mechanizm renderujący, mechanizm zarządzania buforami, silnik przetwarzania efektów, silnik fizyki, mechanizm efektów cząsteczkowych, system portali. Schemat budowy silnika przedstawiono na rysunku 1. Przedstawia on relacje między poszczególnymi elementami. Każde połączenie między elementami oznacza, że dany element komunikuje się z drugim elementem lub korzysta z jego mechanizmów. Ponad wszystkimi elementami znajduje się zarządca. Może się on komunikować ze wszystkimi elementami składającymi się na silnik. ~ 9 ~

10 2.2 Silnik Rys. 1 Schemat budowy silnika. Dla zwiększenia czytelności nie narysowano wszystkich połączeń do parametrów, jednak element ten łączy się ze wszystkimi innymi. Parametry silnika są to zmienne, które można umieścić w dowolnym elemencie silnika, dzięki czemu można je kontrolować za pomocą interfejsu użytkownika oraz interpretera. Parametry te są dostępne z każdego elementu silnika. Mechanizm zarządzania sceną odpowiada za przechowywanie sceny, w której znajdują się obiekty, światła i kamery. Jego zadaniem jest zarządzanie obiektami, używając mechanizmów podziału przestrzeni. Odpowiada również za zarządzanie pamięcią, potrzebną do przechowywania obiektów. Renderer korzysta z mechanizmu zarządzania sceną w celu uzyskania danych o obiektach, które należy wyrenderować. Mechanizm zarządzania sceną komunikuje się z silnikiem fizyki w celu przekazania kontroli nad obiektami do silnika fizyki, a następnie na odczytaniu obliczonego położenia obiektów z silnika fizyki. Pracuje on równolegle z innymi elementami silnika. Mechanizm zarządzania buforami używany jest przez efekty, które uzyskują od niego bufory, do których zlecają renderowanie sceny rendererowi. Renderer korzysta z mechanizmu zarządzania materiałami w celu uzyskania informacji o materiałach, których należy użyć do wyrenderowania poszczególnych obiektów. ~ 10 ~

11 2.3 Narzędzia System obsługi shaderów używany jest przez renderer, efekty oraz materiały w celu wykorzystania shaderów do renderowania. System ten udostępnia mechanizmy do kompilowania shaderów, przekazywania do nich parametrów i używania shaderów. Silnik efektów zarządza efektami i wykonuje je w odpowiedniej kolejności. System portali współpracuje z mechanizmem zarządzania sceną oraz silnikiem fizyki w celu symulacji zachowania obiektów przechodzących przez portale. Renderer współpracuje z systemem portali w celu renderowania widoków prze portale. System efektów cząsteczkowych opiera się na silniku fizyki do symulowania zachowania cząsteczek. Może dynamicznie zarządzać światłami oraz potrzebuje dostępu do danych obiektów. Renderer wykorzystywany jest do renderowania cząsteczek, natomiast efekty mogą zarządzać sposobem ich renderowania. Konsola oraz graficzny interfejs użytkownika mają kontrolę nad parametrami silnika. Dodatkowo interfejs ma dostęp do mechanizmu zarządzania sceną, ponieważ umożliwia manipulację obiektami znajdującymi się na ekranie. Nadrzędną kontrolę nad działaniem silnika sprawuje interpreter, który interpretuje skrypt sterujący zachowaniem silnika. Poszczególne elementy nie są sztywno oddzielone od siebie, wiele z nich jest ze sobą w bardzo ścisłej zależności. Dla przykładu, system portali jest praktycznie w całości zintegrowany z mechanizmem zarządzania sceną oraz rendererem. Diagram przebiegu wykonania dla renderowania poszczególnej klatki przedstawiono na rysunku 2. Pokazuje on jak długa jest droga od komendy interpretera go() do wyrenderowanej klatki. Wszystkie elementy muszą ze sobą współdziałać. Diagram nie zawiera wszystkich wywołań jakie zachodzą podczas renderowania pojedynczej klatki, jednak dobrze oddaje ogólne zależności między elementami oraz sekwencję przebiegu. Większość z elementów silnika została opisana w pracy inżynierskiej. Całkowicie nowymi elementami są silnik fizyki oraz system portali. Elementy wcześniej opracowane zostały usprawnione, a także przebudowane. Gruntownie rozbudowany został mechanizm zarządzania sceną, do którego zaimplementowano luźne drzewa ósemkowe. Integracja z silnikiem fizyki oraz implementacja systemu portali wymagały wielu zmian w elementach takich jak renderer, mechanizm zarządzania sceną czy efekt renderujący. W celu przystosowania silnika do działania w systemach Linux oraz Windows stworzona została warstwa pośrednicząca między właściwym silnikiem a systemem operacyjnym. Warstwa ta została napisana w dwóch wersjach, oddzielnie dla każdego systemu. Odpowiada ona za czynności takie jak: inicjowanie aplikacji, tworzenie okna, obsługa zdarzeń systemowych oraz odczytywanie wejścia, takiego jak wciśnięte klawisze oraz ruch myszki. 2.3 Narzędzia Silnik graficzny wymaga dodatkowych narzędzi, z których najważniejszy jest edytor modeli, scen i animacji. W produkcji gier komputerowych wykorzystywany jest on do tworzenia modeli występujących w świecie gry, plansz, animacji postaci itp. Wiele silników ma opracowane własne edytory, jednak stworzenie ich pochłania bardzo ~ 11 ~

12 2.3 Narzędzia Rys. 2 Diagram sekwencji dla wyrenderowania pojedynczej klatki. dużo czasu produkcji. Dlatego też postanowiono użyć dostępnego programu do edycji scen trójwymiarowych 3D Studio Max. Aby możliwe było przeniesienie stworzonych scen do opracowanego silnika wymagane było stworzenie wtyczki do programu 3D Studio Max, która pozwalałaby na eksport scen. Opracowana wtyczka, powstała na bazie [24], pobiera dane o budowie sceny oraz materiałach i zapisuje je w prostym binarnym formacie, który jest odczytywany przez silnik. Eksporter pobiera informacje o obiektach, światłach, kamerach oraz kościach w scenie, a następnie je przetwarza. Dla każdego obiektu zapisuje do pliku dane o współrzędnych wierzchołków, koordynatach tekstur, a także wylicza współrzędne przestrzeni stycznych wszystkich wierzchołków oraz dla każdego trójkąta wyznacza indeksy sąsiadujących z nim trójkątów i zapisuje je do pliku. Dodatkowo tworzy wskaźniki na wierzchołki składające się na ciągi trójkątów za pomocą biblioteki firmy NVidia NvTriStrip i zapisuje je do pliku. Obiekty będące pod kontrolą systemu kości zawierają ~ 12 ~

13 2.3 Narzędzia dodatkowe dane zapisywane do pliku, określające, które kości kontrolują które wierzchołki. Dla animowanych obiektów, świateł, kamer oraz kości tworzona jest lista kluczy animacji i zapisywana do pliku. Obiekty mają dodatkowo różne właściwości, które są zapisywane, takie jak rzucanie cieni, a także ciąg znaków, w którym mogą być zapisane dowolne informacje. Pole to jest używane do zapisywania nazwy materiału, który ma być nałożony na dany obiekt, a także parametry fizyczne dla silnika PhysX, takie jak np. kształt i masa. Dla świateł zapisuje się dane o położeniu, typie oraz promieniu określającemu zakres światła, a także zmienną określającą czy światło rzuca cienie. Dla kamer zapisywana jest informacja o położeniu kamery oraz jej celu, czyli punktu, w kierunku którego kamera jest skierowana, a także o kącie patrzenia. Następnie zapisywane są dane materiałów, takie jak ścieżki do plików z teksturami. Kolejnym użytym narzędziem jest edytor graficzny. Obrazy odczytywane przez silnik w formatach JPG, BMP oraz TGA można tworzyć w dowolnym programie, jednak jednym z najlepszych formatów dla grafiki trójwymiarowej jest format DDS [25]. Opracowany został przez firmę Microsoft jako format zapisu grafiki rastrowej dla DirectX, może być jednak używany w silniku graficznym opartym na OpenGL. Format ten umożliwia zapisanie skompresowanych tekstur w formatach obsługiwanych sprzętowo przez karty graficzne. Dodatkowo można w nim zapisać mip-mapy dla tekstury. Do zapisu plików w tym formacie został użyty program NVidia Texture Tools 2 [26]. Do odczytu plików DDS użyto biblioteki nv_dds firmy NVidia. Do tworzenia map wektorów normalnych użyto programu NVidia Normal Map Filter. ~ 13 ~

14 3 Implementacja 3.1 Drzewo ósemkowe W opracowanym silniku zastosowano luźne drzewo ósemkowe (ang. loose octree) [27], ponieważ zapewniają dobrą wydajność zarówno dla przestrzeni otwartych i zamkniętych. Drzewa takie charakteryzują się lepszą wydajnością niż zwykłe drzewa ósemkowe, ponieważ lepiej przypisują do swoich komórek małe obiekty. Działanie drzewa ósemkowego zostanie przedstawione za pomocą drzewa czwórkowego, gdyż schemat ich działania jest taki sam, z tą różnicą, że drzewo czwórkowe operuje na płaszczyźnie, a drzewo ósemkowe na przestrzeni trójwymiarowej. Przykładowe drzewo czwórkowe ilustruje rysunek 3. Rys. 3 Drzewo czwórkowe. Dla małych obiektów drzewo dzieli się na mały komórki, a duże obiekty umieszcza w większych komórkach. Korzeniem drzewa jest kwadrat o wielkości takiej, aby objął wszystkie obiekty. Przestrzeń jest rekurencyjnie dzielona na kwadraty w taki sposób, że począwszy od korzenia, każdy kwadrat może dzielić się na cztery mniejsze kwadraty, wpisane w rodzica. Mniejsze kwadraty mają długość boku równą połowie długości boku rodzica. Każdy kwadrat (w przypadku drzewa ósemkowego sześcian) jest węzłem. W opracowanej implementacji węzeł opisany jest klasą COctreeNode. ~ 14 ~

15 3.1 Drzewo ósemkowe class COctreeNode { public: CVektor center; float length; COctreeNode *children[2][2][2]; COctreeNode *parent; vector<cobiekt*> objects; vector<cobiekt*> splitableobjects; vector<cswiatlo*> lights; void MakeChildren(); }; COctreeNode() {...}; ~COctreeNode(){...}; Aby stworzyć drzewo należy najpierw określić maksymalną liczba obiektów, które mogą znajdować się w jednym kwadracie. Następnie należy kolejno dodawać wszystkie obiekty do drzewa, dodając je do korzenia. Procedurę dodawania do węzła przedstawiono na następującym listingu: Procedura DodajObiektDoWęzła(Węzeł, Obiekt) Jeśli Węzeł.LiczbaObiektów+1 > MAKSYMALNA_LICZBA_OBIEKTÓW Jeśli istnieją Węzeł.Podwęzły Jeśli Obiekt zawiera się w całości w którymś Podwęźle DodajObiektDoWęzła(Podwęzel) W przeciwnym przypadku Węzeł.Obiekty.Dodaj(Obiekt) W przeciwnym przypadku PodzielWęzeł(Węzeł) DodajObiektDoWęzła(Węzeł) W przeciwnym przypadku Węzeł.Obiekty.Dodaj(Obiekt) Obiekty dodawane są do najmniejszych kwadratów, w których można je pomieścić. Jeśli jednak obiekt, choćby był bardzo mały, będzie znajdował się np. na środku kwadratu korzenia, nie będzie się on w całości mieścił w żadnym dziecku korzenia i zostanie przypisany do korzenia. Jest to największa wada zwykłych drzew czwórkowych (i ósemkowych), którą rozwiązują właśnie luźne drzewa. Luźne drzewa mają rozluźnione granice kwadratów, tzn. nie tylko obiekty, które zawierają się w całości w danym kwadracie mogą być do niego przypisane, ale mogą być przypisane także obiekty, które znajdują się w rozluźnionych powiększonych, granicach. Opracowana metoda używa dwa razy większych granic niż rozmiar komórki. Przynależność obiektu do rozluźnionej komórki ilustruje rysunek 4. W przypadku rozluźnionych drzew obiekt może mieścić się w luźnych granicach więcej niż jednego kwadratu, zostanie wtedy przypisany do najbliższego z nich. ~ 15 ~

16 3.1 Drzewo ósemkowe Rys. 4 Biały kwadrat oznacza komórkę, szare pole wokół niego oznacza jego rozluźnione granice. Obiekty we wszystkich trzech przypadkach należą do komórki. Na obrazie po prawej stronie mały czerwony obiekt należy do komórki zaznaczonej na biało, ponieważ na lewo od tej komórki znajduje się o wiele większa komórka, więc lepiej jest przydzielić obiekt do małej komórki. Algorytm dodawania obiektów będzie wyglądał następująco: Procedura DodajObiektDoWęzła(Węzeł, Obiekt) Jeśli Węzeł.LiczbaObiektów+1 > MAKSYMALNA_LICZBA_OBIEKTÓW Jeśli istnieją Węzeł.Podwęzły Wybierz najbliższy Podwęzeł, w którego luźnych granicach mieści się Obiekt Jeśli brak takiego Podwęzła Węzeł.Obiekty.Dodaj(Obiekt) W przeciwnym przypadku DodajObiektDoWęzła(Podwęzeł) W przeciwnym przypadku PodzielWęzeł(Węzeł) DodajObiektDoWęzła(Węzeł) W przeciwnym przypadku Węzeł.Obiekty.Dodaj(Obiekt) Usuwanie obiektów z drzewa przebiega według następującego algorytmu: Procedura UsuńObiekt(Węzeł, Obiekt) Węzeł.Obiekty.Usuń(Obiekt) Jeśli Węzeł!= Korzeń Połącz(Węzeł) Pomocnicza procedura łącząca węzły: Procedura Połącz(Węzeł) LiczbaObiektów <- 0 Dla Każdego Podwęzła w Wężle Jeśli istnieją Podwęzeł.Podwęzły Przerwij procedurę LiczbaObiektów += Podwęzeł.LiczbaObiektów Jeśli LiczbaObiektów = 0 Usuń wszystkie Węzeł.Podwęzły LiczbaObiektów += Węzeł.LiczbaObiektów Jeśli LiczbaObiektów < MAKSYMALNA_LICZBA_OBIEKTÓW Jeśli istnieją Węzeł.Podwęzły ~ 16 ~

17 3.1 Drzewo ósemkowe Dla Każdego Podwęzła w Wężle Węzeł.Obiekty.Dodaj(Podwęzeł.Obiekty) Usuń Podwęzeł Jeśli Węzeł!= Korzeń Połącz(Węzeł.Rodzic) Pobieranie obiektów widzianych przez kamerę polega na sprawdzeniu, które komórki znajdują się w całości lub części w bryle widzenia, a następnie zwróceniu obiektów przypisanych do tych komórek. Jeśli bryła widzenia kamery nie obejmuje danej komórki to nie będzie wykonane sprawdzanie, czy któreś z dzieci tej komórki jest widziane. Dzięki temu możliwe jest szybkie eliminowanie dużej liczby obiektów, które nie są widziane przez kamerę. Ta sama procedura jest użyta do wyznaczania oświetlonych obiektów. Jeśli światło jest punktowe to jego bryłą jest kula o promieniu takim, jaki jest zasięg światła. Jeśli jest to światło reflektorowe (ang. spotlight), to bryłą jest stożek. Procedura wyznaczania widocznych obiektów opisana jest następująco: Procedura PobierzWidoczneObiekty(Węzeł, Bryła, Całość) Obiekty <- Puste Jeśli Całość = Prawda Obiekty.Dodaj(Węzeł.Obiekty) Dla każdego Podwęzła Obiekty.Dodaj(PobierzWidoczneObiekty(Podwęzeł, Bryła, Prawda)) W przeciwnym przypadku Jeśli Węzeł w całości w Bryle Obiekty.Dodaj(Węzeł.Obiekty) Dla każdego Podwęzła Obiekty.Dodaj(PobierzWidoczneObiekty(Podwęzeł, Bryła, Prawda)) Jeśli Węzeł częściowo w Bryle Obiekty.Dodaj(Węzeł.Obiekty) Dla każdego Podwęzła Obiekty.Dodaj(PobierzWidoczneObiekty(Podwęzeł, Bryła, Fałsz)) Zwróć Obiekty Użycie parametru Całość pozwala na pominięcie sprawdzenia każdego z podwęzłów i pobranie z nich wszystkich obiektów. Właśnie ten zabieg odpowiada za wysoką wydajność tych drzew. Implementacja luźnego drzewa ósemkowego znajduje się w plikach octree.h oraz octree.cpp. Drzewo opisane jest klasą COctree, której listing wygląda następująco: class COctree { public: CVektor minbound, maxbound; float len; int maxobjectspernode; COctreeNode *root; void MakeOctree(CScene3D *scene, int maxobjectspernode=10); void AddObject(CObiekt *ob); void AddLight(CSwiatlo *sw); ~ 17 ~

18 3.2 Silnik fizyki NVidia PhysX }; void DeleteObject(CObiekt *ob); void JoinNodes(COctreeNode *node); void UpdateObject(CObiekt *ob); void GetObjectsFrustum(CFrustum *frustum, vector<cobiekt*> &visibleobjects, vector<coctreenode*> &visiblenotemptynodes); void GetObjectsLight(CSwiatlo *sw, vector<cobiekt*> &visibleobjects, vector<coctreenode*> &visiblenotemptynodes); W opracowanej implementacji pobieranie obiektów będących w bryle widzenia wykonuje metoda GetObjectsFrustum, natomiast pobieranie obiektów będących w bryle światła metoda GetObjectsLight. Wygląd przykładowego drzewa ósemkowego przedstawia poniższy rysunek. Rys. 5 Drzewo ósemkowe w trójwymiarze. Żółte linie przedstawiają linie drzewa. 3.2 Silnik fizyki NVidia PhysX Do integracji z opracowywanym silnikiem gry został wybrany silnik NVidia PhysX, ponieważ staje się on bardzo popularnym silnikiem fizyki, używanym w coraz większej liczbie gier. Jego wykonywalna wersja, a także zestaw narzędzi SDK (ang. source development kit) są darmowe. Umożliwia on symulowanie zachowania ciał stałych, cieczy, materiałów takich jak ubrania, lin, silników obrotowych oraz wielu innych. W tej pracy zostały wykorzystane tylko podstawowe możliwości tego silnika fizyki. Silnik PhysX opisuje świat za pomocą sceny oraz obiektów aktorów, w niej występujących. Obiekty muszą mieć opisany kształt oraz właściwości. Kształt obiektów może być pudełkiem (ang. box), kulą (ang. sphere), obiektem wypukłym (ang. convex) lub siatką trójkątów, zwaną również zupą trójkątów. Kształt obiektów może być opisany za pomocą kilku podstawowych kształtów. Ze względów wydajnościowych najlepiej jest, gdy obiekty będą opisane za pomocą najprostszych kształtów, czyli pudełek oraz kul. W silniku ~ 18 ~

19 3.2 Silnik fizyki NVidia PhysX NVidia PhysX nie są obsługiwane kolizje między kształtami typu siatka trójkątów, ponieważ wymagają zbyt dużego nakładu obliczeń. Obiekty mogą być statyczne, dynamiczne oraz kinematyczne. Statyczne obiekty raz stworzone nie poruszają się, ani w żaden sposób nie zmieniają, aż do końca symulacji. Nadają się doskonale do opisu stałych części planszy, takich jak podłoga, ściany i wszystkie elementy, które nie mogą być przesuwane. Obiekty dynamiczne są kontrolowane przez silnik fizyki, co oznacza, że oblicza on ich położenie. Obiekty kinematyczne nie są poruszane przez silnik fizyki, można je przesuwać tylko ręcznie, tzn. wywołując odpowiednie polecenia. Obiekty te nadają się jako obiekty, które kontroluje gracz, takie jak np. postać gracza, która ma oddziaływać z innymi obiektami dynamicznymi, jednak której ruchy są odgórnie kontrolowane. Symulacja fizyki odbywa się w krokach. Do silnika PhysX podaje się odstęp czasu, który ma zostać zasymulowany. Istotnym elementem jest również liczba wewnętrznych iteracji silnika fizyki (ang. solver) dla każdego obiektu. Im większa liczba iteracji, tym silnik będzie symulował mniejsze przedziały czasowe dla każdego obiektu i dzięki temu wzrośnie stabilność symulacji. Stabilność symulacji jest kluczową kwestią przy symulacji zachowań fizycznych. Przy braku stabilności obiekty zaczynają poruszać się nienaturalnie, skaczą, przemieszczają się w losowe miejsca lub osiągają w jednej chwili ogromne prędkości, co jest zwykle nie do przyjęcia. Kiedy obiekt z jakiegoś powodu stanie się niestabilny, najczęściej drga coraz mocniej, aż w końcu wylatuje ze sceny z wielką prędkością. W opracowanym silniku obiekty opisane są za pomocą klasy CObiekt, znajdującej się w plikach obiekt.h oraz obiekt.cpp. Aby obiekty brały udział w symulacji do klasy tej zostały dodane następujące parametry i metody: int PhysXControlled; NxActor *PhysX_Actor; int PhysX_Movable; float PhysX_Mass; // 0 - box, 1 - sphere, 2 - convex, 3 - triangles, 4 - cylinder int PhysX_Shape; int PhysX_Static; string PhysX_Proxy_Name; bool PhysX_IsProxy; NxMat34 PhysX_Mat34; CMatrix PhysX_Matrix; void SetMovable(bool movable); void ReleaseShapes(); Zmienna PhysXControlled mówi czy obiekt bierze udział w symulacji. Obiekt PhysX_Actor jest potrzebny dla silnika PhysX, który w nim przetrzymuje wszystkie dane opisujące obiekt fizyczny. Zmienna PhysX_Movable mówi czy obiekt może się poruszać, tzn. czy jest dynamiczny czy kinematyczny. ~ 19 ~

20 3.2 Silnik fizyki NVidia PhysX Zmienna PhysX_Shape określa jaki obiekt ma kształt. Zmienna PhysX_Static mówi, czy obiekt jest statyczny. Aby stworzyć scenę w silniku PhysX należy najpierw stworzyć obiekt PhysicsSDK. Tworzy go procedura NxCreatePhysicsSDK. Kiedy obiekt taki jest utworzony, można przystąpić do tworzenia sceny. Scena opisana jest obiektem typu NxScene. Scenę tworzy się metodą createscene obiektu PhysicsSDK. Skrócony kod tworzenia sceny przedstawiony jest następującym listingu: NxPhysicsSDKDesc desc; NxSDKCreateError errorcode = NXCE_NO_ERROR; PhysicsSDK = NxCreatePhysicsSDK(NX_PHYSICS_SDK_VERSION, NULL, new ErrorStream(), desc, &errorcode); NxSceneDesc scenedesc; scenedesc.simtype = NX_SIMULATION_SW; scenedesc.gravity = NxVec3(0, -9.81, 0); PhysX_Scene = PhysicsSDK->createScene(sceneDesc); Gdy scena jest stworzona można przystąpić do tworzenia i dodawania obiektów. Stworzenie przykładowego pudełka prezentuje następujący listing: NxBodyDesc bodydesc; bodydesc.angulardamping = 0.5f; NxActorDesc actordesc; NxBoxShapeDesc boxdesc; boxdesc.dimensions = NxVec3(10, 40, 10); boxdesc.localpose.t = localpose; actordesc.shapes.pushback(&boxdesc); actordesc.body = &bodydesc; actordesc.density = 100.0f; actordesc.globalpose.t = NxVec3(0, 0, 0); PhysX_Actor = PhysX_Scene->createActor(actorDesc); Obiekty opisane klasą CObiekt posiadają metodę InitPhysX, która tworzy z nich obiekty fizyczne aktorów, i dodaje je do sceny. Aby wykonać krok symulacji należy wywołać metodę simulate, klasy NxScene. Metoda ta przyjmuje wartość zmiennoprzecinkową, która opisuje długość kroku symulacji, który ma zostać zasymulowany. Następnie należy wywołać metodę flushstream, a potem fetchresults, która będzie czekać aż wszystkie obliczenia związane z fizyką zostaną zakończone. Ponieważ symulacji fizyki może odbywać się równolegle z innymi czynnościami, np. z renderowaniem grafiki, dobrze ustawić wywołania metody symulacji oraz innych czynności silnika w odpowiedniej kolejności. Opisuje to następujący pseudo-kod: ~ 20 ~

21 3.2 Silnik fizyki NVidia PhysX Pętla wykonania programu Pobierz wyniki symulacji (fetchresults) Symuluj (simulate) Renderuj scenę Reszta czynności silnika Silnik fizyki będzie pracował równolegle z silnikiem graficznym renderującym scenę, ponieważ metoda simulate tylko inicjuje symulację, która wykonywana jest w oddzielnym wątku. Jest to istotne, gdyż symulacji fizyki może być wykonywana na procesorze GPU lub CPU. Jeśli będzie wykonywana na GPU to w tym czasie procesor CPU może wykonywać inne obliczenia związane z pracą silnika. Jeśli natomiast obliczenia fizyki wykonywane są na CPU to mogą one być wykonywane na innym rdzeniu niż pozostałe obliczenia, a także w tym czasie procesor GPU może renderować grafikę. Renderując obiekty należy teraz uwzględnić ich położenie obliczone przez silnik fizyki. Macierz przekształcenia pobiera metoda getglobalpose() obiektu PhysX_Actor. Aby zastosować tę macierz należy wykonać następujące operacje: float macierz[16]; ob->physx_actor->getglobalpose().getcolumnmajor44(macierz); glmultmatrixf(macierz); Aby ułatwić kontrolę nad obiektami na scenie wprowadzono ułatwienia do interfejsu użytkownika, który był opracowany w ramach pracy inżynierskiej. Używając myszki można teraz zaznaczyć dowolny obiekt i przesuwać go po scenie. Wymagało to zaimplementowania wybierania obiektów. Wybieranie obiektów zostało zaimplementowane w efekcie renderującym. Po kliknięciu prawym przyciskiem myszy renderowany jest drugi obraz, który zawiera 16-bitowe, zmiennoprzecinkowe komponenty RGBA, które jednak nie opisują barwy, tylko numer renderowanego obiektu oraz pozycję każdego wyrenderowanego piksela w przestrzeni sceny. W miejscu kliknięcia myszką następuje odczytanie piksela pod kursorem i pobranie z niego numeru obiektu, który znajduje się w tym miejscu na obrazie. Następnie tworzony jest niewidoczny obiekt, który będzie kontrolowany przez kursor myszy. Jest on obiektem kinematycznym, a jego położenie jest bezpośrednio określane przez ruchy myszy. Wybrany obiekt jest łączony z obiektem kontrolowanym ruchem myszy za pomocą złącza, które będzie trzymało połączone obiekty w stałej odległości od siebie, jednak będzie pozwalało na dowolne ich obroty. ~ 21 ~

22 3.2 Silnik fizyki NVidia PhysX Rys. 6 Wiele obiektów symulowanych przez silnik fizyki. Kod odpowiedzialny za stworzenie tego łącza prezentuje się następująco: NxActorDesc actordesc; // pozycja piksela w scene actordesc.globalpose.t = pickpos.tonxvec3(); // obiekt kontrolowany ruchem myszki pickedactor = PhysX_Scene->createActor(actorDesc); pickedactor->raisebodyflag(nx_bf_kinematic); pickedactor->raiseactorflag(nx_af_disable_collision); NxD6JointDesc d6desc; d6desc.actor[0] = ob->physx_actor; // zaznaczony obiekt d6desc.actor[1] = pickedactor;... // pozwolenie na dowolne obroty d6desc.twistmotion = NX_D6JOINT_MOTION_FREE; d6desc.swing1motion = NX_D6JOINT_MOTION_FREE; d6desc.swing2motion = NX_D6JOINT_MOTION_FREE; // zablokowanie obiektów w stałej odległości d6desc.xmotion = NX_D6JOINT_MOTION_LOCKED; d6desc.ymotion = NX_D6JOINT_MOTION_LOCKED; d6desc.zmotion = NX_D6JOINT_MOTION_LOCKED; // stworzenie złącza pickedjoint = (NxD6Joint*)PhysX_Scene->createJoint(d6Desc); ~ 22 ~

23 3.3 Portale Rys. 7 Usprawniony interfejs użytkownika umożliwia przesuwanie i rzucanie obiektami. 3.3 Portale Wprowadzenie Z implementacją portali wiąże się wiele zagadnień i problemów, które trzeba rozwiązać. Aby zaimplementować portale do silnika graficznego, należy rozważyć następujące zagadnienia: widok przez portal, integracja silnika fizyki z portalami, oświetlenie a portale. Każde z tych zagadnień wymaga oddzielnego omówienia Renderowanie sceny za portalem Aby wyrenderować scenę z portalami należy najpierw wyrenderować scenę, w której umieszczone są portale. Następnie w miejscu portalu usunąć obraz oraz informację o głębi i wyrenderować tam widok przez portal. Będziemy używać do tego bufora szablonu (ang. stencil buffer) oraz shaderów. Najpierw czyścimy bufor szablonu dowolną wartością, np. 0. Następnie ustawiamy parametry bufora szablonu tak, by renderowanie obiektów powodowało ustawianie wartości szablonu na jakąś inną wartość, np Ustawiamy test głębokości (ang. depth test) tak, by renderowane były tylko piksele znajdujące się w tej samej bądź bliższej odległości od obserwatora, co piksele uprzednio będące na danej pozycji. Następnie renderujemy obiekt portalu. Dzięki temu w buforze szablonu mamy maskę określającą, gdzie obiekt portalu się znajduje. Teraz renderujemy ten obiekt jeszcze raz, tym razem wyłączając test głębokości, ale używając testu szablonu tak, by renderowane były tylko te piksele, które mają wartość szablonu równą 128. Dodatkowo ~ 23 ~

24 3.3 Portale Rys. 8 Widok przez portal. używamy shadera pikseli, który modyfikuje głębię fragmentów na swoim wyjściu na wielkość największą. W ten sposób w buforze głębokości sceny w miejscu portalu mamy pustkę, tzn. dowolny obiekt wyrenderowany w tym miejscu przejdzie test głębokość i będzie widoczny. Następnie renderujemy widok za portalem. Przykładowy widok przez portal pokazany jest na rysunku8. Aby tego dokonać musimy odpowiednio ustawić kamerę oraz użyć shadera pikseli, po to, by uciąć renderowane obiekty przed płaszczyzną portalu. Używamy do tego shadera sprawdzającego czy renderowany piksel znajduje się za płaszczyzną portalu i jeśli tak, wykonywana jest instrukcja discard, oznaczająca przerwanie renderowania piksela i jego odrzucenie [28]. Portale opisujemy przez podanie ich płaszczyzny, punktu środkowego, macierzy obrotu oraz współczynnika skali. Macierz obrotu ma wymiar 3x3 i jej wiersze zawierają wektory bazowe układu współrzędnych portalu. Są to wektory określające osie X, Y i Z. Oś Z jest normalną do płaszczyzny portalu. Nazwijmy portal, przez który widok właśnie renderujemy, portalem wejściowym, a sparowany z nim portal wyjściowym. Aby wyrenderować widok przez portal wejściowy należy ustawić pozorną kamerę odpowiednio za portalem wyjściowym, tak aby patrzyła przez niego. Aby tego dokonać użyjemy przekształcenia matematycznego opisanego wzorem: Poz' Rot' W yj *( Rot 1 W ej *( Poz Poz W ej )) Poz W yj (1) gdzie Poz oznacza położenie pozornej kamery, Rot oznacza macierz obrotu odpowiedniego portalu, natomiast Rot oznacza macierz obrotu z zanegowanym trzecim wierszem wektorem normalnym. Poz oznacza bazowe położenie kamery, Poz z indeksami Wej oraz Wyj oznacza pozycję środka odpowiedniego portalu. ~ 24 ~

25 3.3 Portale Mając w ten sposób ustawioną kamerę, możemy przystąpić do renderowania sceny znajdującej się za portalem. Przez portal można zobaczyć inny portal. Aby było to możliwe, należy po wyrenderowanie widoku za portalem powtórzyć całą procedurę raz jeszcze, tym razem jednak dla widoku przez pierwszy portal. Kolejne zagnieżdżenia portali renderuje się rekurencyjnie. Portale mogą się też poruszać, ilustruje to poniższy rysunek. Rys. 9 Poruszający się portal Integracja fizyki z mechanizmem portali Docelowym efektem jest wchodzenie obiektu do jednego portalu i wyłanianie się z drugiego portalu. Ponieważ portale tworzą swojego rodzaju tunel przestrzenny, który jest nienaturalny z punktu widzenia fizyki, nie zostały one przewidziane przez autorów większości silników fizycznych, w tym NVidia PhysX. Dlatego też trzeba opracować rozwiązania pozwalające na interakcje obiektów z portalami. Integracja fizyki z mechanizmem portali nie jest zdaniem prostym. W silniku NVidia PhysX brakuje odległego łączenia obiektów, które by powiązało obiekty przechodzące przez portal jako jeden obiekt, dlatego też trzeba to robić inaczej. Obiekt przechodzący przez portal pojawia się w drugim portalu, tak więc trzeba ten wychodzący obiekt stworzyć jako oddzielny obiekt w mechanizmie silnika fizyki. Można stworzyć kopię obiektu wchodzącego do portalu i umieścić ją odpowiednio do położenia portali tak, by wychodziła z drugiego portalu. Obiekt wchodzący byłby w pełni symulowany przez silnik fizyki, natomiast obiekt wychodzący kopia, byłby kinematyczny i po każdym kroku symulacji ustawiany w odpowiedniej pozycji. Można ~ 25 ~

26 3.3 Portale powiedzieć, że obiekt wchodzący byłby symulowany i kontrolował położenie obiektu wychodzącego. Ten ostatni byłby tylko obrazem obiektu wchodzącego. Pozycję i obrót obiektu tworzymy według podobnego wzoru jak przy umieszczaniu pozornej kamery: Poz' Rot' W yj *( Rot 1 W ej *( Poz Poz W ej )) Poz W yj (2) Natomiast macierz obrotu obiektu obliczamy następująco: 1 W ej Rot' Rot' *( Rot * Rot) (3) W yj gdzie Rot to wynikowa macierz obrotu, a Rot to macierz obrotu obiektu wejściowego. Takie rozwiązanie sprawdza się dla mniejszych obiektów, które tylko przelatują przez portal. Problem pojawia się przy obiektach dłuższych, które zatrzymują się w trakcie przechodzenia przez portal, tzn. jedna część obiektu jest wystaje z jednego, a druga z drugiego portalu. Wtedy obiekt, który jest kontrolujący (wchodzący) będzie oddziaływał z innymi obiektami, natomiast obiekt wychodzący (kopia) będzie nieruchomy. Żadne uderzenie ani siła przyłożona do obiektu wychodzącego nie spowoduje jego poruszenia, ponieważ jest on obiektem kinetycznym. Przechodzenie długiego obiektu przez portal pokazano na rysunku 10. Rys. 10 Długi obiekt przechodzi przez portal. ~ 26 ~

27 3.3 Portale Innym sposobem będzie zamiana kontrolujących obiektów co drugi krok symulacji. W krokach nieparzystych obiekt wchodzący będzie symulowany, a obiekt wychodzący będzie kinematyczny i po kroku symulacji zostanie ustawiony w pozycji, którą ma obiekt wchodzący. W parzystych krokach symulacji będzie na odwrót. Po każdym kroku symulacji ustawiamy pozycję oraz rotację obiektu, który był kinetyczny, na podstawie pozycji i rotacji obiektu, który był symulowany, za pomocą tych samych wzorów, co w sposobie pierwszym. Ponadto musimy ustawić prędkość liniową i kątową obiektu, który będzie symulowany w następnym kroku. Prędkość liniową otrzymujemy ze wzoru: Vel' Rot' W yj *( Rot 1 W ej *( Vel Vel W ej )) Vel W yj (4) gdzie Vel oznacza poszukiwaną prędkość, Vel oznacza prędkość obiektu, który był symulowany, Vel Wej i Vel Wyj oznaczają prędkości portalów wejściowego oraz wyjściowego. Prędkość kątową otrzymujemy ze wzoru: 1 W ej Ang' Rot' *( Rot * Ang) (5) W yj gdzie Ang oznacza poszukiwaną prędkość kątową, a Ang oznacza prędkość kątową obiektu, który był symulowany. Takie rozwiązanie spowoduje, że obydwa obiekty będą symulowane i będą oddziaływały z innymi obiektami. Jednak tutaj pojawia się problem stabilności. Odgórne ustawianie pozycji obiektu w co drugim kroku symulacji powoduje efekt drgania obiektu, gdyż silnik fizyki nie ma ciągłości w kontrolowaniu obiektów i przez to nie działa tak jak powinien. Ponadto takie rozwiązanie może powodować ciągłe drżenie obiektu, ponieważ jeśli na jeden obiekt działa ciągle jakaś siła (np. grawitacji) i w każdym symulowanym kroku przesuwa obiekt, a drugi nie (bo stoi na ziemi), to co drugą klatkę obiekt będzie przesuwany raz w jedną, raz w drugą stronę. Najlepszym sposobem byłoby stworzenie łączenia (ang. joint), które wiązałoby dwa obiekty tak, by zachowywały się jako jeden. W silniki PhysX występują łączenia, jednak nie nadają się one do tego zadania. W tym silniku występuje łączenie stałe (ang. fixed), które łączy dwa obiekty tak, by zachowywały się jako jeden, jednak tylko w tej samej przestrzeni. Oznacza to, że jeśli jeden obiekt poruszy się np. w lewo, to drugi obiekt również poruszy się lewo. Nie nadaje się to, niestety, do zastosowania w przypadku portali, ponieważ portale mogą się obracać. Dogodnym rozwiązaniem byłoby łączenie portalowe (ang. portal joint) lub łączenie przestrzenne (ang. spatial joint), które powodowałoby łączenie obiektów, gdzie każdy obiekt miałby swój własny układ współrzędnych. 1 1 Autor wysłał zapytanie do firmy NVidia o wprowadzenie takiego łączenia, jednak do tej pory nie uzyskał żadnej odpowiedzi. ~ 27 ~

28 3.3 Portale Łączenie przestrzenne jest wprowadzone w innych silnikach fizyki np. Newton Dynamics [22] Fałszywe kolizje Gdy obiekt przechodzi przez portal, to z punktu widzenia silnika fizyki nic się z nim nie dzieje. Dlatego też, obiekty znajdujące się za portalem wejściowym będą kolidowały z obiektem, który przychodzi przez portal. Silnik fizyki nie posiada informacji o tym, że część obiektu przeszła przez portal i nie ma jej za portalem. Aby to rozwiązać, trzeba po każdym kroku symulacji ciąć obiekt płaszczyzną portalu. Ilustracja fałszywych kolizji znajduje się na poniższym rysunku. Rys. 11 Fałszywe kolizje. Na rysunki widać długi, zielony obiekt, przechodzący przez portal oraz mały, sześcienny obiekt, z którym obiekt przechodzący przez portal nie powinien kolidować. Cięcie obiektu w kształcie pudełka jest proste, wystarczy sprawdzić które z dwunastu krawędzi pudełka przechodzą przez płaszczyznę portalu i uciąć je tak, by się kończyły na płaszczyźnie portalu. Powstaje w ten sposób obiekt wypukły z niewielką liczbą wierzchołków, który jest bez problemu obsługiwany przez silnik fizyki. Przecięcie obiektu o kształcie kuli powoduje stworzenie również obiektu wypukłego, jednak o dużo większej liczbie wierzchołków, zależnie od tego, jak dokładną powierzchnię kuli chcemy uzyskać. Natomiast przecięcie obiektu wypukłego wymaga sprawdzenia wszystkich trójkątów, z których ten obiekt się składa. Jeśli któryś trójkąt znajduje się za płaszczyzną portalu, jest usuwany. Jeśli w całości przed płaszczyzną, pozostaje bez zmian. Natomiast jeśli przecina płaszczyznę portalu, musi zostać przecięty. Przecięcie takiego obiektu wymaga większego nakładu obliczeń. ~ 28 ~

29 3.3 Portale Skalowanie portali Portale mogą mieć różne wielkości. Gdy przeskalujemy macierze obrotu (lub po przekształceniach zastosujemy odpowiednie skalowanie) otrzymamy przeskalowany układ współrzędnych danego portalu. Pozwala to na tworzenie portali powiększających lub pomniejszających. Przykład takiego portalu pokazano na poniższym rysunku. Rys. 12 Portal przeskalowany. Do małego portalu wchodzi obiekt i z dużego wychodzi powiększony. Po przeskalowaniu macierzy obrotu, widok przez portal będzie odpowiednio przeskalowany, ponieważ pozorna kamera będzie umieszczana w odpowiednim miejscu, symulującym skalowanie. Natomiast aby obiekt przechodzący przez portal został przeskalowany, trzeba zastosować odpowiednie techniki. W celu utworzenia drugiego obiektu wychodzącego, należy go przeskalować odpowiednio do relatywnej skali portalu, z którego wychodzi. Jeśli obiekt miał kształt pudełka lub kuli należy tylko zmienić ich rozmiar. Jeśli natomiast miał kształt wypukły, należy wszystkie wierzchołki przemnożyć przez odpowiedni współczynnik. Również przy wyświetlaniu obiektu należy uwzględnić, czy został on przeskalowany Kamera a portale Aby kamera przechodziła przez portale, a nie przez nie przenikała bez zachowania efektu portali, trzeba po każdym ruchu kamery lub portalu sprawdzać, czy punkt poprzedni kamery był po drugiej stronie portalu, niż jest punkt aktualny. Jeśli tak się stało należy pozycję kamery przekształcić zgodnie ze wzorem (1). ~ 29 ~

30 3.3 Portale Oświetlenie a portale Światło również może przechodzić przez portale. Same patrzenie przez portal jest symulacją przechodzenia światła odbitego od obiektów przez portal, jednak oświetlenie obiektów światłem przechodzącym przez portal wymaga oddzielnego rozpatrzenia. Aby światło przechodziło przez portal i oświetlało obiekty po drugiej stronie, należy przy renderowaniu sceny stworzyć pozorne światła te, których światło wydostaje się z portalu. Ustawienie pozycji pozornych świateł uzyskamy za pomocą tego samego wzoru, który był używany do określenia pozycji pozornej kamery (1). Następnie należy dodać sztuczny cień, w taki sposób, by zasymulować przechodzenie światła przez portal. Ilustruje to rysunek 13. Rys. 13 Sztuczny cień. Pozorne światło umieszczane jest za portalem. Obiekty znajdujące się za płaszczyzną portalu (lewa strona) nie zostaną oświetlone, ani nie będą rzucały cienia (obiekt A). Natomiast obiekty przed płaszczyzną portalu będą zachowywały się w normalny sposób (B, C). Sztuczny cień będzie rzucany przez całą płaszczyznę podziału z wyciętym otworem o wielkości samego portalu. Innym zagadnieniem jest przechodzenie cieni przez portal. Obiekty znajdujące się przed portalem, przez który świeci światło, będą rzucały cień, który przejdzie przez portal i padnie na obiekty po drugiej stronie. Aby tego dokonać należy umieścić pozorne obiekty za płaszczyzną portalu. Same portale również rzucają cienie, ponieważ światło przechodzi przez portal i nie trafia w obiekty znajdujące się za nim. Ilustruje to rysunek 14. ~ 30 ~

31 3.4 Kubiczne mapy otoczenia 3.4 Kubiczne mapy otoczenia Rys. 14 Cienie przechodzące przez portal. Jednym z ciekawszych mechanizmów opracowanych w ramach niniejszej pracy jest ten umożliwiający tworzenie materiałów symulujących odbicia i załamania światła na powierzchniach zakrzywionych. W grafice komputerowej takie materiały uzyskuje się często techniką śledzenia promieni (ang. raytracing), jednak technika ta wymaga bardzo wielu obliczeń. Można jednak symulować takie materiały w inny sposób, mniej dokładny, jednak wystarczający dla pewnych zastosowań, takich jak gry komputerowe. Opracowany mechanizm polega na stworzeniu kubicznej mapy otoczenia dla każdego obiektu posiadającego materia odbijający lub przezroczysty. Mapa taka jest sześcianem o środku w pozycji środka obiektu, na którego ścianach, stojąc w jego środku, widać to, co widać patrząc ze środka obiektu. Po stworzeniu wszystkich map następuje renderowanie poszczególnych obiektów. Poszczególne mapy otoczenia są przekazywane do shaderów odpowiednich materiałów, które mogą ich użyć w celu wyznaczenia odbić lub załamań światła na tych obiektach. Współrzędne tekstury, potrzebne do uzyskania barwy piksela z tekstury kubicznej, są wektorem trójelementowym, reprezentującym wektor kierunkowy, oznaczający kierunek ze środka sześcianu. Z miejsca przecięcia wektora z sześcianem odczytywana jest wartość barwy piksela. Metoda ta nie jest zbyt dokładna, bowiem nie pozwala na uzyskanie odbić zgodnych z prawami fizyki, jednak daje wystarczające przybliżenie by uzyskać wrażenie prawdziwych odbić i załamań. Najlepiej prezentują się obiekty o kształcie kuli, a największe niedoskonałości ujawniają obiekty, których jeden z wymiarów jest znacznie większy niż pozostałe, np. długi metalowy długopis. Wadą tej metody jest to, że na mapie otocznia obiektu będą widoczne tylko inne obiekty, przez co obiekt sam w sobie nie będzie się odbijał. Ograniczenie to dotyczy ~ 31 ~

Plan wykładu. Akcelerator 3D Potok graficzny

Plan wykładu. Akcelerator 3D Potok graficzny Plan wykładu Akcelerator 3D Potok graficzny Akcelerator 3D W 1996 r. opracowana została specjalna karta rozszerzeń o nazwie marketingowej Voodoo, którą z racji wspomagania procesu generowania grafiki 3D

Bardziej szczegółowo

Podstawy 3D Studio MAX

Podstawy 3D Studio MAX Podstawy 3D Studio MAX 7 grudnia 2001 roku 1 Charakterystyka programu 3D Studio MAX jest zintegrowanym środowiskiem modelowania i animacji obiektów trójwymiarowych. Doświadczonemu użytkownikowi pozwala

Bardziej szczegółowo

Karty graficzne możemy podzielić na:

Karty graficzne możemy podzielić na: KARTY GRAFICZNE Karta graficzna karta rozszerzeo odpowiedzialna generowanie sygnału graficznego dla ekranu monitora. Podstawowym zadaniem karty graficznej jest odbiór i przetwarzanie otrzymywanych od komputera

Bardziej szczegółowo

SPOSOBY POMIARU KĄTÓW W PROGRAMIE AutoCAD

SPOSOBY POMIARU KĄTÓW W PROGRAMIE AutoCAD Dr inż. Jacek WARCHULSKI Dr inż. Marcin WARCHULSKI Mgr inż. Witold BUŻANTOWICZ Wojskowa Akademia Techniczna SPOSOBY POMIARU KĄTÓW W PROGRAMIE AutoCAD Streszczenie: W referacie przedstawiono możliwości

Bardziej szczegółowo

1. Przypisy, indeks i spisy.

1. Przypisy, indeks i spisy. 1. Przypisy, indeks i spisy. (Wstaw Odwołanie Przypis dolny - ) (Wstaw Odwołanie Indeks i spisy - ) Przypisy dolne i końcowe w drukowanych dokumentach umożliwiają umieszczanie w dokumencie objaśnień, komentarzy

Bardziej szczegółowo

Zastosowania Robotów Mobilnych

Zastosowania Robotów Mobilnych Zastosowania Robotów Mobilnych Temat: Zapoznanie ze środowiskiem Microsoft Robotics Developer Studio na przykładzie prostych problemów nawigacji. 1) Wstęp: Microsoft Robotics Developer Studio jest popularnym

Bardziej szczegółowo

Wymagania edukacyjne z informatyki dla klasy szóstej szkoły podstawowej.

Wymagania edukacyjne z informatyki dla klasy szóstej szkoły podstawowej. Wymagania edukacyjne z informatyki dla klasy szóstej szkoły podstawowej. Dział Zagadnienia Wymagania podstawowe Wymagania ponadpodstawowe Arkusz kalkulacyjny (Microsoft Excel i OpenOffice) Uruchomienie

Bardziej szczegółowo

Spis treści. 1 Moduł Mapy 2

Spis treści. 1 Moduł Mapy 2 Spis treści 1 Moduł Mapy 2 1.1 Elementy planu............................. 2 1.1.1 Interfejs widoku......................... 3 1.1.1.1 Panel sterujacy.................... 3 1.1.1.2 Suwak regulujacy przybliżenie...........

Bardziej szczegółowo

SCENARIUSZ LEKCJI. Streszczenie. Czas realizacji. Podstawa programowa

SCENARIUSZ LEKCJI. Streszczenie. Czas realizacji. Podstawa programowa SCENARIUSZ LEKCJI OPRACOWANY W RAMACH PROJEKTU: INFORMATYKA MÓJ SPOSÓB NA POZNANIE I OPISANIE ŚWIATA. PROGRAM NAUCZANIA INFORMATYKI Z ELEMENTAMI PRZEDMIOTÓW MATEMATYCZNO-PRZYRODNICZYCH Autorzy scenariusza:

Bardziej szczegółowo

Julia 4D - raytracing

Julia 4D - raytracing i przykładowa implementacja w asemblerze Politechnika Śląska Instytut Informatyki 27 sierpnia 2009 A teraz... 1 Fraktale Julia Przykłady Wstęp teoretyczny Rendering za pomocą śledzenia promieni 2 Implementacja

Bardziej szczegółowo

Grafika komputerowa i wizualizacja

Grafika komputerowa i wizualizacja Grafika komputerowa i wizualizacja Radosław Mantiuk ( rmantiuk@wi.zut.edu.pl, p. 315 WI2) http://rmantiuk.zut.edu.pl Katedra Systemów Multimedialnych Wydział Informatyki, Zachodniopomorski Uniwersytet

Bardziej szczegółowo

Raport. Michał Andruszko

Raport. Michał Andruszko Raport Temat: Stworzenie unikatowego warsztatu naukowego z zakresu pozyskania i przetwarzania danych geoprzestrzennych stosowanych w modelowaniu hydrodynamicznym przepływów powodziowych Kierownik: dr inż.

Bardziej szczegółowo

Spora część kodu programu jest dla nas nieprzydatna. Dokonaj zmian tak, aby kod miał postać:

Spora część kodu programu jest dla nas nieprzydatna. Dokonaj zmian tak, aby kod miał postać: Temat 8: Rodzaje kamery. Ustawienia kamery. Animacja ruchu kamery. Aby prześledzić różne możliwości zastosowania kamery zbudujemy najpierw jakąś ciekawą scenę. Ćwiczenie 053 Otwórz nowy plik. Z menu programu

Bardziej szczegółowo

True Space 3.2 KURS PODSTAWOWY. program można ściągn ąć za darmo ze strony www.caligari.com. Co to właściwie jest?

True Space 3.2 KURS PODSTAWOWY. program można ściągn ąć za darmo ze strony www.caligari.com. Co to właściwie jest? True Space 3.2 KURS PODSTAWOWY program można ściągn ąć za darmo ze strony www.caligari.com Co to właściwie jest? True Space 3.2 jest programem do tworzenia animacji, realistycznej grafiki i wirtualnych

Bardziej szczegółowo

Wykład 4. Rendering (1) Informacje podstawowe

Wykład 4. Rendering (1) Informacje podstawowe Wykład 4. Rendering (1) Informacje podstawowe Z punktu widzenia dzisiejszego programowania gier: Direct3D jest najczęściej wykorzystywanym przez profesjonalnych deweloperów gier API graficznym na platformie

Bardziej szczegółowo

Tworzenie prezentacji w MS PowerPoint

Tworzenie prezentacji w MS PowerPoint Tworzenie prezentacji w MS PowerPoint Program PowerPoint dostarczany jest w pakiecie Office i daje nam możliwość stworzenia prezentacji oraz uatrakcyjnienia materiału, który chcemy przedstawić. Prezentacje

Bardziej szczegółowo

1 Podstawy c++ w pigułce.

1 Podstawy c++ w pigułce. 1 Podstawy c++ w pigułce. 1.1 Struktura dokumentu. Kod programu c++ jest zwykłym tekstem napisanym w dowolnym edytorze. Plikowi takiemu nadaje się zwykle rozszerzenie.cpp i kompiluje za pomocą kompilatora,

Bardziej szczegółowo

Politechnika Warszawska Wydział Mechatroniki Instytut Automatyki i Robotyki

Politechnika Warszawska Wydział Mechatroniki Instytut Automatyki i Robotyki Politechnika Warszawska Wydział Mechatroniki Instytut Automatyki i Robotyki Ćwiczenie laboratoryjne 2 Temat: Modelowanie powierzchni swobodnych 3D przy użyciu programu Autodesk Inventor Spis treści 1.

Bardziej szczegółowo

5.4. Tworzymy formularze

5.4. Tworzymy formularze 5.4. Tworzymy formularze Zastosowanie formularzy Formularz to obiekt bazy danych, który daje możliwość tworzenia i modyfikacji danych w tabeli lub kwerendzie. Jego wielką zaletą jest umiejętność zautomatyzowania

Bardziej szczegółowo

Maskowanie i selekcja

Maskowanie i selekcja Maskowanie i selekcja Maska prostokątna Grafika bitmapowa - Corel PHOTO-PAINT Pozwala definiować prostokątne obszary edytowalne. Kiedy chcemy wykonać operacje nie na całym obrazku, lecz na jego części,

Bardziej szczegółowo

Systemy wirtualnej rzeczywistości. Komponenty i serwisy

Systemy wirtualnej rzeczywistości. Komponenty i serwisy Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych Systemy wirtualnej rzeczywistości Laboratorium Komponenty i serwisy Wstęp: W trzeciej części przedstawione zostaną podstawowe techniki

Bardziej szczegółowo

Ćwiczenie 4 - Podstawy materiałów i tekstur. Renderowanie obrazu i animacji

Ćwiczenie 4 - Podstawy materiałów i tekstur. Renderowanie obrazu i animacji Ćwiczenie 4 - Podstawy materiałów i tekstur. Renderowanie obrazu i animacji Materiał jest zbiorem informacji o właściwościach powierzchni. Składa się na niego kolor, sposób odbijania światła i sposób nakładania

Bardziej szczegółowo

c. Przesuwamy sześcian wzdłuż osi Z o wartość 5

c. Przesuwamy sześcian wzdłuż osi Z o wartość 5 Celem ćwiczenia będzie stworzenie i zaanimowanie kół zębatych. W przykładzie, posłużymy się metodami odejmowania określonych części obiektu, wykorzystamy funkcję Boolean, która działa na zasadzie algebry

Bardziej szczegółowo

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

Wprowadzenie do rysowania w 3D. Praca w środowisku 3D Wprowadzenie do rysowania w 3D 13 Praca w środowisku 3D Pierwszym krokiem niezbędnym do rozpoczęcia pracy w środowisku 3D programu AutoCad 2010 jest wybór odpowiedniego obszaru roboczego. Można tego dokonać

Bardziej szczegółowo

1 Moduł Modbus ASCII/RTU

1 Moduł Modbus ASCII/RTU 1 Moduł Modbus ASCII/RTU Moduł Modbus ASCII/RTU daje użytkownikowi Systemu Vision możliwość komunikacji z urządzeniami za pomocą protokołu Modbus. Moduł jest konfigurowalny w taki sposób, aby umożliwiał

Bardziej szczegółowo

Opis funkcji modułu Konwerter 3D

Opis funkcji modułu Konwerter 3D Opis funkcji modułu Konwerter 3D www.cadprojekt.com.pl Kliknij na tytuł rozdziału, aby przejść do wybranego zagadnienia MODUŁ KONWERTER 3D...3 Wygląd i funkcje okna modułu Konwerter 3D...3 Konwertowanie

Bardziej szczegółowo

1 Moduł Modbus ASCII/RTU 3

1 Moduł Modbus ASCII/RTU 3 Spis treści 1 Moduł Modbus ASCII/RTU 3 1.1 Konfigurowanie Modułu Modbus ASCII/RTU............. 3 1.1.1 Lista elementów Modułu Modbus ASCII/RTU......... 3 1.1.2 Konfiguracja Modułu Modbus ASCII/RTU...........

Bardziej szczegółowo

DesignCAD 3D Max 24.0 PL

DesignCAD 3D Max 24.0 PL DesignCAD 3D Max 24.0 PL Październik 2014 DesignCAD 3D Max 24.0 PL zawiera następujące ulepszenia i poprawki: Nowe funkcje: Tryb RedSDK jest teraz dostępny w widoku 3D i jest w pełni obsługiwany przez

Bardziej szczegółowo

Jak napisać program obliczający pola powierzchni różnych figur płaskich?

Jak napisać program obliczający pola powierzchni różnych figur płaskich? Część IX C++ Jak napisać program obliczający pola powierzchni różnych figur płaskich? Na początku, przed stworzeniem właściwego kodu programu zaprojektujemy naszą aplikację i stworzymy schemat blokowy

Bardziej szczegółowo

Rozdział 4 KLASY, OBIEKTY, METODY

Rozdział 4 KLASY, OBIEKTY, METODY Rozdział 4 KLASY, OBIEKTY, METODY Java jest językiem w pełni zorientowanym obiektowo. Wszystkie elementy opisujące dane, za wyjątkiem zmiennych prostych są obiektami. Sam program też jest obiektem pewnej

Bardziej szczegółowo

2 Przygotował: mgr inż. Maciej Lasota

2 Przygotował: mgr inż. Maciej Lasota Laboratorium nr 2 1/6 Grafika Komputerowa 3D Instrukcja laboratoryjna Temat: Manipulowanie przestrzenią 2 Przygotował: mgr inż. Maciej Lasota 1) Manipulowanie przestrzenią Istnieją dwa typy układów współrzędnych:

Bardziej szczegółowo

Techniki animacji komputerowej

Techniki animacji komputerowej Techniki animacji komputerowej 1 Animacja filmowa Pojęcie animacji pochodzi od ożywiania i ruchu. Animować oznacza dawać czemuś życie. Słowem animacja określa się czasami film animowany jako taki. Animacja

Bardziej szczegółowo

Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Opracował Jan T. Biernat

Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Opracował Jan T. Biernat Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Program, to lista poleceń zapisana w jednym języku programowania zgodnie z obowiązującymi w nim zasadami. Celem programu jest przetwarzanie

Bardziej szczegółowo

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

Oświetlenie. Modelowanie oświetlenia sceny 3D. Algorytmy cieniowania. Oświetlenie. Modelowanie oświetlenia sceny 3D. Algorytmy cieniowania. Chcąc osiągnąć realizm renderowanego obrazu, należy rozwiązać problem świetlenia. Barwy, faktury i inne właściwości przedmiotów postrzegamy

Bardziej szczegółowo

Dokumentacja projektu QUAIKE Architektura oprogramowania

Dokumentacja projektu QUAIKE Architektura oprogramowania Licencjacka Pracownia Oprogramowania Instytut Informatyki Uniwersytetu Wrocławskiego Jakub Kowalski, Andrzej Pilarczyk, Marek Kembrowski, Bartłomiej Gałkowski Dokumentacja projektu QUAIKE Architektura

Bardziej szczegółowo

Ćwiczenie: JavaScript Cookies (3x45 minut)

Ćwiczenie: JavaScript Cookies (3x45 minut) Ćwiczenie: JavaScript Cookies (3x45 minut) Cookies niewielkie porcje danych tekstowych, które mogą być przesyłane między serwerem a przeglądarką. Przeglądarka przechowuje te dane przez określony czas.

Bardziej szczegółowo

RYSUNEK TECHNICZNY I GEOMETRIA WYKREŚLNA INSTRUKCJA DOM Z DRABINĄ I KOMINEM W 2D

RYSUNEK TECHNICZNY I GEOMETRIA WYKREŚLNA INSTRUKCJA DOM Z DRABINĄ I KOMINEM W 2D Politechnika Białostocka Wydział Budownictwa i Inżynierii Środowiska Zakład Informacji Przestrzennej Inżynieria Środowiska INSTRUKCJA KOMPUTEROWA z Rysunku technicznego i geometrii wykreślnej RYSUNEK TECHNICZNY

Bardziej szczegółowo

Obróbka po realnej powierzchni o Bez siatki trójkątów o Lepsza jakość po obróbce wykańczającej o Tylko jedna tolerancja jakości powierzchni

Obróbka po realnej powierzchni o Bez siatki trójkątów o Lepsza jakość po obróbce wykańczającej o Tylko jedna tolerancja jakości powierzchni TEBIS Wszechstronny o Duża elastyczność programowania o Wysoka interaktywność Delikatne ścieżki o Nie potrzebny dodatkowy moduł HSC o Mniejsze zużycie narzędzi o Mniejsze zużycie obrabiarki Zarządzanie

Bardziej szczegółowo

Instrukcja obsługi programu PowRek

Instrukcja obsługi programu PowRek Instrukcja obsługi programu PowRek środa, 21 grudnia 2011 Spis treści Przeznaczenie programu... 4 Prezentacja programu... 5 Okno główne programu... 5 Opis poszczególnych elementów ekranu... 5 Nowy projekt...

Bardziej szczegółowo

Zacznijmy więc pracę z repozytorium. Pierwsza konieczna rzecz do rozpoczęcia pracy z repozytorium, to zalogowanie się w serwisie:

Zacznijmy więc pracę z repozytorium. Pierwsza konieczna rzecz do rozpoczęcia pracy z repozytorium, to zalogowanie się w serwisie: Repozytorium służy do przechowywania plików powstających przy pracy nad projektami we w miarę usystematyzowany sposób. Sam mechanizm repozytorium jest zbliżony do działania systemu plików, czyli składa

Bardziej szczegółowo

CUDA Median Filter filtr medianowy wykorzystujący bibliotekę CUDA sprawozdanie z projektu

CUDA Median Filter filtr medianowy wykorzystujący bibliotekę CUDA sprawozdanie z projektu CUDA Median Filter filtr medianowy wykorzystujący bibliotekę CUDA sprawozdanie z projektu inż. Daniel Solarz Wydział Fizyki i Informatyki Stosowanej AGH 1. Cel projektu. Celem projektu było napisanie wtyczki

Bardziej szczegółowo

Sprawdziany w USOSweb instrukcja dla prowadzących zajęcia.

Sprawdziany w USOSweb instrukcja dla prowadzących zajęcia. Sprawdziany w USOSweb instrukcja dla prowadzących zajęcia. I. Wstęp Moduł Sprawdziany, służy do przekazywania w łatwy sposób, drogą elektroniczną zasad zaliczania przedmiotów oraz wyników kartkówek czy

Bardziej szczegółowo

Rozdział ten zawiera informacje na temat zarządzania Modułem Modbus TCP oraz jego konfiguracji.

Rozdział ten zawiera informacje na temat zarządzania Modułem Modbus TCP oraz jego konfiguracji. 1 Moduł Modbus TCP Moduł Modbus TCP daje użytkownikowi Systemu Vision możliwość zapisu oraz odczytu rejestrów urządzeń, które obsługują protokół Modbus TCP. Zapewnia on odwzorowanie rejestrów urządzeń

Bardziej szczegółowo

2012 Bentley Systems, Incorporated. Bentley Pointools V8i Przegląd

2012 Bentley Systems, Incorporated. Bentley Pointools V8i Przegląd 2012 Bentley Systems, Incorporated Bentley Pointools V8i Przegląd Przegląd Dlaczego potrzebujesz Bentley Pointools V8i? Co to jest? Filozofia Funkcje Szczegóły Kto to wykorzystuje? Wykorzystanie w przemyśle

Bardziej szczegółowo

Webowy generator wykresów wykorzystujący program gnuplot

Webowy generator wykresów wykorzystujący program gnuplot Uniwersytet Mikołaja Kopernika Wydział Fizyki, Astronomii i Informatyki Stosowanej Marcin Nowak nr albumu: 254118 Praca inżynierska na kierunku informatyka stosowana Webowy generator wykresów wykorzystujący

Bardziej szczegółowo

3.1. Na dobry początek

3.1. Na dobry początek Klasa I 3.1. Na dobry początek Regulamin pracowni i przepisy BHP podczas pracy przy komputerze Wykorzystanie komputera we współczesnym świecie Zna regulamin pracowni i przestrzega go. Potrafi poprawnie

Bardziej szczegółowo

BRIDGE CAD ABT - INSTRUKCJA OBSŁUGI

BRIDGE CAD ABT - INSTRUKCJA OBSŁUGI BRIDGE CAD ABT - INSTRUKCJA OBSŁUGI 1. Wiadomości ogólne. Program ABT służy do automatycznego generowania plików *.dat, wykorzystywanych w obliczeniach statycznych i wytrzymałościowych przyczółków mostowych

Bardziej szczegółowo

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

Wprowadzenie do programowania w języku Visual Basic. Podstawowe instrukcje języka Wprowadzenie do programowania w języku Visual Basic. Podstawowe instrukcje języka 1. Kompilacja aplikacji konsolowych w środowisku programistycznym Microsoft Visual Basic. Odszukaj w menu startowym systemu

Bardziej szczegółowo

Modele symulacyjne PyroSim/FDS z wykorzystaniem rysunków CAD

Modele symulacyjne PyroSim/FDS z wykorzystaniem rysunków CAD Modele symulacyjne PyroSim/FDS z wykorzystaniem rysunków CAD Wstęp Obecnie praktycznie każdy z projektów budowlanych, jak i instalacyjnych, jest tworzony z wykorzystaniem rysunków wspomaganych komputerowo.

Bardziej szczegółowo

Animacje cz. 2. Rysujemy koło zębate

Animacje cz. 2. Rysujemy koło zębate Animacje cz. 2 1. Do wykonania poniższej animacji będziemy potrzebować dodatkowego desenia. Znajduje się on w folderze z instrukcją, żeby program Gimp mógł z niego skorzystać musimy wskazać mu ścieżkę

Bardziej szczegółowo

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

Czym jest wykrywanie kolizji. Elementarne metody detekcji kolizji. Trochę praktyki: Jak przygotować Visual Studio 2010 do pracy z XNA pod Windows Czym jest wykrywanie kolizji. Elementarne metody detekcji kolizji. Trochę praktyki: Jak przygotować Visual Studio 2010 do pracy z XNA pod Windows Phone 7. Skąd i jakie paczki pobrać. Coś napiszemy :-)

Bardziej szczegółowo

Przy dużej wielkości głębokości uzyskamy wrażenie nieskończoności: Dla głębokości zerowej uzyskamy tekst płaski:

Przy dużej wielkości głębokości uzyskamy wrażenie nieskończoności: Dla głębokości zerowej uzyskamy tekst płaski: Temat 6: Tekst w przestrzeni trójwymiarowej. Podstawy tworzenia animacji. Instrukcja warunkowa if. Program pozwala umieszczać na scenie nie tylko bryły, czy figury płaskie, ale też tekst. Polecenie tworzące

Bardziej szczegółowo

UNIWERSYTET RZESZOWSKI KATEDRA INFORMATYKI

UNIWERSYTET RZESZOWSKI KATEDRA INFORMATYKI UNIWERSYTET RZESZOWSKI KATEDRA INFORMATYKI LABORATORIUM TECHNOLOGIA SYSTEMÓW INFORMATYCZNYCH W BIOTECHNOLOGII Aplikacja bazodanowa: Cz. II Rzeszów, 2010 Strona 1 z 11 APLIKACJA BAZODANOWA MICROSOFT ACCESS

Bardziej szczegółowo

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.

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. Elementy programu Paint Aby otworzyć program Paint, należy kliknąć przycisk Start i Paint., Wszystkie programy, Akcesoria Po uruchomieniu programu Paint jest wyświetlane okno, które jest w większej części

Bardziej szczegółowo

Jak tworzyć dobre wizualizacje? Porady do wykorzystania w programie KD Max. MTpartner s.c.

Jak tworzyć dobre wizualizacje? Porady do wykorzystania w programie KD Max. MTpartner s.c. Jak tworzyć dobre wizualizacje? Porady do wykorzystania w programie KD Max MTpartner s.c. 1. Ustawienie widoku 1.1 Zasada mocnych punktów. Jeśli poprowadzimy 2 linie dzielące obraz w pionie na 3 równe

Bardziej szczegółowo

Grafika 3D na przykładzie XNA 3.1

Grafika 3D na przykładzie XNA 3.1 Jacek Matulewski, Tomasz Dziubak Grafika 3D na przykładzie XNA 3.1 ITA-106 Wersja 1.02 (XNA 3.1, PS 2.0) Toruo, listopad 2010 2010 Jacek Matulewski, Tomasz Dziubak. Autor udziela prawa do bezpłatnego kopiowania

Bardziej szczegółowo

CPT-CAD - Program do tworzenia dokumentacji geologicznej i geotechnicznej

CPT-CAD - Program do tworzenia dokumentacji geologicznej i geotechnicznej CPT-CAD - Program do tworzenia dokumentacji geologicznej i geotechnicznej Trzy w jednym?? Moduł CPT-CAD jest przeznaczony do tworzenia: map przekrojów geologicznych i geotechnicznych własnych rysunków

Bardziej szczegółowo

Profesjonalni i skuteczni - projekt dla pracowników branży telekomunikacyjnej

Profesjonalni i skuteczni - projekt dla pracowników branży telekomunikacyjnej PROGRAM SZKOLENIA AutoCAD- Projektowanie układów instalacji elektrycznych, telekomunikacyjnych oraz branżowych obiektów 3D z wykorzystaniem oprogramowania AutoCAD- 40 h Przedmiot / Temat DZIEŃ I Wprowadzenie

Bardziej szczegółowo

Projekt rejestratora obiektów trójwymiarowych na bazie frezarki CNC. The project of the scanner for three-dimensional objects based on the CNC

Projekt rejestratora obiektów trójwymiarowych na bazie frezarki CNC. The project of the scanner for three-dimensional objects based on the CNC Dr inż. Henryk Bąkowski, e-mail: henryk.bakowski@polsl.pl Politechnika Śląska, Wydział Transportu Mateusz Kuś, e-mail: kus.mate@gmail.com Jakub Siuta, e-mail: siuta.jakub@gmail.com Andrzej Kubik, e-mail:

Bardziej szczegółowo

1.3. Tworzenie obiektów 3D. Rysunek 1.2. Dostępne opcje podręcznego menu dla zaznaczonego obiektu

1.3. Tworzenie obiektów 3D. Rysunek 1.2. Dostępne opcje podręcznego menu dla zaznaczonego obiektu 1. Edytor grafiki Draw 1.1. Okno programu Draw W bezpłatnym pakiecie OpenOffice zawarty jest program graficzny Draw (rysunek 1.1), wyposażony w liczne narzędzia do obróbki obiektów. Program możesz uruchomić,

Bardziej szczegółowo

Techniki wizualizacji. Ćwiczenie 10. System POV-ray tworzenie animacji

Techniki wizualizacji. Ćwiczenie 10. System POV-ray tworzenie animacji Doc. dr inż. Jacek Jarnicki Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej jacek.jarnicki@pwr.wroc.pl Techniki wizualizacji Ćwiczenie 10 System POV-ray tworzenie animacji Celem ćwiczenia

Bardziej szczegółowo

Ustawienia ogólne. Ustawienia okólne są dostępne w panelu głównym programu System Sensor, po kliknięciu ikony

Ustawienia ogólne. Ustawienia okólne są dostępne w panelu głównym programu System Sensor, po kliknięciu ikony Ustawienia ogólne Ustawienia okólne są dostępne w panelu głównym programu System Sensor, po kliknięciu ikony Panel główny programu System Sensor (tylko dla wersja V2, V3, V4) Panel główny programu System

Bardziej szczegółowo

INSTRUKCJA UŻYTKOWNIKA. Spis treści. I. Wprowadzenie... 2. II. Tworzenie nowej karty pracy... 3. a. Obiekty... 4. b. Nauka pisania...

INSTRUKCJA UŻYTKOWNIKA. Spis treści. I. Wprowadzenie... 2. II. Tworzenie nowej karty pracy... 3. a. Obiekty... 4. b. Nauka pisania... INSTRUKCJA UŻYTKOWNIKA Spis treści I. Wprowadzenie... 2 II. Tworzenie nowej karty pracy... 3 a. Obiekty... 4 b. Nauka pisania... 5 c. Piktogramy komunikacyjne... 5 d. Warstwy... 5 e. Zapis... 6 III. Galeria...

Bardziej szczegółowo

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

Informatyka I stopień (I stopień / II stopień) Ogólnoakademicki (ogólno akademicki / praktyczny) Załącznik nr 7 do Zarządzenia Rektora nr 10/12 z dnia 21 lutego 2012r. KARTA MODUŁU / KARTA PRZEDMIOTU Kod Nazwa Nazwa w języku angielskim Obowiązuje od roku akademickiego 2012/2013 Programy grafiki rastrowej,

Bardziej szczegółowo

Jak uzyskać efekt 3D na zdjęciach z wykorzystaniem programu InkScape

Jak uzyskać efekt 3D na zdjęciach z wykorzystaniem programu InkScape Jak uzyskać efekt 3D na zdjęciach z wykorzystaniem programu InkScape Program InkScape jest bezpłatnym polskojęzycznym programem grafiki wektorowej do pobrania ze strony http://www.dobreprogramy.pl/inkscape,program,windows,12218.html.

Bardziej szczegółowo

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

Użycie przestrzeni papieru i odnośników - ćwiczenie Użycie przestrzeni papieru i odnośników - ćwiczenie Informacje ogólne Korzystanie z ćwiczeń Podczas rysowania w AutoCADzie, praca ta zwykle odbywa się w przestrzeni modelu. Przed wydrukowaniem rysunku,

Bardziej szczegółowo

Podstawy Programowania 2

Podstawy Programowania 2 Podstawy Programowania 2 Laboratorium 7 Instrukcja 6 Object Pascal Opracował: mgr inż. Leszek Ciopiński Wstęp: Programowanie obiektowe a programowanie strukturalne. W programowaniu strukturalnym, któremu

Bardziej szczegółowo

I. Informacje ogólne. Jednym z takich systemów jest Mambo.

I. Informacje ogólne. Jednym z takich systemów jest Mambo. MAMBO (CMS) I. Informacje ogólne CMS, Content Management System ("system zarządzania treścią") jest to jedna lub zestaw aplikacji internetowych pozwalających na łatwe utworzenie oraz późniejszą aktualizację

Bardziej szczegółowo

Moduł Grafika komputerowa i multimedia 312[01].S2. Ćwiczenia Podstawy programu Autocad 2011 Prosta

Moduł Grafika komputerowa i multimedia 312[01].S2. Ćwiczenia Podstawy programu Autocad 2011 Prosta Moduł Grafika komputerowa i multimedia 312[01].S2 Ćwiczenia Podstawy programu Autocad 2011 Prosta Opracowanie: mgr inż. Aleksandra Miętus na podstawie książki Autocad 2000 ćwiczenia praktyczne. wyd. Helion

Bardziej szczegółowo

6. Organizacja dostępu do danych przestrzennych

6. Organizacja dostępu do danych przestrzennych 6. Organizacja dostępu do danych przestrzennych Duża liczba danych przestrzennych oraz ich specyficzny charakter sprawiają, że do sprawnego funkcjonowania systemu, przetwarzania zgromadzonych w nim danych,

Bardziej szczegółowo

Scenariusz zajęć. Moduł VI. Projekt Gra logiczna zgadywanie liczby

Scenariusz zajęć. Moduł VI. Projekt Gra logiczna zgadywanie liczby Scenariusz zajęć Moduł VI Projekt Gra logiczna zgadywanie liczby Moduł VI Projekt Gra logiczna zgadywanie liczby Cele ogólne: przypomnienie i utrwalenie poznanych wcześniej poleceń i konstrukcji języka

Bardziej szczegółowo

REFERAT O PRACY DYPLOMOWEJ

REFERAT O PRACY DYPLOMOWEJ REFERAT O PRACY DYPLOMOWEJ Temat pracy: Projekt i budowa systemu zarządzania treścią opartego na własnej bibliotece MVC Autor: Kamil Kowalski W dzisiejszych czasach posiadanie strony internetowej to norma,

Bardziej szczegółowo

Przewodnik Szybki start

Przewodnik Szybki start Przewodnik Szybki start Program Microsoft Visio 2013 wygląda inaczej niż wcześniejsze wersje, dlatego przygotowaliśmy ten przewodnik, aby skrócić czas nauki jego obsługi. Zaktualizowane szablony Szablony

Bardziej szczegółowo

Zasady programowania Dokumentacja

Zasady programowania Dokumentacja Marcin Kędzierski gr. 14 Zasady programowania Dokumentacja Wstęp 1) Temat: Przeszukiwanie pliku za pomocą drzewa. 2) Założenia projektu: a) Program ma pobierać dane z pliku wskazanego przez użytkownika

Bardziej szczegółowo

Tom 6 Opis oprogramowania Część 8 Narzędzie do kontroli danych elementarnych, danych wynikowych oraz kontroli obmiaru do celów fakturowania

Tom 6 Opis oprogramowania Część 8 Narzędzie do kontroli danych elementarnych, danych wynikowych oraz kontroli obmiaru do celów fakturowania Część 8 Narzędzie do kontroli danych elementarnych, danych wynikowych oraz kontroli Diagnostyka stanu nawierzchni - DSN Generalna Dyrekcja Dróg Krajowych i Autostrad Warszawa, 21 maja 2012 Historia dokumentu

Bardziej szczegółowo

REFERAT PRACY DYPLOMOWEJ Temat pracy: SUDOKU - Algorytmy tworzenia i rozwiązywania

REFERAT PRACY DYPLOMOWEJ Temat pracy: SUDOKU - Algorytmy tworzenia i rozwiązywania REFERAT PRACY DYPLOMOWEJ Temat pracy: SUDOKU - Algorytmy tworzenia i rozwiązywania Autor: Anna Nowak Promotor: dr inż. Jan Kowalski Kategorie: gra logiczna Słowa kluczowe: Sudoku, generowanie plansz, algorytmy,

Bardziej szczegółowo

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

WYKONANIE APLIKACJI OKIENKOWEJ OBLICZAJĄCEJ SUMĘ DWÓCH LICZB W ŚRODOWISKU PROGRAMISTYCZNYM. NetBeans. Wykonał: Jacek Ventzke informatyka sem. WYKONANIE APLIKACJI OKIENKOWEJ OBLICZAJĄCEJ SUMĘ DWÓCH LICZB W ŚRODOWISKU PROGRAMISTYCZNYM NetBeans Wykonał: Jacek Ventzke informatyka sem. VI 1. Uruchamiamy program NetBeans (tu wersja 6.8 ) 2. Tworzymy

Bardziej szczegółowo

Podstawy OpenCL część 2

Podstawy OpenCL część 2 Podstawy OpenCL część 2 1. Napisz program dokonujący mnożenia dwóch macierzy w wersji sekwencyjnej oraz OpenCL. Porównaj czasy działania obu wersji dla różnych wielkości macierzy, np. 16 16, 128 128, 1024

Bardziej szczegółowo

INFORMATYKA TECHNICZNA Badanie możliwości wykorzystania języka AutoLISP i środowiska VisualLISP w systemie CAx

INFORMATYKA TECHNICZNA Badanie możliwości wykorzystania języka AutoLISP i środowiska VisualLISP w systemie CAx INFORMATYKA TECHNICZNA Badanie możliwości wykorzystania języka AutoLISP i środowiska VisualLISP w systemie CAx 1. WPROWADZENIE Program AutoCAD ma wielu użytkowników i zajmuje znaczące miejsce w graficznym

Bardziej szczegółowo

Ustalanie dostępu do plików - Windows XP Home/Professional

Ustalanie dostępu do plików - Windows XP Home/Professional Ustalanie dostępu do plików - Windows XP Home/Professional Aby edytować atrybuty dostępu do plikow/ katalogow w systemie plików NTFS wpierw sprawdź czy jest Wyłączone proste udostępnianie czyli przejdź

Bardziej szczegółowo

Przetwarzanie grafiki rastrowej na wektorową

Przetwarzanie grafiki rastrowej na wektorową Przetwarzanie grafiki rastrowej na wektorową Inaczej wektoryzacja, lub trasowanie, czyli zastąpienie rysunku rastrowego rysunkiem wektorowym. Wykonanie: Piotr Dróżdż Podstawowe różnice między grafiką wektorową,

Bardziej szczegółowo

Podręcznik użytkownika Obieg dokumentów

Podręcznik użytkownika Obieg dokumentów Podręcznik użytkownika Obieg dokumentów Opracowany na potrzeby wdrożenia dla Akademii Wychowania Fizycznego im. Eugeniusza Piaseckiego w Poznaniu W ramach realizacji projektu: Uczelnia jutra wdrożenie

Bardziej szczegółowo

Spis treści. Rozdział 1. Aplikacje konsoli w stylu ANSI C i podstawowe operacje w Visual C++... 7

Spis treści. Rozdział 1. Aplikacje konsoli w stylu ANSI C i podstawowe operacje w Visual C++... 7 Spis treści Wprowadzenie...n...n... 5 Jak korzystać z tej książki?...t... 6 Rozdział 1. Aplikacje konsoli w stylu ANSI C i podstawowe operacje w Visual C++... 7 Podsumowanie...t...t...15 Rozdział 2. Rozdział

Bardziej szczegółowo

Uwaga! Upadek! Opis zadania konkursowego

Uwaga! Upadek! Opis zadania konkursowego Uwaga! Upadek! Opis zadania konkursowego Zadanie Opracowanie algorytmu automatycznie rozpoznającego upadek osoby na nagraniu wideo i wdrożenie stworzonego rozwiązania jako usługi na superkomputerowej platformie

Bardziej szczegółowo

6.4. Efekty specjalne

6.4. Efekty specjalne 6.4. Efekty specjalne Rozdział ten będzie poświęcony efektom specjalnym, które również znalazły swoje zastosowanie w programie MS PowerPoint 2007. Pierwszym typem efektów jaki zostanie poddany naszej analizie

Bardziej szczegółowo

Stawiamy pierwsze kroki

Stawiamy pierwsze kroki Stawiamy pierwsze kroki 3.1. Stawiamy pierwsze kroki Edytory tekstu to najbardziej popularna odmiana programów służących do wprowadzania i zmieniania (czyli edytowania) tekstów. Zalicza się je do programów

Bardziej szczegółowo

Spis treści. Księgarnia PWN: Roland Zimek - SWiSH Max2 i SWiSH Max3. Wprowadzenie... 9

Spis treści. Księgarnia PWN: Roland Zimek - SWiSH Max2 i SWiSH Max3. Wprowadzenie... 9 Księgarnia PWN: Roland Zimek - SWiSH Max2 i SWiSH Max3 Spis treści Wprowadzenie... 9 1. Opis programu i instalacja... 13 1.1. Nowości w SWiSH Max2... 13 1.1.1. Wygląd okna programu... 13 1.1.2. Język skryptowy...

Bardziej szczegółowo

FORMATY PLIKÓW GRAFICZNYCH

FORMATY PLIKÓW GRAFICZNYCH FORMATY PLIKÓW GRAFICZNYCH Różnice między nimi. Ich wady i zalety. Marta Łukasik Plan prezentacji Formaty plików graficznych Grafika wektorowa Grafika rastrowa GIF PNG JPG SAV FORMATY PLIKÓW GRAFICZNYCH

Bardziej szczegółowo

16) Wprowadzenie do raportowania Rave

16) Wprowadzenie do raportowania Rave 16) Wprowadzenie do raportowania Rave Tematyka rozdziału: Przegląd wszystkich komponentów Rave Tworzenie nowego raportu przy użyciu formatki w środowisku Delphi Aktywacja środowiska Report Authoring Visual

Bardziej szczegółowo

Struktura i funkcjonowanie komputera pamięć komputerowa, hierarchia pamięci pamięć podręczna. System operacyjny. Zarządzanie procesami

Struktura i funkcjonowanie komputera pamięć komputerowa, hierarchia pamięci pamięć podręczna. System operacyjny. Zarządzanie procesami Rok akademicki 2015/2016, Wykład nr 6 2/21 Plan wykładu nr 6 Informatyka 1 Politechnika Białostocka - Wydział Elektryczny Elektrotechnika, semestr II, studia niestacjonarne I stopnia Rok akademicki 2015/2016

Bardziej szczegółowo

EDYCJA TEKSTU MS WORDPAD

EDYCJA TEKSTU MS WORDPAD EDYCJA TEKSTU MS WORDPAD EDYCJA TEKSTU - MS WORDPAD WordPad (ryc. 1 ang. miejsce na słowa) to bardzo przydatny program do edycji i pisania tekstów, który dodatkowo dostępny jest w każdym systemie z rodziny

Bardziej szczegółowo

Transformacja współrzędnych geodezyjnych mapy w programie GEOPLAN

Transformacja współrzędnych geodezyjnych mapy w programie GEOPLAN Transformacja współrzędnych geodezyjnych mapy w programie GEOPLAN Program GEOPLAN umożliwia zmianę układu współrzędnych geodezyjnych mapy. Można tego dokonać przy udziale oprogramowania przeliczającego

Bardziej szczegółowo

Podstawy grafiki komputerowej

Podstawy grafiki komputerowej Podstawy grafiki komputerowej Krzysztof Gracki K.Gracki@ii.pw.edu.pl tel. (22) 6605031 Instytut Informatyki Politechniki Warszawskiej 2 Sprawy organizacyjne Krzysztof Gracki k.gracki@ii.pw.edu.pl tel.

Bardziej szczegółowo

STEROWNIK TUBY LED STM-64

STEROWNIK TUBY LED STM-64 STEROWNIK TUBY LED STM-64 INSTRUKCJA OBSŁUGI DLA WERSJI OPROGRAMOWANIA 1.1 WWW.SIGMA.NET.PL OPIS OGÓLNY Urządzenie przeznaczone jest do sterowania tubami led. Dzięki rozbudowanym funkcjom wyświetla bardzo

Bardziej szczegółowo

Kodu z klasą. Skarb w zatrutej wodzie, cz. 2. Scenariusz 6

Kodu z klasą. Skarb w zatrutej wodzie, cz. 2. Scenariusz 6 W scenariuszu nr 6 kontynuujemy pracę rozpoczętą na poprzednich zajęciach i ukończymy cały scenariusz. Dzisiaj przygotujemy zdarzenia, gdzie fabryka zatruwa wodę i zwierzęta stają się agresywne oraz zaprogramujemy

Bardziej szczegółowo

Obrazowanie za pomocą soczewki

Obrazowanie za pomocą soczewki Marcin Bieda Obrazowanie za pomocą soczewki (Instrukcja obsługi) Aplikacja została zrealizowana w ramach projektu e-fizyka, współfinansowanym przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

Bardziej szczegółowo

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

AutoCAD LT praca na obiektach rastrowych i nakładanie barw z palety RGB na rysunki. AutoCAD LT praca na obiektach rastrowych i nakładanie barw z palety RGB na rysunki. Niniejsza instrukcja jest przewodnikiem po narzędziach służących do wstawiania i edycji obiektów rastrowych dostępnych

Bardziej szczegółowo

OpenGL przezroczystość

OpenGL przezroczystość OpenGL przezroczystość W standardzie OpenGL efekty przezroczystości uzyskuje się poprzez zezwolenie na łączenie kolorów: Kolor piksela tworzy się na podstawie kolorów obiektu przesłanianego i przesłaniającego

Bardziej szczegółowo