Symulacja samochodu z kamerą stereowizyjną. Krzysztof Sykuła 15 czerwca 2007

Podobne dokumenty
Język Java część 2 (przykładowa aplikacja)

Zad. 6: Sterowanie robotem mobilnym

Języki i techniki programowania Ćwiczenia 3 Dziedziczenie

Plan wykładu. Akcelerator 3D Potok graficzny

Język Java część 2 (przykładowa aplikacja)

Aplikacje w środowisku Java

Wizualizacja danych sensorycznych Projekt Tworzenie grafiki stereoskopowej. Marek Gulanowski

Programowanie obiektowe

UML a kod w C++ i Javie. Przypadki użycia. Diagramy klas. Klasy użytkowników i wykorzystywane funkcje. Związki pomiędzy przypadkami.

Klasy abstrakcyjne i interfejsy

Kurs programowania. Wstęp - wykład 0. Wojciech Macyna. 22 lutego 2016

Język JAVA podstawy. wykład 2, część 2. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Programowanie obiektowe

Konstruktory. Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut.

Programowanie obiektowe

Przekształcenia geometryczne. Dorota Smorawa

Zad. 5: Sterowanie robotem mobilnym

Podstawy programowania, Poniedziałek , 8-10 Projekt, część 1

Pierwsze kroki. Algorytmy, niektóre zasady programowania, kompilacja, pierwszy program i jego struktura

Programowanie obiektowe - 1.

Wątki w Javie. Piotr Tokarski

Systemy wirtualnej rzeczywistości. Komponenty i serwisy

Referat Pracy Dyplomowej

Technologie i usługi internetowe cz. 2

Laboratorium z przedmiotu Programowanie obiektowe - zestaw 04

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Programowanie obiektowe

Interfejsy w Java. Przetwarzanie równoległe. Wątki.

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

Podstawy Języka Java

Podstawy tworzenia aplikacji z wykorzystaniem języka Java ME ćwiczenia 2

Janusz Ganczarski. OpenGL Pierwszy program

Wzorce projektowe. dr inż. Marcin Pietroo

Aplikacje w Javie- wykład 11 Wątki-podstawy

Programowanie obiektowe

Zad. 7: Sterowanie robotami mobilnymi w obecności przeszkód

Wprowadzenie do projektu QualitySpy

Przykłady oprogramowania wykorzystujacego Qt

Zad. 6: Sterowanie robotami mobilnymi w obecności przeszkód

Zadanie polega na stworzeniu bazy danych w pamięci zapewniającej efektywny dostęp do danych baza osób.

Java Podstawy. Michał Bereta

XQTav - reprezentacja diagramów przepływu prac w formacie SCUFL przy pomocy XQuery

Język JAVA podstawy. wykład 2, część 1. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Unity 3D - własny ekran startowy i menu gry

Polimorfizm, metody wirtualne i klasy abstrakcyjne

Wstęp Budowa Serwlety JSP Podsumowanie. Tomcat. Kotwasiński. 1 grudnia 2008

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji.

Dokumentacja do API Javy.

Zdarzenia Klasa Application Powiadomienia Toast AlertDialog

Grafika komputerowa i wizualizacja

Laboratorium Komputerowych Systemów Rozpoznawania Projekt 2. Lingwistyczne podsumowania baz danych

Java - wprowadzenie. Programowanie Obiektowe Mateusz Cicheński

LABORATORIUM 7 Cel: 1_1

Gry Komputerowe Laboratorium 1. Zajęcia organizacyjne Animacja z uwzględnieniem czasu. mgr inż. Michał Chwesiuk 1/22. Szczecin,

Java Język programowania

PHP 5 język obiektowy

Uczeń/Uczennica po zestawieniu połączeń zgłasza nauczycielowi gotowość do sprawdzenia układu i wszystkich połączeń.

PWSG Ćwiczenia 12. Wszystkie ukończone zadania należy wysłać na adres: lub

2 Przygotował: mgr inż. Maciej Lasota

UML a kod. C++, Java i C#

TEMAT :Animacja Komputerowa. Projekt współfinansowany w ramach Europejskiego Funduszu Społecznego

1 Atrybuty i metody klasowe

0.1. Diagram klas i pakietów

Podstawy tworzenia aplikacji z wykorzystaniem języka Java ME ćwiczenia 1

Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz

Dokumentacja projektu Makao karciana gra sieciowa

Programowanie obiektowe zastosowanie języka Java SE

Aplikacje RMI

Dokumentacja aplikacji Szachy online

6.4. Efekty specjalne

TEMAT : KLASY DZIEDZICZENIE

Podstawy projektowania systemów komputerowych

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

Wywoływanie metod zdalnych

Multimedia JAVA. Historia

Interfejsy. Programowanie obiektowe. Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej

Programowanie Urządzeń Mobilnych. Część II: Android. Wykład 2

Programowanie obiektowe

GRAFIKA KOMPUTEROWA 7: Kolory i cieniowanie

Dziedziczenie jednobazowe, poliformizm

PRZEWODNIK PO PRZEDMIOCIE

Klasy abstrakcyjne, interfejsy i polimorfizm

Współbieżność i równoległość w środowiskach obiektowych. Krzysztof Banaś Obliczenia równoległe 1

Wątek - definicja. Wykorzystanie kilku rdzeni procesora jednocześnie Zrównoleglenie obliczeń Jednoczesna obsługa ekranu i procesu obliczeniowego

Java jako język programowania

Referat pracy dyplomowej

Podstawy Programowania Programowanie Obiektowe

C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie C++ - DZIEDZICZENIE.

Podczas dziedziczenia obiekt klasy pochodnej może być wskazywany przez wskaźnik typu klasy bazowej.

Tworzenie prezentacji w MS PowerPoint

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

Programowanie komputerowe. Zajęcia 7

Język JAVA podstawy. Wykład 4, część 1. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Tutorial prowadzi przez kolejne etapy tworzenia projektu począwszy od zdefiniowania przypadków użycia, a skończywszy na konfiguracji i uruchomieniu.

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Misja #1 Poznajemy Prophio.

Dziedziczenie. Tomasz Borzyszkowski

WSNHiD, Programowanie 2 Lab. 2 Język Java struktura programu, dziedziczenie, abstrakcja, polimorfizm, interfejsy

SpriteKit. Biblioteka do tworzenia gier wbudowana w SDK. Wspiera grafikę 2D w oparciu o sprite y

Transkrypt:

Symulacja samochodu z kamerą stereowizyjną Krzysztof Sykuła 15 czerwca 2007 1

1 Opis wykonanego projektu Symulacja samochodu z kamerą stereowizyjną była pretekstem do napisania Engine u 3D, wykorzystującego opengl przy pomocy którego w szybki i intuicyjny sposób, można byłoby tworzyć wizualizacje rożnych problemów z dziedziny robotyki. Engine napisany został w javie co ma swoje wady i zalety, niewątpliwie wadą jest szybkość działania takiego Engine u lecz gdy uznamy, że nie chcemy stworzyć ultra realistycznej grafiki z realistycznymi cieniami itd... to dostrzeżemy zalety w postaci wieloplatformowości takiej aplikacji. Warunkiem uruchomienia mojej aplikacji lub tworzenia innej z wykorzystaniem mojego projektu jest posiadanie aktualnej wersji javy oraz biblioteki jogl. Poniżej na rys1 zamieściłem screenshota stworzonej symulacji samochodu. Aby uruchomić aplikacje należy wpisać w linii komend: java-jar symulator.jar. Rysunek 1: Symulator samochodu. 2

2 Omowienie klas oraz etapów renderowania obiektów 3D. 2.1 Diagramklas. Poniżej przedstawiłem diagram ważniejszych klas oraz metod na które należy zwrócić uwage, aby poprawnie tworzyć kolejne etapy renderowania obiektów 3D. Transfolmowalny Renderowalny +renderuj() Transformacje GLEventListener +display() +init() +displaychanged() +reshape() AbsObiekt3D +dodajpotomka() +dodajobserwatora() +renderujpotomkow() +wlaczobserwatorow() SterowanieMysza +dodajtransformowalny() AbsScena ZrodloSwiatla Obserwator Obserwowalny Obiekt3D +obserwuj() Pojazd Rysunek 2: Diagram klas. 2.2 KlasaAbsObiekt3D. Klasa AbsObiekt3D jest klasą, po której dziedziczą wszystkie obiekty 3D, będące elementami renderowanej sceny. Obiektem 3D jest beczka, źródło 3

światła a także kamera. Klasa AbsObiekt3D posiada wszystkie wspólne cechy obiektów 3D, a dziedzicząc po klasie Transformacje otrzymuje zestaw metod służących do transformowania obiektu w przestrzeni 3D. We wszystkich klasach dziedziczonych po klasie AbsObiekt3D, należy przedefiniować metode implementowaną z interfejsu Renderowalny. 2.2.1 InterfejsRenderowalny Interfejs Renderowalny służy do implementacji rysowania danego obiektu 3D w charakterystyczny dla niego sposób. Wszystkie operacje na obiekcie 3D, które chcemy zobaczyć na ekranie, powinny być umieszczane w metodzie renderuj(), która jest implementowana z wyżej wspomnianym interfejsem. Poniżej zamieszczam przykładowy kod z przedefiniowaną metodą renderuj. public void renderuj(){ if(!niewidoczny) { gl.gltranslatef(transx, transy, transz); gl.glrotatef(-roty, 0, 1, 0); gl.glrotatef(-rotx, 1, 0, 0); gl.glrotatef(-rotz, 0, 0, 1); for(int j = 0; j model3d.pobierziloscelementow(); j++) { gl.glcalllist(model3d.pobierzelement(j).pobierzteksture().pobierznrid()); gl.glcalllist(model3d.pobierzelement(j).pobierznrid()); } renderujpotomkow(); gl.glrotatef(rotz, 0, 0, 1); gl.glrotatef(rotx, 1, 0, 0); gl.glrotatef(roty, 0, 1, 0); gl.gltranslatef(-transx,-transy,-transz); } } Na początek należy zauważyć, że każdy niewidoczny obiekt nie jest renderowany w celu optymalizacji szybkości engine u. Kolejna sprawa na którą należy zwrócić uwagę to model3d, będący polem dziedziczonym po klasie AbsObiekt3D. Model3D to obiekt klasy Model3D, opisujący obiekt 3D wczytany z pliku wavefront obj. Każdy model3d składa się z elementów, które mają przypisane listy wyświetlania opengl. Lokalny układ współrzędnych, każdego modelu 3D starałem się umieszczać w początku globalnego 4

układu współrzędnych, co ułatwia transformowanie w przestrzeni 3D. Dokładniejszy opis klasy Model3D znajduje się w dokumentacji. Gdy już stworzymy obiekt 3D należy się zastanowić w jaki sposób chcemy rysować jego i jego ewentualnych potomków. Można zrobić to w nastepujący sposób: 1. Przesuwamy lokalny układ współrzędnych obiektu 3D 2. Rysujemy jego wszystkie elementy poprzez wezwanie list wyświetlania opengl 3. Rysujemy potomków obiektu 3D względem jego obecnej pozycji 4. Przesuwamy lokalny układ współrzędenych obiektu 3D do pozycji początkowej 2.3 KlasaObserwator Główną klasą dziedziczoną po AbsObiekt3D jest Obserwator. Obserwator reprezentuje wirtualną kamerę, która jest skierowana na scene. Obserwator może być statyczny lub ruchomy. Wszystkie obiekty, które chcemy narysować na scenie, łącznie ze sceną dodajemy jako potomków do obserwatora, a następnie uruchamiamy metodę renderuj(). Najważniejsze jest aby pamiętać,o uruchomieniu obserwatora na samym początku kolejki renderowania tzn. nie możemy dodawać Obserwatora jako potomka do innego obiektu. Obserwatora uruchamiamy tak, jak każdy inny obiekt dziedziczony po klasie AbsObiekt3D metodą renderuj(). 2.3.1 Obserwatorstatyczny Prosty przykład użycia obserwatora to kamera statyczna, która jest ustawiona na stałe w dowolnym miejscu na scenie. W tej sytuacji wszystkie obiekty łącznie ze sceną dodajemy jako potomków do obserwatora i uruchamiamy go metodą renderuj(). 2.3.2 Obserwatorruchomy Są przypadki w których chcemy aby jakiś ruchomy obiekt 3D był śledzony przez kamerę, w takim przypadku musimy wykonać kilka operacji, które nam toumożliwią,asąto: 1. Tworzymy nową klasę dziedziczoną po AbsObiekt3D i imlpementującą interfejs Obserwowalny którą nazwiemy SledzonyObiekt3D. 5

2. W metodzie obserwuj() implementowanej z interfejsu Obserwowalny definiujemy sposób zachownia się obserwatora czyli to w jaki sposób ma podążać za śledzonym obiektem 3D. W metodzie obserwuj, musi się znajdować uruchomienie metody wlaczobserwatorow() dziedziczonej po AbsObiekt3D, która uruchomi wszystkich obserwatorów dodanych do śledzonego obiektu 3D. W tym przypadku nie używamy metody renderuj() do uruchomienia obserwatora, jak to miało miejsce w przypadku obserwatora statycznego. 3. Tworzymy obiekt klasy Obserwator i dodajemy go metodą dodajobserwatora() do śledzonego obiektu 3D. 4. Sledzony obiekt 3D uruchamiamy metodą obserwuj(). 2.4 KlasaAbsScena Klasa dziedziczona po AbsObiekt3D oraz implementująca interfejs GLEventListener. Klasę tą należy odziedziczyć i przedefiniować 5 metod tzn. renderuj(), init(), display(), dispalychanged() oraz reshape(). Należy zwrócić szczególną uwagę na dwie metody pierwszą z nich jest init() w której inicjalizujemy wszystkie obiekty 3D oraz opcje renderowania w opengl. Druga metodą jest display() w której uruchamiamy drzewo renderowania obiektów 3D rozpoczynając od korzenia, którym jest obiekt klasy Obserwator. Następnie obserwator uruchamia potomków lub jak kto woli liście. 2.5 KlasaZrodloSwiatla To klasa reprezentyjąca opengl owe światła, obiekt tej klasy jak każdego inny obiekt klasy AbsObiekt3D dodajemy jako potomka do sceny albo do innego obiektu, może być to ruchomy obiekt. Opisy wszystkich metod operujących na tej klasie znajdują się w dokumentacji. 2.6 KlasaObiekt3D Klasa reprezentuje dowolny statyczny obiekt 3D z typowymi własnościami oczywiście klasa może być przedefiniowana i reprezentować jakiś charakterystyczny obiekt. 6

3 Wnioski i uwagi do projektu Napisany przeze mnie engine 3D jest fazie rozwoju. W przyszłości chcę go udoskanalać o takie elementy jak np. wykrywanie kolizji i realistyczne cienie. Literatura [1] Java. Tworzenie gier. David Brackeen, Bret Barker [2] OpenGl. Księga eksperta. Richard S. Wright, Michael Sweet. 7