OpenGL : Prymitywy, obsługa klawiatury

Podobne dokumenty
Wprowadzenie do QT OpenGL

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

Gry Komputerowe Laboratorium 3. Organizacja obiektów sceny Kolizje obiektów. mgr inż. Michał Chwesiuk 1/20. Szczecin, r

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

Wartości domyślne, szablony funkcji i klas

Dziedziczenie : Dziedziczenie to nic innego jak definiowanie nowych klas w oparciu o już istniejące.

0.1 Hierarchia klas Diagram Krótkie wyjaśnienie

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

Oprogramowanie klawiatury matrycowej i alfanumerycznego wyświetlacza LCD

Ćwiczenia IV - Kontenery (pojemniki)

Tekst ozdobny i akapitowy

Przeniesienie lekcji SITA z płyt CD na ipoda touch

PL/SQL. Zaawansowane tematy PL/SQL

Miejski System Zarządzania - Katowicka Infrastruktura Informacji Przestrzennej

Specyfikacja techniczna banerów Flash

Programowanie 2. Język C++. Wykład 2.

DEMERO Automation Systems

Systemy mikroprocesorowe - projekt

Bazy danych. Andrzej Łachwa, UJ, /15

INSTRUKCJA DO PROGRAMU LICZARKA 2000 v 2.56

InsERT GT Własne COM 1.0

Instrukcja obsługi. Sterownik ścienny KJR10B/DP

Elementy animacji sterowanie manipulatorem

INSTRUKCJA WebPTB 1.0

GEO-SYSTEM Sp. z o.o. GEO-RCiWN Rejestr Cen i Wartości Nieruchomości Podręcznik dla uŝytkowników modułu wyszukiwania danych Warszawa 2007

Elementy cyfrowe i układy logiczne

Opis ogólny AL154SAV5.HT

Komunikacja w sieci Industrial Ethernet z wykorzystaniem Protokołu S7 oraz funkcji PUT/GET

Dyrektor Dzielnicowego Biura Finansów Oświaty - Mokotów m. st. Warszawy

Instalacja. Zawartość. Wyszukiwarka. Instalacja Konfiguracja Uruchomienie i praca z raportem Metody wyszukiwania...

Pierwsze logowanie do systemu I-Bank

System zarządzania bazą danych (SZBD) Proces przechodzenia od świata rzeczywistego do jego informacyjnej reprezentacji w komputerze nazywać będziemy

Tytuł pracy. Praca dyplomowa inżynierska. Filip Piechocki. Tytuł Imię i Nazwisko

PROE wykład 7 kontenery tablicowe, listy. dr inż. Jacek Naruniec

Instrukcja dotycząca generowania klucza dostępowego do Sidoma v8

ST SPECYFIKACJA TECHNICZNA ROBOTY GEODEZYJNE. Specyfikacje techniczne ST Roboty geodezyjne

System Informatyczny CELAB. Przygotowanie programu do pracy - Ewidencja Czasu Pracy

Typy złożone. Struktury, pola bitowe i unie. Programowanie Proceduralne 1

Matematyka z plusemdla szkoły ponadgimnazjalnej WYMAGANIA EDUKACYJNE Z MATEMATYKI W KLASIE TRZECIEJ LICEUM. KATEGORIA B Uczeń rozumie:

Moduł. Rama 2D suplement do wersji Konstruktora 4.6

Transport Mechaniczny i Pneumatyczny Materiałów Rozdrobnionych. Ćwiczenie 2 Podstawy obliczeń przenośników taśmowych

DJCONTROL INSTINCT I DJUCED PIERWSZE KROKI

Centralizacji Systemu. Procedury zasilania danymi systemu LAS oprogramowania do aktualizacji LMN. etap C13 pkt 5

Rozliczenia z NFZ. Ogólne założenia. Spis treści

Podstawy Processingu. Diana Domańska. Uniwersytet Śląski

Podstawy POV-Ray'a. Diana Doma«ska. Uniwersytet l ski. Diana Doma«ska (U ) Podstawy POV-Ray'a 1 / 13

System Zarządzania Relacyjną Bazą Danych (SZRBD) Microsoft Access 2010

SCHEMATY STRON. Baner Nawigacja Nawigacja okruszkowa Prawa kolumna zobacz również Boksy Zwykła strona...

Połączenie VPN Host-LAN IPSec z wykorzystaniem Windows XP. 1. Konfiguracja serwera VPN. 2. Konfiguracja klienta VPN. 3. Zainicjowanie połączenia

Logowanie do mobilnego systemu CUI i autoryzacja kodami SMS

Obsługa pakietu biurowego OFFICE

Zaawansowana adresacja IPv4

Instrukcja. korzystania z ograniczeń obrotu w taryfie celnej TARIC

Funkcje składowe (metody)

3 Przygotował: mgr inż. Maciej Lasota

INTERAKTYWNA APLIKACJA MAPOWA MIASTA RYBNIKA INSTRUKCJA OBSŁUGI

np. tu - na pierwszej formatce kreatora zaznaczamy opcję nr 3

Elementarne obiekty geometryczne, bufory. Dorota Smorawa

Zainstalowana po raz pierwszy aplikacja wymaga aktualizacji bazy danych obsługiwanych sterowników.

EGZAMIN MATURALNY Z MATEMATYKI

BCS Manager Instrukcja Obsługi

FUNKCJE STEROWNIKA PK-35 PID

Algorytmy i Struktury Danych.

AKADEMIA MORSKA W SZCZECINIE

Archiwum Prac Dyplomowych

SPRAWDZIANY Z MATEMATYKI

enova Workflow Obieg faktury kosztowej

Instalacja programu. Omówienie programu. Jesteś tu: Bossa.pl

SpedCust 5 instrukcja instalacji

Podstawy pracy w arkuszu kalkulacyjnym MS Excel

CHEVROLET MYLINK. Krótki przewodnik

ARKUSZ PRÓBNEJ MATURY Z OPERONEM MATEMATYKA

Wykonanie rysunku ćwiczebnego

Bazy danych II. Andrzej Grzybowski. Instytut Fizyki, Uniwersytet Śląski

Opis obsługi systemu Ognivo2 w aplikacji Komornik SQL-VAT

Instrukcja Jak złożyć dokument elektroniczny

Opis instalacji systemu Intranet Komunikator

INSTALACJA ELEKTRYCZNA

Programowanie Ewolucyjne

Politechnika Białostocka

E-faktura PKP Energetyka

1 Klasy. 1.1 Denicja klasy. 1.2 Skªadniki klasy.

1. Tablice zewnętrzne wykonane z PCV o grubości 5 mm z grafiką drukowaną solwentowo, laminowane matowo.

Instrukcja. sporządzania rocznych sprawozdań Rb-WSa i Rb-WSb o wydatkach strukturalnych

Modelowanie obiektów 3D

Instrukcja obsługi panelu operacyjnego XV100 w SZR-MAX-1SX

TEST POPPELREUTERA DIAGNOZA ZABURZEŃ ZMYSŁU RÓWNOWAGI

Jak zaprogramować procesor i. wgrać firmwar-e do yampp3usb. Copyright SOFT COM sp. z o. o.

EGZAMIN MATURALNY Z MATEMATYKI

Instrukcja obsługi Norton Commander (NC) wersja 4.0. Autor: mgr inż. Tomasz Staniszewski

1.Rysowanie wałka. Dostosowanie paska narzędzi Tworzenie nowego wałka. Uniwersytet Technologiczno Przyrodniczy w Bydgoszczy

Zmiany w programie C GEO v. 6.5

Ogólna charakterystyka kontraktów terminowych

czasu pracy 1/2 etatu

WYKŁAD 8. Postacie obrazów na różnych etapach procesu przetwarzania

Przykład implementacji przeciażeń operatorów problem kolizji

Platyna zna rozwiązanie.

HiTiN Sp. z o. o. Przekaźnik kontroli temperatury RTT 4/2 DTR Katowice, ul. Szopienicka 62 C tel/fax.: + 48 (32)

Kancelaris - Zmiany w wersji 2.50

Transkrypt:

OpenGL :, obsługa klawiatury mgr inż. Michał Chwesiuk mgr inż. Tomasz Sergej inż. Patryk Piotrowski 1/23

w OpenGL 2/23

Prymityw - Points (GL_POINTS) 3/23

Prymityw - Lines (GL_LINES) 4/23

Prymityw - Lines Strip (GL_LINE_STRIP) 5/23

Prymityw - Line Loop (GL_LINE_LOOP) 6/23

Prymityw - Triangles (GL_TRIANGLES) 7/23

Prymityw - Triangle Strip (GL_TRIANGLE_STRIP) 8/23

Prymityw - Triangle Fan (GL_TRIANGLE_FAN) 9/23

Prymityw - Quads (GL_QUADS) 10/23

Prymityw - Quad Strip (GL_QUAD_STRIP) 11/23

Prymityw - Polygon (GL_POLYGON) 12/23

13/23

Implementacja kuli Instrukcja opisuje w jaki sposób rozszerzyć kod programu aby umożliwić rendering trójwymiarowej sfery. 1. Otwórz plik cobject.h i do klasy CObject dodaj deklaracje funkcji void generatesphere(float r, int N). Następnie zaimplementuj tę funkcję w pliku cobject.cpp (kod na kolejnym slajdzie). 2. W pliku glwidget.h w klasie GLWidget zadeklaruj zmienne : a. CObject m_obj_sphere; b. c. 3. W pliku glwidget.cpp wewnątrz funkcji initializegl() zainicjuj sferę bazującą na VBO i VAO. a. b. c. d. e. f. g. 4. QOpenGLVertexArrayObject m_vao_sphere; QOpenGLBuffer m_objvbo_sphere; m_obj_sphere.generatesphere(0.5, 24); m_vao_sphere.create(); QOpenGLVertexArrayObject::Binder vaobindersphere(&m_vao_sphere); m_objvbo_sphere.create(); m_objvbo_sphere.bind(); m_objvbo_sphere.allocate(m_obj_sphere.constdata(), m_obj_sphere.count() * sizeof(glfloat)); setupvertexattribs(); Aby wyrenderować sferę, użyć VAO należące do sfery wewnątrz funkcji paintgl() w pliku glwidget.cpp a. QOpenGLVertexArrayObject::Binder vaobindersphere(&m_vao_sphere); b. m_world_stack.push(m_world); c. //Transformacje macierzy modelu (translate, rotate, scale) d. settransforms(); e. vaobindersphere.rebind(); f. gldrawarrays(m_obj_sphere.primitive(), 0, m_obj_sphere.vertexcount()); g. m_world = m_world_stack.pop(); 14/23

Implementacja kuli void CObject::generateSphere(float r, int N) { for (int j = 0; j <= N; ++j) { for (int i = 0; i <= N; ++i) { float θ1= 𝛑 * j / N; float θ2 = 𝛑 * (j - 1) / N; float φ = 𝛑 * 2 * i / N; float nx1 = sin(θ1) * cos(φ); float nx2 = sin(θ2) * cos(φ); float nz1 = sin(θ1) * sin(φ); float nz2 = sin(θ2) * sin(φ); float ny1 = cos(θ1); float ny2 = cos(θ2); float x1 = r * nx1; float x2 = r * nx2; float z1 = r * nz1; float z2 = r * nz2; float y1 = r * ny1; float y2 = r * ny2; add(qvector3d(x1, y1, z1), QVector3D(nx1, ny1, nz1)); add(qvector3d(x2, y2, z2), QVector3D(nx2, ny2, nz2)); } } m_primitive = GL_QUAD_STRIP; } 15/23

Implementacja ostrosłupa Zaimplementować funkcje generatepiramid(float w, float h) w klasie cobject.h Schemat dodawania nowej bryły do projektu podobny jak w przypadku sfery. 16/23

Implementacja walca (podstawa) v1 = QVector3D(radius * cos( 0 * 2 * 𝛑 / 6 ), H, radius * sin( 0 * 2 * 𝛑 / 6 ) ) v2 = QVector3D(radius * cos( 1 * 2 * 𝛑 / 6 ), H, radius * sin( 1 * 2 * 𝛑 / 6 ) ) v3 = QVector3D(radius * cos( 2 * 2 * 𝛑 / 6 ), H, radius * sin( 2 * 2 * 𝛑 / 6 ) ) v4 = QVector3D(radius * cos( 3 * 2 * 𝛑 / 6 ), H, radius * sin( 3 * 2 * 𝛑 / 6 ) ) v5 = QVector3D(radius * cos( 4 * 2 * 𝛑 / 6 ), H, radius * sin( 4 * 2 * 𝛑 / 6 ) ) v6 = QVector3D(radius * cos( 5 * 2 * 𝛑 / 6 ), H, radius * sin( 5 * 2 * 𝛑 / 6 ) ) 17/23

18/23

Implementacja stosu macierzy: #include <qstack.h> - biblioteka zawierająca implementację stosu. QStack<QMatrix4x4> m_world_stack - deklaracja stosu macierzy 4x4. m_world_stack.push(m_world) - dodanie macierzy na wierzch stosu. m_world = m_world_stack.pop() - pobranie macierzy ze stosu. 19/23

Hierarchia stosu macierzy [CharacterTransform] PushMatrix(); [Head] PushMatrix(); SetTransforms(Translate->Rotate->Scale); DrawHead(); PopMatrix(); [Body] PushMatrix(); SetTransforms(Translate->Rotate->Scale); DrawBody(); PopMatrix(); [LeftArmTransform] PushMatrix(); SetTransforms(Translate); [LeftArm] PushMatrix(); SetTransforms(Translate->Rotate->Scale); DrawLeftArm(); PopMatrix(); [LeftPalm] PushMatrix(); SetTransforms(Translate->Rotate->Scale); DrawLeftPalm(); PopMatrix(); PopMatrix(); [RightArmTransform]. [LeftLegTransform] PushMatrix(); SetTransforms(Translate); [LeftLeg] PushMatrix(); SetTransforms(Translate->Rotate->Scale); DrawLeftLeg(); PopMatrix(); [LeftFoot] PushMatrix(); SetTransforms(Translate->Rotate->Scale); DrawLeftFoot(); PopMatrix(); [RightLegTransform]. PopMatrix(); 20/23

21/23

Instrukcja opisuje w jaki sposób rozszerzyć kod programu aby umożliwić poruszanie się obiektem w scenie za pomocą klawiatury. 1. b. char keystate[256]; // Tablica stanów klawiszy. 2. W pliku glwidget.cpp przed rysowaniem obiektów (w funkcji paintgl() ), ale wewnątrz bloku Push/Pop Matrix przesuń obiekt o vector playerposition (użyj funkcji translate na macierzy modelu/świata). 3. W pliku glwidget.cpp w funkcji keypressevent(qkeyevent *e) ustaw keystate[e->key()] na true a. Wymagane sprawdzenie czy e->key() jest w przedziale [0 ; 255]. 4. W pliku glwidget.cpp w funkcji keyreleaseevent(qkeyevent *e) ustaw keystate[e->key()] na Otwórz plik glwidget..h i do klasy CObject dodaj dwie zmienne. a. QVector3D playerposition; // Wektor opisujący pozycję gracza. false a. Wymagane sprawdzenie czy e->key() jest w przedziale [0 ; 255]. 5. Aby poruszać obiektem do przodu po wciśnięciu przycisku W należy dodać poniższy kod na końcu funkcji paintgl() a. if(keystate[qt::key_w]) playerposition.setz(playerposition.z() - 0.02); P.S. Szybkość aktualizacji świata w tym przykładzie jest zależna od szybkości renderingu. Jest to błędne podejście! Aktualizacja świata powinna być niezależna od szybkości renderingu. 22/23

Wersja podstawowa - 0.75pkt Stworzyć obiekt przedstawiający sferę, i narysować macierz sfer na scenie. for(int i = - 5 ; i <= 5 ; i++) for(int j = -5 ; j <= 5 ; j++) { m_world_stack.push(m_world); m_world.translate(i * 0.5f, -0.5f, j * 0.5f); m_world.scale(0.1f, 0.1f, 0.1f); settransforms(); vaobindersphere.rebind(); m_program->setuniformvalue(m_modelcolorloc, QVector3D(i*0.1+0.5, j*0.1+0.5, 0.0)); gldrawarrays(m_obj_sphere.primitive(), 0, m_obj_sphere.vertexcount()); m_world = m_world_stack.pop(); } Zaimplementować ostrosłup. Zaimplementować poruszanie się postaci używając przycisków W,S,A,D. Wersja rozszerzona - 1.00pkt Wersja podstawowa. Implementacja walca i stożka. 23/23