Minimální OpenGL demo

Podobné dokumenty
Výpočet excentrického klikového mechanismu v systému MAPLE 11 Tomáš Svoboda Technická fakulta Česká Zemědělská Univerzita

R β α. Obrázek 1: Zadání - profil složený ze třech elementárních obrazců: 1 - rovnoramenný pravoúhlý trojúhelník, 2 - čtverec, 3 - kruhová díra

Kinematika pístní skupiny

5. Statika poloha střediska sil

CVIČNÝ TEST 35. OBSAH I. Cvičný test 2. Mgr. Tomáš Kotler. II. Autorské řešení 6 III. Klíč 15 IV. Záznamový list 17

Příloha-výpočet motoru

Rovnice rovnováhy: ++ =0 x : =0 y : =0 =0,83

Nejprve si připomeňme z geometrie pojem orientovaného úhlu a jeho velikosti.

( ) ( ) ( ) ( ) Skalární součin II. Předpoklady: 7207

MATURITNÍ TÉMATA Z MATEMATIKY

= cos sin = sin + cos = 1, = 6 = 9. 6 sin 9. = 1 cos 9. = 1 sin cos 9 = 1 0, ( 0, ) = 1 ( 0, ) + 6 0,

VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ BRNO UNIVERSITY OF TECHNOLOGY

NÁSTROJE PRO NÁVRH PARAMETRŮ VYVÁŽENÍ MOTOCYKLOVÉHO ČTYŘTAKTNÍHO MOTORU

Obecná rovnice kvadratické funkce : y = ax 2 + bx + c Pokud není uvedeno jinak, tak definičním oborem řešených funkcí je množina reálných čísel.

Shodná zobrazení v rovině

1 Tuhé těleso a jeho pohyb

Návod k použití softwaru Solar Viewer 3D

Cvičné texty ke státní maturitě z matematiky

Základní parametry a vlastnosti profilu vačky

Gymnázium Jiřího Ortena, Kutná Hora

ŠROUBOVICE. 1) Šroubový pohyb. 2) Základní pojmy a konstrukce

Mgr. Ladislav Zemánek Maturitní okruhy Matematika Obor reálných čísel

Mgr. Tomáš Kotler. I. Cvičný test 2 II. Autorské řešení 7 III. Klíč 15 IV. Záznamový list 17

HVrchlík DVrchlík. Anuloid Hrana 3D síť

CVIČNÝ TEST 41. OBSAH I. Cvičný test 2. Mgr. Tomáš Kotler. II. Autorské řešení 7 III. Klíč 15 IV. Záznamový list 17

- shodnost trojúhelníků. Věta SSS: Věta SUS: Věta USU:

Programování v jazyku LOGO - úvod

4. Statika základní pojmy a základy rovnováhy sil

Diferenciální počet funkcí více proměnných

Projekt OPVK - CZ.1.07/1.1.00/ Matematika pro všechny. Univerzita Palackého v Olomouci

Rasterizace je proces při kterém se vektorově definovaná grafika konvertuje na. x 2 x 1

SMART Notebook verze Aug

Poznámka. V některých literaturách se pro označení vektoru také používá symbolu u.

Vzdělávací obor matematika

Gymnázium Jiřího Ortena, Kutná Hora

Žák plní standard v průběhu primy a sekundy, učivo absolutní hodnota v kvartě.

ZŠ ÚnO, Bratří Čapků 1332

Geometrie. 1 Metrické vlastnosti. Odchylku boční hrany a podstavy. Odchylku boční stěny a podstavy

VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ PRŮVODCE GB01-P03 MECHANIKA TUHÝCH TĚLES

3.4.2 Rovnováha Rovnováha u centrální rovinné silové soustavy nastává v případě, že výsledná síla nahrazující soustavu je rovna nule. Tedy. Obr.17.

Šroubový pohyb rovnoměrný pohyb složený z posunutí a rotace. Šroubovice dráha hmotného bodu při šroubovém pohybu

Obsah. Předmluva 1. Úvod do studia 3 Komu je tato kniha určena 4 Co byste měli předem znát 4 Co se naučíte v učebnici AutoCADu? 5

Moment síly výpočet

Mgr. Tomáš Kotler. I. Cvičný test 2 II. Autorské řešení 6 III. Klíč 15 IV. Záznamový list 17

1.8. Úprava uživatelského prostředí AutoCADu 25 Přednostní klávesy 25 Pracovní prostory 25

MATEMATIKA 5. TŘÍDA. C) Tabulky, grafy, diagramy 1 - Tabulky, doplnění řady čísel podle závislosti 2 - Grafy, jízní řády 3 - Magické čtverce

Modelování blízkého pole soustavy dipólů

9.1 Definice a rovnice kuželoseček

Programátorská dokumentace

Obsah 1 Technologie obrábění na CNC obráběcím stroji... 2

l, l 2, l 3, l 4, ω 21 = konst. Proved te kinematické řešení zadaného čtyřkloubového mechanismu, tj. analyticky

Nápověda CADKON Express

Povrchy, objemy. Krychle = = = + =2 = 2 = 2 = 2 = 2 =( 2) + = ( 2) + = 2+ =3 = 3 = 3 = 3 = 3

Matematika - 6. ročník Očekávané výstupy z RVP Učivo Přesahy a vazby desetinná čísla. - zobrazení na číselné ose

Obsah. 2 Moment síly Dvojice sil Rozklad sil 4. 6 Rovnováha 5. 7 Kinetická energie tuhého tělesa 6. 8 Jednoduché stroje 8

Počítačová grafika RHINOCEROS

VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ FAKULTA STROJNÍHO INŽENÝRSTVÍ

Kinematika tuhého tělesa. Pohyb tělesa v rovině a v prostoru, posuvný a rotační pohyb

Pracovní listy MONGEOVO PROMÍTÁNÍ

Cvičné texty ke státní maturitě z matematiky

ICT podporuje moderní způsoby výuky CZ.1.07/1.5.00/ Matematika planimetrie. Mgr. Tomáš Novotný

Aplikované úlohy Solid Edge. SPŠSE a VOŠ Liberec. Ing. Aleš Najman [ÚLOHA 38 KONTROLA A POHONY]

Trojúhelníky. a jejich různé středy. Součet vnitřních úhlů trojúhelníku = 180 neboli π radiánů.

STEREOMETRIE 9*. 10*. 11*. 12*. 13*

Konstrukce součástky

2) Nulový bod stroje používáme k: a) Kalibraci stroje b) Výchozímu bodu vztažného systému c) Určení korekcí nástroje

FYZIKA I. Rovnoměrný, rovnoměrně zrychlený a nerovnoměrně zrychlený rotační pohyb

Kapitola 2. o a paprsek sil lze ztotožnit s osou x (obr.2.1). sil a velikost rovnou algebraickému součtu sil podle vztahu R = F i, (2.

14. přednáška. Přímka

Rozpis výstupů zima 2008 Geometrie

Mechanika tuhého tělesa

7.5.3 Hledání kružnic II

Předpokládané znalosti žáka 1. stupeň:

7.2.1 Vektory. Předpoklady: 7104

TDS-TECHNIK 13.0 pro ZwCAD

Systematizace a prohloubení učiva matematiky. Učebna s dataprojektorem, PC, grafický program, tabulkový procesor. Gymnázium Jiřího Ortena, Kutná Hora

Interaktivní modely pro Konstruktivní geometrii

Funkce a základní pojmy popisující jejich chování

TECHNOLOGIE ELASTICKÉ KONFORMNÍ TRANSFORMACE RASTROVÝCH OBRAZŮ

Transformace (v OpenGL) příklady a knihovna GLM

TDS-TECHNIK 13.0 pro BricsCad

Diplomová práce Prostředí pro programování pohybu manipulátorů

Reflections, refractions, interreflections

Rovinné přetvoření. Posunutí (translace) TEORIE K M2A+ULA

8 Plochy - vytvoření, rozdělení, tečná rovina a normála. Šroubové plochy - přímkové, cyklické. Literatura:

Semestrální úloha č. 1 z předmětu Moderní programovací postupy Studenti:...

Mechanismy - úvod. Aplikovaná mechanika, 8. přednáška

ELEKTRICKÉ STROJE - POHONY

1. Přímka a její části

A[a 1 ; a 2 ; a 3 ] souřadnice bodu A v kartézské soustavě souřadnic O xyz

F - Mechanika tuhého tělesa

CVIČNÝ TEST 13. OBSAH I. Cvičný test 2. Mgr. Zdeňka Strnadová. II. Autorské řešení 6 III. Klíč 15 IV. Záznamový list 17

Vyučovací předmět: CVIČENÍ Z MATEMATIKY. A. Charakteristika vyučovacího předmětu.

Připravil: David Procházka. Projekce

JEDNOTKY. E. Thöndel, Ing. Katedra mechaniky a materiálů, FEL ČVUT v Praze. Abstrakt

KLASICKÁ MECHANIKA. Předmětem mechaniky matematický popis mechanického pohybu v prostoru a v čase a jeho příčiny.

F n = F 1 n 1 + F 2 n 2 + F 3 n 3.

Souřadný systém. Obr.: Druhý objekt v otočeném souřadném systému


Obsah KAPITOLA 1 13 KAPITOLA 2 33

Transkript:

Projekt do předmětu Počítačová grafika 2007/2008 Minimální OpenGL demo Autoři: Bc. Marek Čevela (xcevel04) Bc. Jan Fajkus (xfajku00) Bc. Dominik Chvíla (xchvila00) Bc. Petr Škarek (xskare00)

Obsah Úvod...3 Postup práce...3 Původní zdrojové kódy...3 Pomocné funkce...3 VykresliKruh...3 VykresliMezikruzi...4 VykresliPlast...4 VykresliVnitrniPlast...4 VykresliKuzel...4 VykresliValec...4 VykresliRouru...5 Řešení jednotlivých součástí...5 Moduly...5 Komplet dílů...5 Kliková hřídel...5 Píst...5 Ojnice...6 Hlava válce...6 Ventil...6 Vačka...6 Osvětlení...7 Průhledný válec...7 Ovládání...8 Rozložení kláves:...8 Obrázková příloha...9

Úvod Úkolem bylo implementovat minimální opengl demo. Požadavky byly následující: Výsledný.exe soubor musí mít velikost maximálně 64kB Program nesmí využívat externí knihovny nebo soubory a musí být přeložitelný na standardních Windows XP SP1 Demo musí být zajímavé, tedy různě se otáčející trojůhelníky nejsou uspokojivé řešení Při řešení jsme se rozhodli vycházet z bakalářské práce jednoho z řešitelů. Tento krok byl logický, neboť přeložený program se vešel do datového limitu 64kB. Pro předvedení funkcí opengl jsme tedy zvolili vizualizaci spalovacích motorů. Práci na projektu jsme rozdělili podle schopností a zájmů každého z řešitelů. Postup práce Hned ze začátku práce na projektu se vyskyt problém. Ne úplně správným pochopením zadání se stalo, že jsme si mysleli, že můžeme použít knihovnu GLUT. Naše mylné vyložení zadání spočívalo v tom, že nelze použít externě uložené textury, zvukové stopy nebo podobné datové soubory. Až v pozdější fázi vývoje projektu jsme zjistili, že se jedná o jakékoli soubory, které nejsou standardně obsaženy ve Windows XP SP1. Tento operační systém ovšem standardně neobsahuje knihovnu glut32.dll, která je ovšem nutná pro využití GLUTu. Bohužel kvůli tomu vznik velký problém s realizací projektu. Všechny školní projekty do počítačové grafiky tuto knihovnu využívaly a psát program bez využití této knihovny pro nás byla novinka. I většina běžně dostupných tutorialů obsahuje hned na prvních řádcích příkaz #include <gl/glut.h>. Velice zásadní částí práce na projektu bylo tedy pochopit, jak pracovat s opengl bez využití GLUTu. Kód z většiny tutoriálů se na Windows nedal ani přeložit, natož aby uspokojivě fungoval. Bylo tedy potřeba složitě skládat kousky použitelného kódu z různých zdrojů. Jako nejvýhodnější zdroj informací se nakonec ukázal tutoriál nehe.ceskehry.cz. Původní zdrojové kódy Protože při původním návrhu nebylo řešeno osvětlení, bylo potřeba funkce generující primitivní objekty přepracovat. Nebyl totiž kladen důraz na lícové a rubové strany polygonů, nebo jejich normálové vektory. Aby bylo možné použít osvětlení, bylo potřeba tento problém vyřešit. Pomocné funkce VykresliKruh Kvůli zachování plynulosti vizualizace i na slabších strojích jsme zvolili variantu s možností regulovat kvalitu vykreslování. Jednoduchou změnou integerové proměnné presnost (což je realizováno pomcí klávesnice) je možné regulovat počet vykreslených polygonů. Tato funkce

pomocí goniometrických funkcí rozloží kruh na požadovaný počet trojůhelníků, jejichž souřadnice počítá ve for cyklu. Dále také zadává jednotlivým trojůhelníkům normálové vektory. Ač se to může zdát zbytečné, vzhledem k tomu, že jsou rovnoběžné (dokonce v jedné rovině), má to svůj důvod. Jde o znovapoužitelnost kódu pro další funkce, kde již trojúhelníky v jedné rovině neleží. Je nutné zadat tři parametry: integerová proměnná presnost určující počet vykreslovaných trojúhelníků proměnná typu float nazvaná polomer určující poloměr výsledného vyplněného kruhu (resp. Nejdelší úhlopříčku n-úhelníka) pole floatů color[4] určující požadovanou barvu VykresliMezikruzi Tato funkce vychází z předchozí. Má o jeden vstupní parametr více. Jde o proměnnou vnitrni_polomer, kteřá určuje vnitřní poloměr mezikruží. To je realizováno pomocí čtyřúhelníků. VykresliPlast Funkce vykresluje plášť válce. Válcová plocha je aproximována čtyřúhelník, jejichž počet se opět určuje hodnotou proměnné presnost. Tvar je tedy ne přímo kulatý, ale jedná se o plášť pravidelného n-bokého hranolu. Vzhledem k maximální velikosti čísla uložitelného do proměnné typu integer, je možné se téměř libovolně přiblížit k dokonale kulatému tvaru. Vzhledem k omezení, které je dáno rastrovým zobrazením na konečném zobrazovacím zařízení, lze říci, že výsledné tvary jsou pro lidské oko dokonale kulaté. Dála je této funkci předávána proměnná polomer, vyska a color[4]. VykresliVnitrniPlast Funkce se chová identicky jako předchozí, ale zaměňuje pořadí vykreslovaných bodů na polygonu (obdélníku) tak, aby lícová strana směřovala dovnitř. VykresliKuzel Záměnou čtyřúhelníků za trojúhelníky ve funkci VykresliPlast a spojením dvou horních bodů do jednoho jsme dosáhli vykreslování pláště kužele. VykresliValec Tato funkce na rozdíl od předchozích již využívá posouvání souřadnic v prostoru (tedy funkci opengl gltranslate) a rotaci souřadnic (funkci glrotate). Nejprve dojde k vykreslení pláště válce. Dále se souřadnice pootočí o 90 a posunou o polovinu výšky válce. Zavolá se funkce

VykresliKruh. Poté se souřadnice otočí o 180, proběhne posun o výšku válce a znova se vykreslí kruh. Zdánlivě zbytečné otočení souřadnic místo posunu opačným směrem je odůvodněné nemusíme nijak jinak hlídat směr, kterým míří normály jednotlivých trojúhelníků. VykresliRouru Funkce vychází z předchozí s tím rozdílem, že navíc využívá proměnnou vnitrni_polomer a volá navíc funkci VykresliVnitrniPlast a místo dvou volání funkce VykresliKruh volá funkci VykresliMezikruzi. Ve výsledku se vykreslí válec, z kterého byl odečten menší válec se stejnou (resp. Větší) výškou a společnou osou. Řešení jednotlivých součástí Moduly Pro jednoduchost implementace je motor kompletován z jednotlivých modulů, obsahujících buď jiné moduly, nebo konkrétní součásti. Základními moduly jsou samotné motory různých typů. Každý z motorů se skládá z jednoho nebo více kompletů. Komplet obsahuje klikovou hřídel, ojnici, píst a hlavu válce. Modul se spouští zavoláním funkce pojmenované podle konkrétního typu motoru. Např. MotorHDTwin88 Komplet dílů Komplet dílů má parametr s názvem faze. Tento parametr určuje v jaké fázi se motor nachází. Pomocí něj se nastavuje uspořádání jednotlivých pístů na klikové hřídeli a aktuální natočení vaček. Před vykreslením je potřeba nastavit úhel naklonění, který určuje skon osy válce. Komplet dílů se volá funkcí Valec Kliková hřídel Modul kliková hřídel se řídí dvěma parametry: faze a zdvih. Zdvih určuje délku jejího ramene. Fáze určuje její natočení. Protože je fáze udávána ve stupních a jednotkou otáčení souřadnic v opengl jsou též stupně, je její vykreslení triviální. Parametr zdvih určuje délku ramene, tedy vzdálenost čepu od osy hřídele. Modul nejprve zajistí příslušné otočení a zavolá vykreslení kliky. V ten okamžik se nejprve vykreslí obě nosné části klikové hřídele a následně čep v požadované vzdálenosti od osy otáčení. Vykreslení klikové hřídele se volá funkcí Klika která následně dvakrát zavolá funkci VykresliKliku Píst Pro výpočet polohy pístu je nutné použít tři parametry: zdvih, delka-ojnice a faze. Protože pohyb pístu v čase není funkcí sinus, je nutné uvažovat i délku ojnice. Při nekonečně dlouhé ojnici by se pohyb pístu sinusovce přiblížil úplně, ale protože modelujeme reálné motory, musíme použít složitější funkci d = r*(1+( λ /4)-cos(φ)-( λ *cos(φ)/4)) kde d je dráha pistu, φ je natočení kliky a λ je poměr délky ramene kliky r a délky ojnice. Po výpočtu polohy pístu se nastaví počátek souřadnic na ono místo a píst se vykreslí funkcí Píst,

která vypočte aktuální souřadnice, posune počátek souřadné soustavy a zavolá funkci VykresliPist Ojnice Ojnice používá pro výpočet stejné parametry jako píst. Nejprve se spočítá poloha ramene klikové hřídele pomocí dvou rovnic x=d*cos(φ) y=d*sin(φ) kde d je zdvih a do vypočtených souřadnic se posune střed souřadného systému. Pak se vypočítá úhel naklonění pomocí následujících rovnic β=arsin(sin(α)*d/2*l) γ=2*π-(α+β) ω=2*π-(α+γ) kde d je zdvih, l je délka ojnice, α je úhel pootočení klikové hřídele od horní úvratě, ω je výsledný úhel. O výsledný úhel se souřadný systém pootočí a ojnice se zadanou délkou je vykreslena. Správnost výpočtu polohy všech třech součástí způsobí to, že ojnice lícuje jak s klikovou hřídelí, tak s pístním čepem. Vykreslení zajišťuje funkce VykresliOjnici. Hlava válce Tento modul používá opět stejné parametry jako moduly předchozí. Přesune souřadný systém nad horní úvrať pístu použitím součtu délky ojnice, poloviny zdvihu, výšky pístu a výšky spalovacího prostoru. Potom zavolá modul ventil pro sací a pro výfukový ventil. Vzhledem k vzájemnému pootočení vaček sání a výfuku předá výfukovému ventilu fázi o 180 větší. Pokud je aktivována volba DOHC, zavolá obě vačky dvakrát. Samozřejmě vše s příslušným posunutím a nakloněním. To zajišťuje funkce Hlava. Ventil Přepočítání fáze klikové hřídele na fázi vačky, která se točí dvakrát pomaleji, je realizováno jednoduchým vydělením fáze dvěma. Následuje vykreslení ventilu v odpovídající poloze. Kromě ventilu je také vykresleno sedlo ventilu pro názornější zobrazení funkce. Po posunutí souřadnic o délku ventilu je zavolán modul vačka. Ventil je vykreslován funkcí Ventil. Vačka Návrh vačky byl velice komplikovaný, protože reálné vačky mají tvar jen těžko matematicky popsatelný. Nakonec se osvědčilo vačku modelovat jako modifikovanou kružnici. V polovině jejího obvodu je jedna ze souřadnic násobena konstantou 2.0, což sice neodpovídá realitě, ale je jednoduché na výpočet, tvar se podobá reálné vačce a pohyb ventilu je pro naši simulaci příznivější. Tímto zkreslením se zvětšuje doba překřížení ventilů, která by při reálném zobrazení nebyla dostatečně výrazná a postřehnutelná. Vykreslování vačky má na starost funkce VykresliVacku

Osvětlení Celkem 2 statická světla na různé pozici Obstarává funkce : void Svetlo (int svetlo_x, bool svetlo_zap_vyp, bool osvetleni) parametry funkce: svetlo_x zapnutí světla x (x značí číslo světla) bool svetlo_zap_vyp zapnutí / vypnutí světel osvetleni zapnuti / vypnuti osvetleni Funkce nastavuje složky světla a vlastnosti materiálu, pozici světla, zapíná vypíná světla a zapíná vypíná osvětlení. Průhledný válec Vykreslení průhledného válce pro píst Obstarává funkce : void VykresliRouruV(int presnost, float polomer, float vyska, float color[4]) parametry funkce: presnost kvalita vykreslení polomer poloměr válce vyska výška válce color nastavení barvy válce Vykreslení válce čtyřúhelníky. void VykresliValecPistu() Zapnutí průhlednosti, volání funkce VykresliRouruV() pro vykreslení válce.

Ovládání Program je ovládán z klávesnice. Ovádání myší by bylo příliš komplikované realizovat bez využití služeb knihovny GLUT. Navíc by se zbytečně zvětšoval datový objem finálního binárního.exe souboru. Vzhledem k možnosti plnohodnotného ovládání pomocí klávesnice by to navíc bylo duplicitní. Rozložení kláves: Esc, X ukončení programu F1 zapnutí/vypnutí fullscreen zobrazení Q zvýšení rychlosti animace W snížení rychlosti animace PageDown zvýšení kvality zobrazení PageUp snížení kvality zobrazení 1 motor V2 45 2 motor R4 3 jednoválcový motor 4 motor V12 5 hvězdicový motor 6 hvězdicový motor s pevnou klikou 7 motor W12 8 motor R6 9 desetiválcový motor s protiběžnými písty 0 motor R3 P zobrazení/skrytí pístu R zobrazení/skrytí ojnice C zobrazení/skrytí klikové hřídele A vypnutí světel S zapnutí světel D vypnutí osvětlení F zapnutí osvětlení V přepínání SOHC/DOHC směrové šipky otáčení modelu Zdroje: http://nehe.ceske-hry.cz/tut_01.php (nehe tutorial) http://www.root.cz/clanky/opengl-28-blending/ (dokumentace funkcí pro průhlednost) http://www.fi.muni.cz/~ptx/pv112/slides/pga06.pdf (str. 22, nastavení složek vlastností světla) Příklady cvičení PGR nastavení světel, průhlednost Bakalářská práce: Vizualizace cyklických motorů, Bc. Jan Fajkus, VUT FIT, Brno, 2007

Obrázková příloha