Články

7.2: Kreslenie polygónov za daných podmienok


7.2: Kreslenie polygónov za daných podmienok

7.2: Kreslenie polygónov za daných podmienok

Vyriešte problémy týkajúce sa mierkových výkresov geometrických obrazcov vrátane výpočtu skutočných dĺžok a plôch z mierkového výkresu a reprodukcie mierkového výkresu v inej mierke.

Nakreslite (od ruky, pomocou pravítka a uhlomera a pomocou technológie) geometrické tvary za daných podmienok. Zamerajte sa na konštrukciu trojuholníkov z troch mier uhlov alebo strán. Všimnite si, keď podmienky určujú jedinečný trojuholník, viac ako jeden trojuholník alebo žiadny trojuholník.

Popíšte dvojrozmerné obrazce, ktoré sú výsledkom krájania trojrozmerných obrazcov, ako v rovinných úsekoch pravých obdĺžnikových hranolov a pravých obdĺžnikových pyramíd.

Spoj sa s nami

Informácie o užívateľovi Math Chimp

Matematický šimpanz bol vytvorený pedagógmi a je ideálny pre deti, rodičov a učiteľov. MathChimp.com je domovom online matematických hier, videí a pracovných listov pre zosilňovače najvyššej kvality. Všetky naše činnosti sú v súlade s bežnými základnými normami. Naším poslaním je poskytovať pútavé a užitočné spoločné aktivity pre 1. až 8. ročník.

Matematické hry

Matematické videá

Matematické pracovné listy


Ohodnoťte a sledujte svoje obľúbené aktivity!


7.2: Kreslenie polygónov za daných podmienok

Podobnosť a dilatácie

Podobné mnohouholníky majú rovnaký tvar, ale môžu mať rôzne veľkosti. The

symbol znamená „je podobný“. Keď pomenujete podobné polygóny, uveďte ich zodpovedajúce vrcholy v rovnakom poradí.

Podobné mnohouholníky

Zodpovedajúce uhly sú zhodné.

Zodpovedajúce dĺžky strán sú proporcionálne.

Identifikácia podobných polygónov

Sú tieto televízne obrazovky podobné?

Krok 1 Zodpovedajúce uhly sú zhodné. Každý uhol meria 90 o.

∠ A ≅ ∠ E, ∠ B ≅ ∠ F, ∠ C ≅ ∠ G, ∠ D ≅ ∠ H

Krok 2 Zodpovedajúce dĺžky strán sú proporcionálne.


Preto štvoruholník A B C D

Štvoruholník EFGH. Televízne obrazovky sú podobné.

Používanie podobných trojuholníkov

Zodpovedajúce dĺžky strán sú proporcionálne.

Hodnota r je 24 metrov.

1. Nájdite hodnotu X.

Q uadrilateral FGHJ

Použitie nepriameho merania

CJ je 5 stôp vysoký a vrhá 7 stôp tieň. Zároveň strom vrhá 14-stopový tieň. Vytvorené trojuholníky sú podobné. Nájdite výšku stromu.

Môžete použiť pomernú časť na zistenie výšky stromu.

Krok 1 Napíš pomernú časť.


Krok 2 Nahraďte dané hodnoty.

Krok 3 Vyriešte pomer.

Dilatácia postavu roztiahne alebo zmenší. Obrázok vytvorený dilatáciou je podobný pôvodnej figúre. Faktor mierky pri rozšírení je pomer zodpovedajúcich dĺžok strán. V tomto kurze bude pôvodom vždy centrum dilatácie.

Rozšírenie
Ak chcete rozšíriť polygón, vynásobte súradnice každého vrcholu koeficientom mierky k a spojte vrcholy.

Dilatácia mnohouholníka

Štvoruholník A B C D má vrcholy A(-1, -1), B(0, 1), C.(2, 2) a D(3, 0). Dilatujte pomocou mierky 3.

Krok 1 Nájdite vrcholy obrázka.

Krok 2 Vytvorte graf štvoruholníka.

Vytvorte polygón s danými vrcholmi. Potom po dilatácii pomocou faktora mierky jeho obrázok nakreslite v grafe k.

Vytvorte graf mnohouholníka s danými vrcholmi. Potom po dilatácii pomocou faktora mierky jeho obrázok nakreslite v grafe k.

3. Štvoruholník CDGH má vrcholy C.(-6, -6), D(-3, -3), G(0, -3) a H(3, -6) k = 3

4. Tommy je vysoký 5 stôp a vrhá 3-stopový tieň. Vlajkový stĺp súčasne vrhá 15-metrový tieň. Aký matematický nápad môže použiť Tommy na zistenie výšky vlajkového stĺpa?

5. ΔLMN je podobný ΔPQR. Nájdite hodnotu X.

6. Pomocou podobných trojuholníkov vyhľadajte hodnotu X.

7. Nájdite dĺžku AB ak ΔABD

1,8 m
2.
3.
4. C.
5. 12 stôp
6. 40 o
7. C.


Aktívne stránky a podmienky prostredia

Podmienky prostredia môžu ovplyvňovať aktívne miesto enzýmu a rsquos, a teda rýchlosť, akou môže prebiehať chemická reakcia. Zvyšovanie teploty prostredia všeobecne zvyšuje reakčné rýchlosti, pretože molekuly sa pohybujú rýchlejšie a je pravdepodobnejšie, že prídu do vzájomného kontaktu.

Avšak zvýšenie alebo zníženie teploty mimo optimálneho rozsahu môže ovplyvniť chemické väzby v enzýme a zmeniť jeho tvar. Ak enzým zmení tvar, aktívne miesto sa už nemusí viazať na vhodný substrát a rýchlosť reakcie sa zníži. Dramatické zmeny teploty a pH nakoniec spôsobia denaturáciu enzýmov.


7.2: Kreslenie polygónov za daných podmienok

Kalkulačka mnohostrannej polygónovej geometrie Pozri tiež: Šablóny polygónu na tlač v plnom rozsahu

Kliknutím na požadovaný tvar prejdete do správnej kalkulačky.

Všetky metrické vstupy v milimetroch (pokiaľ nie je uvedené inak)


Ak rezáte bloky, betón, kameň alebo NIČ a je tu PRACH - NEBEZPEČENSTVO RIZIKO
Nestrihajte to ani nekrájajte na mokro, aby NENECHAL PRACH - Silicosis Sucks
A ak rezáte mokro, noste masku - v rozprašovacej hmle je tiež prach!

Ako by sme to mali vyhláskovať?
Merač
Merač


Výsledky

3/8"
Aj keď priemer a obvod ako rozmery - nevyzerajú, že by sedeli veľmi dobre
Ak v USA niekedy dôjde k metrickému meraniu, budete môcť na meranie metrov použiť merač - merač
(A keď sa vrátime späť na mesiac, poďme Metric, ay?)

Kalkulačka | Zmerajte uhly | Úroveň bubliny

Pomôžte nám propagovať túto bezplatnú službu - Povedzte o tejto stránke priateľovi!

Vytvorte PDF a vytlačte diagramy na tejto stránke. Pomoc Tlač Pomocníka (nové okno)

Skopírujte všetky diagramy na tejto stránke do dolnej časti stránky - vytvorte viac kópií na tlač alebo porovnanie.

Zobraziť stránku v telefóne pomocou QR kódu (nie aktuálny výsledok výpočtu)

& quest Kopírovať všetky diagramy na tejto stránke do dolnej časti stránky - vytvoriť viac kópií na tlač alebo porovnanie výsledkov na porovnanie diagramov

Použite klávesnicu & # 9668 & # 9658
doladiť posúvače

Ak ste využívali výhody tejto bezplatnej služby, zvážte podporu:

blocklayer .com

Online miestne kalkulačky s možnosťou zväčšenia a zmenšenia animovaných podrobných diagramov a šablón na tlač
pre všetky stavebné úlohy + práce s drevom, kovy a remeslá

Všetky kalkulačky na tejto stránke sú iba geometrické.
Skontrolujte príslušné miestne predpisy týkajúce sa vhodných veľkostí, rozstupov a všetkých technických požiadaviek.


Štvorstranné polygóny (štvoruholníky)

Po trojuholníkoch je typ tvaru, s ktorým sa stretneme najviac, ten štvoruholník:

Všimnite si, že 4-góny môžu všeobecne vyzerať dosť zvláštne a nepravidelne. Existuje niekoľko zvláštnych prípadov, na ktorých nám záleží. (Pozri nižšie)

Štvorce

Upozorňujeme, že štvorec môže mať rôzne veľkosti a môžete ho otáčať. Vyššie je uvedených niekoľko príkladov štvorcov.

Obdĺžniky

Opäť platí, že obdĺžniky majú rôzne veľkosti a ak chceme, môžeme ich nakresliť pod určitým uhlom. Pokiaľ sú všetky uhly 90 stupňov, bude to reangang.

Paralelogramy

Technicky sme nedefinovali, čo znamená paralelnosť, ale znamená to, že sa tieto dva segmenty nikdy nestretnú, aj keď by ste mali pokračovať nekonečne ďaleko. Známe príklady sú napríklad ľavá a pravá strana rebríka alebo dvojité čiary, ktoré vidíte na niektorých diaľniciach.

Kosoštvorce

Ak ste hrali karty, toto je tvar diamantov & # 160 :)

Polygóny všeobecne

Polygón: A mnohouholník je uzavretá rovinná figúra vyrobená spojením úsečiek. Segmenty sa nemusia krížiť a každý segment sa musí v koncových bodoch spojiť s presne dvoma ďalšími.

Ďalej uvádzame niekoľko príkladov vecí, ktoré sú mnohouholníkmi, a vecí, ktoré nie sú mnohouholníkmi.

Ľavá figúrka nie je zatvorená a číslice v strede nie sú vyrobené z líniových segmentov. Obrázok vpravo nie je mnohouholník, pretože jeho strany sa navzájom pretínajú.


Slovo „vertex“ je presnejšie ako bežný výraz „corner“, pretože „corner“ má v angličtine mnoho ďalších použití. Množné číslo „vrcholu“ je „vrcholy“ - trojuholník má tri vrcholy.

Polygón identifikujeme zvyčajne podľa počtu strán, ktoré vlastní, ktorý je rovnaký ako počet uhlov.

Klasifikácia polygónov podľa počtu strán je dosť dôležitá na to, aby pre polygóny s malým počtom strán existovali špeciálne slová:

# strán názov
3 Trojuholník
4 Štvoruholník
5 Pentagón
6 Šesťhran
7 Heptagon
8 Osemuholník
9 Enneagon
10 Desatoro


Existujú (smiešne) názvy polygónov s oveľa väčším počtom strán (pozri wikipedia: Polygon), všeobecne sa však pri väčšom počte strán používa počet strán, za ktorými nasleduje „-gon“. Hovoríme napríklad o 7-uholníkoch a 8-uholníkoch (namiesto ťažko zapamätateľných mien heptagon alebo osemuholník).


Úvod do mechanizmov

Ozubené kolesá sú prvky stroja, ktoré prenášajú pohyb pomocou postupne zaberajúcich zubov. Zuby prevodovky fungujú ako malé páčky.

Ľavý pár prevodových stupňov nadväzuje na vonkajší kontakt a pravý pár prevodových stupňov nadväzuje na vnútorný kontakt

  • Profil zuba 1 poháňa profil zuba 2 pôsobením v okamžitom kontaktnom bode K.
  • N 1 N 2 je bežná normála týchto dvoch profilov.
  • N 1 je úpätie kolmice od O 1 do N 1 N 2
  • N 2 je úpätie kolmice od O 2 do N 1 N 2.

Obrázok 7-2 Dva profily ozubenia

Aj keď tieto dva profily majú rôzne rýchlosti V1 a V2 v bode K, ich rýchlosti pozdĺž N1N2 sú rovnaké v rozsahu aj v smere. Inak by sa dva profily zubov od seba oddelili. Preto máme

Všimli sme si, že priesečník dotyčnice N 1 N 2 a priamky stredu O 1 O 2 je bod P a

Teda vzťah medzi uhlovými rýchlosťami hnacieho zariadenia a hnaným ozubeným kolesom alebo pomerom rýchlostí dvojice páriacich sa zubov je

Bod P je veľmi dôležitý pre pomer rýchlostí a nazýva sa bod stúpania. Rozstupový bod rozdeľuje čiaru medzi čiarou stredov a jej poloha určuje pomer rýchlostí dvoch zubov. Vyššie uvedený výraz predstavuje základný zákon činnosti ozubeného kolesa.

Pre pomer konštantnej rýchlosti by poloha P mala zostať nezmenená. V tomto prípade je prenos pohybu medzi dvoma prevodovými stupňami ekvivalentný s prenosom pohybu medzi dvoma predstavenými bezšmykovými valcami s polomermi R1 a R2 alebo s priemerom Di a D2. Môžeme získať dva kruhy, ktorých stredy sú na O 1 a O 2, a cez bod ihrisku P. Tieto dva kruhy sa nazývajú rozstupové kruhy. Pomer rýchlosti sa rovná obrátenému pomeru priemerov rozstupových kružníc. Toto je základný zákon pôsobenia ozubených kolies.

Základné zákony pôsobenia ozubených kolies môžu byť teraz uvedené nasledovne (pre ozubené kolesá s pevnou stredovou vzdialenosťou) (Ham 58):

Na získanie očakávaného pomeru rýchlosti dvoch profilov zubov musí normálna čiara ich profilov prechádzať zodpovedajúcim bodom rozstupu, o ktorom rozhoduje pomer rýchlostí. Dva profily, ktoré spĺňajú túto požiadavku, sa nazývajú konjugované profily. Niekedy sme jednoducho nazvali profily zubov, ktoré vyhovujú základnému zákonu pôsobenia ozubených kolies, konjugované profily.

Aj keď je možných veľa tvarov zubov, pre ktoré by mohol byť párovací zub navrhnutý tak, aby vyhovoval základným zákonom, všeobecne sa používajú iba dva: cykloidný a evolventný profil. Evolventný evolventný systém má dôležité výhody - je ľahký na výrobu a stredovú vzdialenosť medzi dvojicou evolventných prevodových stupňov je možné meniť bez zmeny pomeru rýchlostí. Pri použití evolventného profilu teda nie sú potrebné úzke tolerancie medzi miestami hriadeľa. Najčastejšie používanou krivkou konjugovaného zuba je evolventná krivka (Erdman & amp Sandor 84).

Nasledujúce príklady sú evolventné ozubené kolesá. Slovo evolventné používame, pretože obrys zubov ozubených kolies sa krivkuje dovnútra. Ozubené kolesá majú veľa terminológií, parametrov a princípov. Jedným z dôležitých konceptov je pomer rýchlostí, čo je pomer rotačnej rýchlosti hnacieho kolesa k rýchlosti hnaného ozubeného kolesa.

Súbor SimDesign pre tieto ozubené kolesá je simdesign / gear15.30.sim. Počet zubov v týchto prevodových stupňoch je 15, respektíve 30. Ak je hnacím mechanizmom 15-zubový prevod a hnaným 30-zubovým prevodom, je ich pomer rýchlostí 2.

Ďalšie príklady ozubených kolies sú v simdesign / gear10.30.sim a simdesign / gear20.30.sim

Obrázok 7-3 Evolventná krivka

Krivka najčastejšie používaná pre profily zubov ozubených kolies je evolventná hodnota kruhu. Táto evolventná krivka je cesta sledovaná bodom na čiare, keď sa čiara valí bez toho, aby kĺzala po obvode kruhu. Môže byť tiež definovaná ako cesta sledovaná koncom reťazca, ktorý je pôvodne zabalený do kruhu, keď sa reťazec z kruhu rozbalí. Kruh, od ktorého je odvodená evolventná funkcia, sa nazýva základný kruh.

Na obrázku 7-3 nechajte čiaru MN rolovať v smere proti smeru hodinových ručičiek na obvode kruhu bez pošmyknutia. Keď čiara dosiahla polohu M'N ', jej pôvodný bod dotyčnice A dosiahol polohu K, pričom počas pohybu bola sledovaná evolventná krivka AK. Keď pohyb pokračuje, bod A bude sledovať evolventnú krivku AKC.

  1. Vzdialenosť BK sa rovná oblúku AB, pretože spojnica MN sa valí bez toho, aby skĺzla po kruhu.
  2. Okamžitý stred pohybu priamky je pre každý okamih bodom dotyčnice s kružnicou.
    Poznámka: Pojem okamžité centrum sme predtým nedefinovali. Okamžité centrum alebo okamžité centrum je definované dvoma spôsobmi (Bradford & amp Guillet 43):
    1. Ak majú dve telesá rovinný relatívny pohyb, okamžitý stred je bod na jednom telese, okolo ktorého sa druhé otáča v danom okamihu.
    2. Ak majú dve telesá rovinný relatívny pohyb, okamžitý stred je bod, v ktorom sú telesá v danom okamihu relatívne v pokoji.

    Obrázok 7-4 zobrazuje niektoré výrazy pre ozubené kolesá.

    Obrázok 7-4 Čelné ozubené koleso

    V nasledujúcej časti definujeme mnoho pojmov používaných pri analýze čelných ozubených kolies. Niektoré z terminológií boli definované už skôr, ale tu ich uvádzame pre úplnosť. (Viac informácií nájdete v (Ham 58).)

    • Povrch stúpania: Povrch imaginárneho valivého valca (kužeľ atď.), Ktorý môže byť považovaný za nahradený ozubeným kolesom.
    • Rozstupová kružnica: Pravá časť povrchu ihriska.
    • Kruh dodatku: Kruh ohraničujúci konce zubov v pravej časti ozubeného kolieska.
    • Koreňový (alebo dedendový) kruh: Kruh ohraničujúci medzery medzi zubami v pravej časti ozubeného kolieska.
    • Dodatok: Radiálna vzdialenosť medzi rozstupovou kružnicou a kružnicou dodatku.
    • Dedendum: Radiálna vzdialenosť medzi rozstupovou a koreňovou kružnicou.
    • Svetlá výška: Rozdiel medzi dedendom jedného prevodového stupňa a dodatkom spojovacieho zariadenia.
    • Tvár zuba: Tá časť povrchu zuba, ktorá leží mimo povrchu ihriska.
    • Slabina zuba: Časť povrchu zuba, ktorá leží vo vnútri povrchu smoly.
    • Kruhová hrúbka (tiež sa nazýva hrúbka zuba): Hrúbka zuba meraná na rozstupovej kružnici. Je to dĺžka oblúka a nie dĺžka priamky.
    • Priestor pre zuby: Vzdialenosť medzi susednými zubami meraná na rozstupovej kružnici.
    • Vôľa: Rozdiel medzi hrúbkou kruhu jedného ozubeného kolesa a priestorom zubov páriaceho kolesa.
    • Kruhová rozstup p: Šírka zuba a medzery, meraná na rozstupovej kružnici.
    • Diametrálne rozstup P: Počet zubov ozubeného kolesa na palec jeho priemeru rozstupu. Ozubené koleso musí mať integrálny počet zubov. Kruhová rozteč sa teda rovná obvodu rozteče vydelenému počtom zubov. Diametrálna rozteč je podľa definície počet zubov vydelený priemerom rozstupu. To znamená,

    kde p = kruhová rozteč P = priemerná rozteč N = počet zubov D = priemer rozstupu

    To znamená, že súčin diametrálnej výšky a kruhovej výšky sa rovná.

    Tabuľka 7-1 uvádza štandardný systém zubov pre čelné ozubené kolesá. (Shigley & amp Uicker 80)

    Tabuľka 7-1 Štandardné systémy zubov pre čelné ozubené kolesá

    Hrubé ihrisko 2 2.25 2.5 3 4 6 8 10 12 16
    Jemné ihrisko 20 24 32 40 48 64 96 120 150 200

    Tabuľka 7-2 Bežne používané priemerné výšky tónu

    Namiesto použitia teoretickej kružnice rozstupu ako indexu veľkosti zuba sa môže použiť základná kružnica, ktorá je zásadnejším kruhom. Výsledok sa nazýva základná výška tónu p b a súvisí s kruhovou výškou p rovnice

    Obrázok 7-5 Dva zaberajúce ozubené kolesá

    Aby ste dosiahli správne spojenie, vzdialenosť K 1 K 2 na prevodovom stupni 1 by mala byť rovnaká ako vzdialenosť K 1 K 2 na prevodovom stupni 2. Pretože K 1 K 2 na oboch prevodových stupňoch sa rovná základnej rozteči ich prevodových stupňov, resp. Preto

    Na splnenie vyššie uvedenej rovnice musí dvojica záberových prevodov spĺňať nasledujúcu podmienku:

    Obrázok 7-6 Obyčajné prevodové vlaky

    Vieme, že pomer rýchlostí dvojice prevodových stupňov je inverzným pomerom priemerov ich rozstupovej kružnice a priemer rozstupovej kružnice sa rovná počtu zubov vydelenému diametrálnym rozstupom. Vieme tiež, že je potrebné, aby združené prevody mali rovnaké priemerné stúpanie, aby vyhovovali podmienke správneho zapojenia. Z toho teda usudzujeme, že pomer rýchlostí dvojice prevodových stupňov je inverzným pomerom ich počtu zubov.

    Pre bežné ozubené súpravy na obrázku 7-6a máme

    Tieto rovnice možno kombinovať tak, aby vznikol pomer rýchlostí prvého prevodového stupňa vo vlaku k poslednému prevodovému stupňu:

    • Číslo zuba v čitateli je číslom hnaného ozubeného kolesa a čísla zubov v menovateli patria ozubenému koliesku vodiča.
    • Prevodový stupeň 2 a 3 poháňajú a sú zase poháňané. Nazývajú sa teda voľnobežné otáčky. Pretože sa ich počet zubov ruší, voľnobežné kolesá neovplyvňujú veľkosť pomeru vstup-výstup, ale menia smery otáčania. Všimnite si smerové šípky na obrázku. Napínacie kolesá môžu tiež predstavovať úsporu miesta a peňazí (Ak ozubené koleso 1 a 4 zaberajú priamo cez veľkú stredovú vzdialenosť, ich rozstupový kruh bude oveľa väčší.)
    • Existujú dva spôsoby, ako určiť smer rotačného smeru. Prvým spôsobom je označiť šípky pre každý prevodový stupeň, ako je to na obrázku 7-6. Druhým spôsobom je viacnásobná márna sila „-1“ k všeobecnému pomeru rýchlostí. Kde m je počet párov vonkajších kontaktných ozubených kolies (páry vnútorných kontaktných ozubených kolies nemenia smer otáčania). Druhá metóda sa však nedá použiť na priestorové prevodové súpravy.

    Nie je teda ťažké získať pomer rýchlostí prevodového stupňa na obrázku 7-6b:

    Obrázok 7-8 Planétové súkolia

    Obrázok 7-7 Planetové prevody modelované pomocou SimDesignu

    Súbor SimDesign je simdesign / gear.planet.sim. Pretože je slnečné koleso (najväčší prevodový stupeň) pevné, DOF vyššie uvedeného mechanizmu je jeden. Keď potiahnete za ruku alebo planétu, mechanizmus má určitý pohyb. Ak slnečné koleso nie je zamrznuté, je relatívny pohyb ťažko ovládateľný.

      Invertujte mechanizmus planétového prevodu predstavením aplikácie rotačného pohybu s uhlovou rýchlosťou H na mechanizmus. Analyzujme pohyb pred a po inverzii pomocou tabuľky 7-3:

    Tabuľka 7-3 Inverzia planétových prevodových súprav.

    Vezmime si ako príklad planétový prevod na obrázku 7-8. Predpokladajme, že N 1 = 36, N 2 = 18, 1 = 0, 2 = 30. Aká je hodnota N?

    Pri použití rovnice rýchlostného pomeru pre planétové prevody máme túto rovnicu:

    Z rovnice a daných podmienok môžeme dostať odpoveď: N = 10.


    7.2: Kreslenie polygónov za daných podmienok

    Vyriešte problémy týkajúce sa mierkových výkresov geometrických obrazcov vrátane výpočtu skutočných dĺžok a plôch z mierkového výkresu a reprodukcie mierkového výkresu v inej mierke.

    Nakreslite (od ruky, pomocou pravítka a uhlomera a pomocou technológie) geometrické tvary za daných podmienok. Zamerajte sa na konštrukciu trojuholníkov z troch mier uhlov alebo strán. Všimnite si, keď podmienky určujú jedinečný trojuholník, viac ako jeden trojuholník alebo žiadny trojuholník.

    Popíšte dvojrozmerné obrazce, ktoré sú výsledkom krájania trojrozmerných obrazcov, ako v rovinných úsekoch pravých obdĺžnikových hranolov a pravých obdĺžnikových pyramíd.

    Spoj sa s nami

    Informácie o užívateľovi Math Chimp

    Matematický šimpanz bol vytvorený pedagógmi a je ideálny pre deti, rodičov a učiteľov. MathChimp.com je domovom online matematických hier, videí a pracovných listov pre zosilňovače najvyššej kvality. Všetky naše činnosti sú v súlade s bežnými základnými normami. Naším poslaním je poskytovať pútavé a užitočné spoločné aktivity pre 1. až 8. ročník.

    Matematické hry

    Matematické videá

    Matematické pracovné listy


    Ohodnoťte a sledujte svoje obľúbené aktivity!


    Otázky týkajúce sa geometrie: polygóny zodpovedané skutočnými lektormi!

    Pozerám sa na riešenie od @ MathLover1 a pýtam sa sám seba:. . . Čo to bolo . . . ?

    Toto riešenie môžete umiestniť na SVOJU webovú stránku!

    potrebujeme uhlopriečky na 6 stranách (), stranách (), stranách (), stranách () a stranách ()
    . daný


    potom polomer kruhu je:


    . kde je skratka pre circumcircle


    . kde je skratka pre incircle

    rozdiel v ploche medzi vpísanou kružnicou a opísanou kružnicou v 12-uholníku je

    Pracujte s týmto problémom tak, že budete uvažovať o tom, AKÝ FAKTOR je jeden pár strán NÁSOBENÝ, a nie o percentách zvýšenia alebo zníženia.

    Nárast o 25% (tj. 1/4) zvyšuje meranie FAKTOROM o (1 + 1/4) = 5/4. Aby bola oblasť rovnaká, musí sa druhá dimenzia obdĺžnika zmeniť faktorom 4/5.

    4/5 v percentách predstavuje 80%, čo znamená pokles o 20%.

    Vyriešené, zodpovedané a vysvetlené.


    Ak máte dve rôzne odpovede, ktoré si navzájom odporujú, môže vás to PERPLEXOVAŤ.

    Prišiel som preto, aby som vám to objasnil.


    Váš problém v príspevku je NEPRESNE.

    Neexistuje pravidelný mnohouholník s vnútorným uhlom 22 1/2 stupňa. Ak je VONKAJŠÍ uhol pravidelného mnohouholníka 22 1/2 stupňa, potom je počet strán (rovnaký ako počet vrcholov) = 16.

    Toto riešenie môžete umiestniť na SVOJU webovú stránku!

    Pretože vnútorný uhol sú stupne, jeho susedný vonkajší uhol sú stupne.
    Vonkajšie uhly ľubovoľného mnohouholníka sa vždy sčítajú až do stupňov. Keď je mnohouholník pravidelný, stačí rozdeliť, aby sme dostali počet strán.

    existuje teda pravidelný mnohouholník, ktorého vnútorný uhol je °

    dvakrát skontrolujte takto:
    Nech je počet strán pravidelného mnohouholníka, ktorého vnútorné uhly sú každý °.
    Potom °.

    =>
    existuje teda pravidelný mnohouholník, ktorého vnútorný uhol je °
    ° Teda nemôže byť uhol pravidelného mnohouholníka.

    Samotná otázka je nezmyselná, ak nie sú poskytnuté základné informácie.

    Znova uverejnite príspevok pomocou štandardných notácií.

    (1) Netuším, čo by to mohlo znamenať: „(a. B)“

    (2) Ak má byť „x“ symbolom na násobenie, použite namiesto neho „*“. „x“ vyzerá ako premenná. Ak nejde o symbol násobenia a nie o premennú, definujte, o čo ide.

    Vyriešené, zodpovedané, vysvetlené a dokončené.


    Nezabudnite mi poslať svoje „ĎAKUJEM“ za vyučovanie.

    Toto tvrdenie je NESPRÁVNE.

    Ako protiklad zvážte a = b = c = 1.

    Pridajte 3 (tri) dané vektory.

    Výsledná sila je ich súčet.

    To nedáva zmysel.

    Toto riešenie môžete umiestniť na SVOJU webovú stránku!

    Miesto každého vonkajšieho uhla pravidelného n-uhla je °.
    A) Nájdite hodnotu n.
    Súčet n vonkajších uhlov pre ľubovoľný konvexný mnohouholník s n stranami je 360 ​​stupňov.

    B) Aká je miera každého vnútorného uhla?
    Miesto každého uhla v pravidelnom n-uhle je

    Toto riešenie môžete umiestniť na SVOJU webovú stránku!

    Vonkajšie uhly mnohouholníkov sa sčítajú, takže by ste ich vydelili, aby ste dostali. Takže máte obojstranný polygón
    Potom odčítate od (rovného uhla), aby ste sa dostali ako meranie.
    súčet vnútorných uhlov ľubovoľného mnohouholníka:
    stačí vynásobiť počet strán meraním vnútorného uhla


    kde je súčet všetkých vnútorných uhlov celkový počet strán mnohouholníka

    Toto riešenie môžete umiestniť na SVOJU webovú stránku!
    kruh, ktorého priemer je m => polomer je m


    Pravidelný šesťuholník je vpísaný do kruhu s polomerom. Obvod pravidelného šesťuholníka je => strana sa rovná polomeru
    kde je dĺžka strany pravidelného šesťuholníka


    Plocha segmentov kruhu tvorená stranami šesťuholníka je
    štvorcový m

    Otázka 1177164: 1. Nasledujúca schéma, ktorá nie je nakreslená v mierke, predstavuje pôdorys podlahy, prerušované čiary RS rozdeľujú podlahu na dva obdĺžniky, A a B.

    a. i. vypočítať dĺžku RS. (2 body)
    ii. Preto uveďte hodnotu x. (1 bod)
    b. Vypočítajte obvod podlahy. (3 body)
    c. Vypočítajte plochu celého poschodia. (4 body)

    Odpoveď manantha (16064) (Zobraziť zdroj):

    Odpoveď @CubeyThePenguine by bola správna, keby ste mali možnosť zdeformovať tieto oficiálne basketbalové ihriská NBA

    topologicky zmenou ich tvaru pri zachovaní ich plôch.


    Ale keďže to v skutočnosti nemôžete urobiť, je táto odpoveď nezmyselná.

    Plocha päťuholníka = 14 hektárov = 1 506 946 ft ^ 2

    # súdov = 1 506 946/4 700 = 320,6 súdov


    Riešenia od @CubeyThePenguin sú NESPRÁVNE.

    Prišiel som, aby som vám priniesol správne riešenie.

    Dobrý deň, @CubeyThePenguin, vyzerá to, že ste dnes v zlom stave.

    Zvážte, že na istý čas prestanete pracovať na fóre a dáte si pauzu.

    Toto riešenie môžete umiestniť na SVOJU webovú stránku!
    Plocha = (výška) * (súčet základov) / 2
    18 = h * 3/2
    h = 12

    štvorcová plocha = 12 ^ 2 = 144 ft ^ 2

    Toto riešenie môžete umiestniť na SVOJU webovú stránku!
    Z hľadiska apotému „a“ je plocha trojuholníka 3sqrt (3) a ^ 2.


    Ako z vášho príspevku môžeme vedieť, ktorá oblasť je zatienená a ktorá oblasť je vysadená?

    Nezverejňujte prosím GIBBERIDSH na tomto fóre.


    Nezverejňujte prosím GIBBERIDSH na tomto fóre.


    Nezverejňujte prosím GIBBERIDSH na tomto fóre.


    Riešenia od @CubeyThePenguin sú NESPRÁVNE.

    Prišiel som, aby som vám priniesol správne riešenie.

    Toto riešenie môžete umiestniť na SVOJU webovú stránku!
    dĺžka strany = apothem * sqrt (3) / 2 = 12

    plocha = (1/2) * (počet strán) * (dĺžka strany) * (apothem)
    = (1/2) * 6 * 12 * 8 štvorcových (3)
    = 288sqrt (3)

    Toto riešenie môžete umiestniť na SVOJU webovú stránku!
    PR a QS sú uhlopriečky obdĺžnika. Uhlopriečky v obdĺžniku sú vždy rovnaké, takže:

    Toto riešenie môžete umiestniť na SVOJU webovú stránku!
    A = (znásobené dve strany) * (hriech zahrnutého uhla) = (15 cm) (25 cm) (hriech (74)) = 360,473 cm ^ 2

    Zatiaľ si nie som istý časťmi b a c.

    Výška rovnostranného trojuholníka je 12 * sqrt (3). Použite svoje vedomosti o rovnostranných trojuholníkoch a 30-60-90 pravouhlých trojuholníkoch na určenie, že bočná dĺžka rovnostranného trojuholníka je 24. Potom je plocha trojuholníka, polovica základnej výšky, výška, 144 * sqrt (3).

    Plocha lichobežníka je dĺžka stredovej čiary lichobežníka krát výška. Plocha lichobežníka je 3-násobok plochy rovnostranného trojuholníka, čo je 432 * štvorcový (3). A výška lichobežníka je 12 * sqrt (3), takže dĺžka stredovej čiary lichobežníka je 432/12 = 36.

    ODPOVEĎ: Dĺžka stredovej čiary lichobežníka je 36.

    Obrázok môže pomôcť ukázať, že táto odpoveď má zmysel.

    Ak má lichobežník uhly 60 stupňov a 120 stupňov, potom ho možno považovať za zložený z troch rovnostranných trojuholníkov. Dĺžka stredovej čiary lichobežníka je potom trojnásobkom „stredovej čiary“ každého rovnostranného trojuholníka a keďže trojuholníky majú dĺžku strany 24, je dĺžka každej stredovej čiary 12.

    H I N T


    S mojím náznakom len viete, čo ďalej.

    Toto riešenie môžete umiestniť na SVOJU webovú stránku!
    nonagon je 9-stranný mnohouholník.

    ak je to pravidelné, potom sú všetky strany rovnaké a všetky uhly sú rovnaké.

    mieru jedného vnútorného uhla nájdete dvoma rôznymi spôsobmi.

    Prvým spôsobom je nájsť mieru každého vonkajšieho uhla.

    vonkajší uhol mnohouholníka je doplnkom jeho zodpovedajúceho vnútorného uhla.

    súčet vonkajších uhlov mnohouholníka sa vždy rovná 360 stupňom.

    ak je mnohouholník pravidelný mnohouholník, potom je miera každého vonkajšieho uhla 360 / počet strán mnohouholníka.

    doplnok 40 stupňov je 180 - 40 = 140 stupňov.

    to je miera každého vnútorného uhla pravidelného nonagon.

    druhým spôsobom je použitie vzorca pre súčet vnútorných uhlov mnohouholníka.

    tento vzorec spočíva v tom, že súčet vnútorných uhlov mnohouholníka sa rovná 180 * (n-2), kde n je počet strán mnohouholníka.

    pomocou tohto vzorca získate súčet = 7 * 180 = 1260 stupňov.

    vydeľte to číslom 9, aby ste dostali každý vnútorný uhol pravidelného nonagon = 1260/9 = 140 stupňov.

    v obidvoch prípadoch dostanete rovnakú odpoveď.

    rovnica je taká, že súčet vnútorných uhlov sa rovná (n - 2) * 180, kde n je počet strán v mnohouholníku.

    v trojuholníku, n = 3 a súčet vnútorných uhlov je 1 * 180 = 180.

    v štvoruholníku n = 4 a súčet intenčných uhlov je 2 * 180 = 360.

    ak je súčet vnútorných uhlov 900, potom sa rovnica stáva:

    to zjednodušuje na 180 * n - 360 = 900

    pridajte 360 ​​na obe strany rovnice a získate 180 * n = 1260.

    mnohouholník je sedemstranný útvar.

    myslím, že sa tomu hovorí heptagon.

    tu je viac, ako ste pravdepodobne chceli vedieť o názvoch polygónov.


    7.2: Kreslenie polygónov za daných podmienok

    Po prečítaní tejto kapitoly budete môcť urobiť nasledovné:

    • Vymažte okno v ľubovoľnej farbe
    • Vynútiť dokončenie všetkých čakajúcich výkresov
    • Kreslite ľubovoľným geometrickým primitívom - body, čiary a mnohouholníky - v dvoch alebo troch rozmeroch
    • Zapnutie a vypnutie stavov a dopytovanie stavových premenných
    • Ovládajte zobrazovanie týchto primitívov - napríklad kreslite prerušované čiary alebo obrysové polygóny
    • Zadajte normálne vektory vo vhodných bodoch na povrchu pevných objektov
    • Pomocou vrcholných polí môžete ukladať a pristupovať k množstvu geometrických údajov iba pomocou niekoľkých volaní funkcií
    • Uložte a obnovte niekoľko stavových premenných naraz

    Aj keď pomocou OpenGL môžete kresliť zložité a zaujímavé obrázky, všetky sú vytvorené z malého počtu primitívnych grafických prvkov. To by nemalo byť príliš prekvapujúce - pozrite sa, čo dokázal Leonardo da Vinci iba pomocou ceruziek a štetcov.

    Na najvyššej úrovni abstrakcie existujú tri základné operácie kreslenia: vyčistenie okna, nakreslenie geometrického objektu a nakreslenie rastrového objektu. Rastrové objekty, ktoré zahŕňajú napríklad dvojrozmerné obrázky, bitmapy a písma znakov, sú obsiahnuté v kapitole 8. V tejto kapitole sa dozviete, ako vyčistiť obrazovku a nakresliť geometrické objekty vrátane bodov, priamych čiar a plochých mnohouholníky.

    Možno si pomyslíte: „Počkajte. Videl som veľa počítačovej grafiky vo filmoch a v televízii a existuje veľa nádherne zatienených zakrivených čiar a plôch. Ako sú nakreslené, ak všetky OpenGL dokážu kresliť, sú priamky a ploché polygóny? “ Dokonca aj obrázok na obálke tejto knihy obsahuje okrúhly stôl a predmety na stole, ktoré majú zakrivené povrchy. Ukazuje sa, že všetky zakrivené čiary a plochy, ktoré ste videli, sú aproximované veľkým počtom malých plochých mnohouholníkov alebo priamych čiar, a to rovnakým spôsobom, ako je zemeguľa na obálke skonštruovaná z veľkej množiny obdĺžnikových blokov. Zdá sa, že zemeguľa nemá hladký povrch, pretože bloky sú v porovnaní s touto planétou pomerne veľké. Ďalej v tejto kapitole si ukážeme, ako konštruovať zakrivené čiary a povrchy z množstva malých geometrických primitívov.

    Táto kapitola má nasledujúce hlavné časti:

    • „Sada na prežitie výkresu“ vysvetľuje, ako vyčistiť okno a vynútiť dokončenie kreslenia. Poskytuje tiež základné informácie o riadení farby geometrických objektov a o popise súradnicového systému.
    • „Popis bodov, čiar a mnohouholníkov“ vám ukáže, čo je množina primitívnych geometrických objektov a ako ich nakresliť.
    • „Základné riadenie stavu“ popisuje, ako zapnúť a vypnúť niektoré stavy (režimy) a premenné stavu dotazu.
    • „Zobrazenie bodov, čiar a mnohouholníkov“ vysvetľuje, akú máte kontrolu nad podrobnosťami o tom, ako sú nakreslené primitívy - napríklad aké body priemeru majú, či sú čiary plné alebo prerušované, a či sú mnohouholníky obrysové alebo vyplnené.
    • „Normálne vektory“ pojednáva o tom, ako určiť normálne vektory pre geometrické objekty a (stručne) na čo tieto vektory slúžia.
    • „Vertex Arrays“ vám ukazuje, ako vložiť veľa geometrických údajov do niekoľkých polí a ako iba pomocou niekoľkých volaní funkcií vykresliť geometriu, ktorú popisuje. Zníženie počtu volaní funkcií môže zvýšiť účinnosť a výkon vykresľovania.
    • "Skupiny atribútov" odhaľuje, ako vyhľadávať aktuálnu hodnotu stavových premenných a ako ukladať a obnovovať niekoľko súvisiacich stavových hodnôt naraz.
    • „Niektoré rady pre vytváranie polygonálnych modelov povrchov“ skúma problémy a techniky spojené s konštrukciou polygonálnych aproximácií povrchov.

    Pri čítaní zvyšku tejto kapitoly je treba mať na pamäti, že s OpenGL, pokiaľ neurčíte inak, sa zakaždým, keď vydáte príkaz na kreslenie, nakreslí zadaný objekt. Môže sa to zdať zrejmé, ale v niektorých systémoch najskôr urobíte zoznam vecí, ktoré chcete nakresliť. Keď je váš zoznam úplný, povedzte grafickému hardvéru, aby nakreslil položky v zozname. Prvý štýl sa nazýva grafika v okamžitom režime a je predvoleným štýlom OpenGL. Okrem použitia okamžitého režimu môžete zvoliť, že si niektoré príkazy uložíte do zoznamu (nazývaného zoznam na zobrazenie) pre neskoršie kreslenie. Grafika v okamžitom režime sa zvyčajne programuje ľahšie, ale zoznamy na zobrazenie sú často efektívnejšie. Kapitola 7 vám hovorí, ako používať zoznamy displejov a prečo ich možno budete chcieť použiť.

    Sada na prežitie výkresov

    Táto časť vysvetľuje, ako vyčistiť okno pri príprave na kreslenie, nastaviť farbu objektov, ktoré sa majú kresliť, a vynútiť dokončenie kreslenia. Žiadny z týchto predmetov nemá nič spoločné s geometrickými objektmi priamym spôsobom, ale každý program, ktorý kreslí geometrické objekty, sa musí s týmito problémami vyrovnať.

    Vymazanie okna

    Kreslenie na obrazovke počítača sa líši od kresby na papier v tom, že papier začína bielou farbou a všetko, čo musíte urobiť, je nakresliť obrázok. V počítači je pamäť obsahujúca obrázok zvyčajne vyplnená posledným obrázkom, ktorý ste nakreslili, takže predtým, ako začnete kresliť novú scénu, musíte ju zvyčajne vyčistiť na nejakú farbu pozadia. Farba, ktorú použijete ako pozadie, závisí od aplikácie. V textovom procesore môže byť farba papiera skôr, ako začnete kresliť, bielu. Ak kreslíte pohľad z vesmírnej lode, pred začatím kreslenia hviezd, planét a mimozemských vesmírnych lodí vyčistíte vesmír do čierneho. Niekedy nemusí byť potrebné vôbec vyčistiť obrazovku, napríklad ak je obraz vo vnútri miestnosti, celé grafické okno sa zakryje, keď nakreslíte všetky steny.

    V tomto okamihu by vás mohlo zaujímať, prečo stále hovoríme o vyčistení okna - prečo nielen nakresliť obdĺžnik príslušnej farby, ktorý je dostatočne veľký na to, aby zakryl celé okno? Najskôr môže byť špeciálny príkaz na vymazanie okna oveľa efektívnejší ako príkaz na všeobecné použitie v kresbe. Okrem toho, ako uvidíte v kapitole 3, program OpenGL umožňuje ľubovoľne nastaviť súradnicový systém, pozíciu a smer pohľadu, takže môže byť ťažké zistiť vhodnú veľkosť a umiestnenie obdĺžnika na vymazanie okna. Napokon na mnohých strojoch grafický hardvér pozostáva z viacerých vyrovnávacích pamätí okrem vyrovnávacej pamäte obsahujúcej farby zobrazených pixelov. Tieto ďalšie medzipamäte musia byť z času na čas vymazané a je vhodné mať jediný príkaz, ktorý dokáže vyčistiť každú ich kombináciu. (Diskusiu o všetkých možných vyrovnávacích pamätiach nájdete v kapitole 10.)

    Musíte tiež vedieť, ako sú farby pixelov uložené v grafickom hardvéri známom ako bitplanes. Existujú dva spôsoby skladovania. Buď červená, zelená, modrá a alfa (RGBA) hodnota pixelu sa dá priamo uložiť v bitových rovinách, alebo sa uloží jedna hodnota indexu, ktorá odkazuje na tabuľku na vyhľadanie farieb. Častejšie sa používa režim farebného zobrazenia RGBA, takže ho používa väčšina príkladov v tejto knihe. (Ďalšie informácie o oboch režimoch zobrazenia nájdete v kapitole 4.) Až do kapitoly 6 môžete bezpečne ignorovať všetky odkazy na hodnoty alfa.

    Napríklad tieto riadky kódu vyčistia okno režimu RGBA na čierno:

    Prvý riadok nastaví čistiacu farbu na čiernu a ďalší príkaz vymaže celé okno na aktuálnu čistiacu farbu. Jediný parameter glClear () označuje, ktoré medzipamäte sa majú vymazať. V takom prípade program vymaže iba farebnú medzipamäť, kde sa uchová obraz zobrazený na obrazovke. Spravidla nastavíte čistiacu farbu raz, na začiatku aplikácie, a potom vyčistíte medzipamäte tak často, ako je to potrebné. OpenGL sleduje aktuálnu farbu zúčtovania ako stavovú premennú, takže nevyžaduje, aby ste ju zadali zakaždým, keď je vyrovnávacia pamäť vymazaná.

    Kapitola 4 a kapitola 10 hovoria o tom, ako sa používajú iné vyrovnávacie pamäte. Všetko, čo teraz potrebujete vedieť, je, že ich čistenie je jednoduché. Napríklad na vyčistenie medzipamäte farieb a medzipamäte hĺbky použijete nasledujúcu postupnosť príkazov:

    V takom prípade je volanie glClearColor () rovnaké ako predtým, príkaz glClearDepth () určuje hodnotu, na ktorú sa má nastaviť každý pixel hĺbkovej medzipamäte, a parameter príkazu glClear () teraz pozostáva z bitové ALEBO všetkých vyrovnávacích pamätí, ktoré sa majú vyčistiť. Nasledujúce zhrnutie glClear () obsahuje tabuľku, ktorá obsahuje zoznam vyrovnávacích pamätí, ktoré je možné vymazať, ich názvy a kapitolu, kde sa diskutuje o každom type vyrovnávacej pamäte.

    void glClearColor (GLclampf červená, GLclampf zelená, GLclampf modrá,
    GLclampf alpha) Nastavuje aktuálnu farbu čistenia na použitie pri čistení vyrovnávacích pamätí farieb v režime RGBA. (Viac informácií o režime RGBA nájdete v kapitole 4.) Hodnoty červenej, zelenej, modrej a alfa sú podľa potreby upnuté na rozsah [0,1]. Predvolená čistiaca farba je (0, 0, 0, 0), ktorá je čierna. void glClear (GLbitfield mask) Vymaže zadané medzipamäte na ich aktuálne hodnoty zúčtovania. Argument maska ​​je bitovou kombináciou hodnôt uvedených v tabuľke 2-1. Tabuľka 2-1: Vymazanie nárazníkov

    Pred vydaním príkazu na vymazanie viacerých vyrovnávacích pamätí musíte nastaviť hodnoty, na ktoré sa má každá vyrovnávacia pamäť vymazať, ak chcete niečo iné ako predvolenú farbu RGBA, hodnotu hĺbky, akumulačnú farbu a index šablóny.Okrem príkazov glClearColor () a glClearDepth (), ktoré nastavujú aktuálne hodnoty na čistenie vyrovnávacích pamätí farieb a hĺbok, určujú glClearIndex (), glClearAccum () a glClearStencil () index farieb, farbu akumulácie a index šablón, ktoré sa používajú na vymažte príslušné medzipamäte. (Popis týchto vyrovnávacích pamätí a ich použití nájdete v kapitolách 4 a 10.)

    OpenGL vám umožňuje určiť viac vyrovnávacích pamätí, pretože vymazanie je zvyčajne pomalá operácia, pretože sa dotkne každého pixelu v okne (možno miliónov) a niektorý grafický hardvér umožňuje súčasné vymazanie súborov vyrovnávacích pamätí. Hardvér, ktorý nepodporuje súčasné mazanie, ich vykonáva postupne. Rozdiel medzi

    je to, že aj keď majú oba rovnaké konečné efekty, prvý príklad môže bežať rýchlejšie na mnohých strojoch. Určite to nepôjde pomalšie.

    Zadanie farby

    Pri OpenGL je popis tvaru nakresleného objektu nezávislý od popisu jeho farby. Kedykoľvek sa nakreslí konkrétny geometrický objekt, nakreslí sa pomocou aktuálne určenej farebnej schémy. Schéma vyfarbenia môže byť taká jednoduchá ako „nakresliť všetko červenou farbou hasičského vozidla“ alebo môže byť rovnako komplikovaná ako „predpokladať, že objekt je vyrobený z modrého plastu, že je tam žltý reflektor nasmerovaný tým a tým smerom a že všade inde je všeobecne červenohnedé svetlo nízkej úrovne. ““ Všeobecne platí, že programátor OpenGL najskôr nastaví farebnú alebo farebnú schému a potom nakreslí objekty. Kým sa farba alebo farebná schéma nezmení, všetky objekty sa nakreslia touto farbou alebo pomocou tejto farebnej schémy. Táto metóda pomáha OpenGL dosiahnuť vyšší výkon pri kreslení, ako by bol dosiahnutý, ak by nesledoval aktuálnu farbu.

    Napríklad pseudokód

    nakreslí objekty A a B červenou farbou a objekt C modrou farbou. Príkaz na štvrtom riadku, ktorý nastaví aktuálnu farbu na zelenú, je zbytočný.

    Farbenie, osvetlenie a tieňovanie sú všetko veľké témy, ktorým sú venované celé kapitoly alebo veľké časti. Na nakreslenie geometrických primitív, ktoré je možné vidieť, však potrebujete základné znalosti o tom, ako nastaviť aktuálnu farbu, ktoré sú uvedené v nasledujúcich odsekoch. (Podrobnosti o týchto témach nájdete v kapitolách 4 a 5.)

    Na nastavenie farby použite príkaz glColor3f (). Trvá tri parametre, pričom všetky sú čísla s pohyblivou rádovou čiarkou medzi 0,0 a 1,0. Parametre sú v poradí červená, zelená a modrá zložka farby. Tieto tri hodnoty si môžete predstaviť ako kombináciu farieb: 0,0 znamená, že nepoužívate žiadny z týchto komponentov, a 1,0 znamená, že z tohto komponentu môžete používať všetko, čo môžete. Teda kód

    je najjasnejšia červená, akú dokáže systém nakresliť, bez zelených alebo modrých komponentov. Všetky nuly vytvárajú čiernu kontrast, všetky biele. Nastavením všetkých troch komponentov na 0,5 sa získa šedá (v polovici medzi čiernou a bielou). Tu je osem príkazov a farby, ktoré by nastavili.

    Možno ste si už skôr všimli, že rutina nastavenia farby čistenia glClearColor () trvá štyri parametre, z ktorých prvé tri zodpovedajú parametrom glColor3f (). Štvrtý parameter je hodnota alfa, ktorej sa podrobne venuje kapitola „Miešanie“ v kapitole 6. Zatiaľ nastavte štvrtý parameter glClearColor () na 0,0, čo je predvolená hodnota.

    Vynútené dokončenie kreslenia

    Ako ste videli v časti „OpenGL Rendering Pipeline“ v kapitole 1, väčšinu moderných grafických systémov možno považovať za montážnu linku. Hlavná centrálna procesorová jednotka (CPU) vydá príkaz na kreslenie. Možno ďalší hardvér robí geometrické transformácie. Vykoná sa orezávanie, po ktorom nasleduje tieňovanie a / alebo textúra. Nakoniec sa hodnoty zapíšu do bitplánov na zobrazenie. Vo špičkových architektúrach sa každá z týchto operácií vykonáva pomocou iného hardvéru, ktorý je navrhnutý na rýchle vykonávanie konkrétnej úlohy. V takejto architektúre nie je potrebné, aby CPU čakalo na dokončenie každého príkazu kreslenia pred vydaním ďalšieho. Zatiaľ čo CPU vysiela vrchol po potrubí, transformačný hardvér pracuje na transformácii posledného odoslaného, ​​predchádzajúceho, ktorý sa orezáva atď. Ak by v takomto systéme CPU čakalo na dokončenie každého príkazu pred vydaním ďalšieho, mohlo by to byť náročné za výkonnostný trest.

    Okrem toho môže byť aplikácia spustená na viacerých počítačoch. Predpokladajme napríklad, že hlavný program beží inde (na počítači, ktorý sa volá klient), a že si prezeráte výsledky kreslenia na svojej pracovnej stanici alebo termináli (server), ktorý je ku klientovi pripojený sieťou. V takom prípade by mohlo byť strašne neefektívne posielať každý príkaz po sieti jeden po druhom, pretože s každým sieťovým prenosom je často spojená značná réžia. Klient zvyčajne pred odoslaním zhromaždí zbierku príkazov do jedného sieťového paketu. Bohužiaľ, sieťový kód na klientovi zvyčajne nemá žiadny spôsob, ako vedieť, že grafický program dokončil kreslenie rámčeka alebo scény. V najhoršom prípade čaká večne na dostatok ďalších príkazov na kreslenie na vyplnenie paketu a dokončený výkres nikdy neuvidíte.

    Z tohto dôvodu OpenGL poskytuje príkaz glFlush (), ktorý núti klienta odoslať sieťový paket, aj keď nemusí byť plný. Ak nie je k dispozícii sieť a všetky príkazy sa skutočne vykonávajú okamžite na serveri, nemusí mať glFlush () žiadny účinok. Ak však píšete program, ktorý chcete správne pracovať so sieťou aj bez nej, na konci každej snímky alebo scény zahrňte volanie funkcie glFlush (). Všimnite si, že glFlush () nečaká na dokončenie kresby - iba prinúti kresbu začať vykonávanie, čím zaručuje, že všetky predchádzajúce príkazy sa vykonajú v konečnom čase, aj keď sa už nevykonajú žiadne ďalšie príkazy na vykreslenie.

    Existujú aj iné situácie, kedy je glFlush () užitočné.

    • Softvérové ​​vykresľovače, ktoré vytvárajú obraz v systémovej pamäti a nechcú neustále aktualizovať obrazovku.
    • Implementácie, ktoré zhromažďujú sady vykresľovacích príkazov na amortizáciu počiatočných nákladov. Vyššie uvedený príklad sieťového prenosu je jedným z príkladov.

    Niekoľko príkazov - napríklad príkazy, ktoré zamieňajú medzipamäť v režime dvojitej medzipamäte - automaticky vyprázdnia čakajúce príkazy do siete skôr, ako sa môžu vyskytnúť.

    Ak vám glFlush () nestačí, vyskúšajte glFinish (). Tento príkaz vyprázdni sieť tak, ako to robí glFlush (), a potom čaká na oznámenie od grafického hardvéru alebo siete, ktoré naznačuje, že kresba je dokončená v framebufferi. Možno budete musieť použiť glFinish (), ak chcete synchronizovať úlohy - napríklad aby ste sa ubezpečili, že je vaše trojrozmerné vykreslenie na obrazovke, skôr ako pomocou jazyka PostScript nakreslíte štítky na vrchnú časť vykreslenia. Ďalším príkladom by bolo zabezpečiť, aby bol výkres dokončený skôr, ako začne akceptovať vstup používateľa. Po zadaní príkazu glFinish () sa váš grafický proces zablokuje, kým nedostane upozornenie od grafického hardvéru, že je kresba dokončená. Nezabudnite, že nadmerné používanie funkcie glFinish () môže znížiť výkon vašej aplikácie, najmä ak pracujete v sieti, pretože to vyžaduje obojsmernú komunikáciu. Ak je glFlush () dostatočné pre vaše potreby, použite ho namiesto glFinish ().

    void glFinish (void) Vynúti dokončenie všetkých predtým vydaných príkazov OpenGL. Tento príkaz sa nevráti, kým sa úplne neuplatnia všetky efekty z predchádzajúcich príkazov.

    Kit Survival System Survival Kit

    Kedykoľvek pôvodne otvoríte okno alebo neskôr toto okno presuniete alebo zmeníte jeho veľkosť, systém okien pošle udalosť, aby vás upozornil. Ak používate GLUT, notifikácia sa automatizuje, bez ohľadu na to, ako sa rutina zaregistrovaná do glutReshapeFunc () bude volať. Musíte zaregistrovať funkciu spätného volania, ktorá bude

    • Obnovte obdĺžnikovú oblasť, ktorá bude novým vykresľovacím plátnom
    • Definujte súradnicový systém, do ktorého sa budú kresliť objekty

    V kapitole 3 uvidíte, ako definovať trojrozmerné súradnicové systémy, ale práve teraz vytvorte jednoduchý, základný dvojrozmerný súradnicový systém, do ktorého môžete nakresliť niekoľko objektov. Zavolajte glutReshapeFunc (reshape), kde reshape () je nasledujúca funkcia zobrazená v príklade 2-1.

    Príklad 2-1: Zmena tvaru spätného volania

    Internát GLUT odovzdá tejto funkcii dva argumenty: šírku a výšku nového, presunutého alebo zmeneného okna v pixeloch. glViewport () upravuje obdĺžnik pixelov pre kreslenie tak, aby tvoril celé nové okno. Nasledujúce tri rutiny upravujú súradnicový systém pre kreslenie tak, aby bol ľavý dolný roh (0, 0) a pravý horný roh (w, h) (pozri obrázok 2-1).

    Ak to chcete vysvetliť inak, porozmýšľajte nad kusom grafického papiera. Hodnoty w a h v reshape () predstavujú počet stĺpcov a riadkov štvorcov na vašom milimetrovom papieri. Potom musíte dať osy na milimetrový papier. Rutina gluOrtho2D () vloží pôvod, (0, 0), úplne do najnižšieho a úplne ľavého štvorca, vďaka čomu každý štvorec predstavuje jednu jednotku. Keď teraz vykreslíte body, čiary a mnohouholníky vo zvyšku tejto kapitoly, zobrazia sa na tomto papieri v ľahko predvídateľných štvorcoch. (Zatiaľ nechajte všetky svoje objekty dvojrozmerné.)

    Obrázok 2-1: Súradnicový systém definovaný pomocou w = 50, h = 50

    Popis bodov, čiar a mnohouholníkov

    Táto časť vysvetľuje, ako opísať geometrické primitívy OpenGL. Všetky geometrické primitívy sú nakoniec popísané z hľadiska ich vrcholov - súradníc, ktoré definujú samotné body, koncové body úsečiek alebo rohy mnohouholníkov. Ďalšia časť pojednáva o tom, ako sú tieto primitívy zobrazené a akú kontrolu nad ich zobrazením máte.

    Čo sú body, čiary a polygóny?

    Pravdepodobne máte celkom dobrú predstavu o tom, čo matematik znamená pod pojmami bod, čiara a mnohouholník. Významy OpenGL sú podobné, ale nie celkom rovnaké.

    Jeden rozdiel pochádza z obmedzení výpočtov uskutočňovaných počítačom. V akejkoľvek implementácii OpenGL sú výpočty s pohyblivou rádovou čiarkou konečnej presnosti a majú chyby zaokrúhľovania. V dôsledku toho trpia súradnice bodov, čiar a polygónov OpenGL rovnakými problémami.

    Ďalší dôležitejší rozdiel vyplýva z obmedzení zobrazenia rastrovej grafiky. Na takomto displeji je najmenšou zobraziteľnou jednotkou pixel, a hoci pixely môžu mať šírku menej ako 1/100 palca, stále sú oveľa väčšie ako koncepty matematika, ktoré sú nekonečne malé (pre body) alebo nekonečne tenké (pre čiary). ). Keď OpenGL vykonáva výpočty, predpokladá, že body sú reprezentované ako vektory čísel s pohyblivou rádovou čiarkou. Bod je však zvyčajne (ale nie vždy) nakreslený ako jeden pixel a pomocou OpenGL na ten istý pixel by bolo možné nakresliť mnoho rôznych bodov s mierne odlišnými súradnicami.

    Body

    Bod predstavuje množina čísel s pohyblivou rádovou čiarkou, ktorá sa nazýva vrchol. Všetky interné výpočty sa vykonávajú, akoby boli vrcholy trojrozmerné. Vrcholy určené používateľom ako dvojrozmerné (tj. Iba so súradnicami x a y) sú OpenGL priradené k súradnici z rovnajúcej sa nule.

    OpenGL pracuje v homogénnych súradniciach trojrozmernej projektívnej geometrie, takže pre interné výpočty sú všetky vrcholy reprezentované štyrmi súradnicami s pohyblivou rádovou čiarkou (x, y, z, w). Ak je w odlišné od nuly, zodpovedajú tieto súradnice euklidovskému trojrozmernému bodu (x / w, y / w, z / w). Súradnice w môžete určiť v príkazoch OpenGL, ale robí sa to zriedka. Ak nie je zadaná súradnica w, rozumie sa to 1,0. (Ďalšie informácie o homogénnych súradnicových systémoch nájdete v prílohe F.)

    Riadky

    V OpenGL sa výrazom čiara označuje úsečka, nie verzia matematika, ktorá siaha do nekonečna v oboch smeroch. Existujú jednoduché spôsoby, ako určiť prepojenú sériu líniových segmentov alebo dokonca uzavretú, spojenú sériu segmentov (pozri obrázok 2-2). Vo všetkých prípadoch sú však riadky tvoriace spojené rady špecifikované ako vrcholy v ich koncových bodoch.

    Obrázok 2-2: Dve spojené série líniových segmentov

    Polygóny

    Polygóny sú oblasti ohraničené jednoduchými uzavretými slučkami líniových segmentov, kde sú líniové segmenty špecifikované vrcholmi v ich koncových bodoch. Polygóny sa zvyčajne kreslia s vyplnenými pixelmi v interiéri, ale môžete ich nakresliť aj ako obrysy alebo množinu bodov. (Pozri „Podrobnosti mnohouholníka.“)

    Polygóny môžu byť vo všeobecnosti komplikované, takže OpenGL prísne obmedzuje to, čo predstavuje primitívny polygón. Po prvé, hrany polygónov OpenGL sa nemôžu pretínať (matematik by nazval polygón spĺňajúci túto podmienku jednoduchým polygónom). Po druhé, polygóny OpenGL musia byť konvexné, čo znamená, že nemôžu mať vrúbkovanie. Presne povedané, oblasť je konvexná, ak pri akýchkoľvek dvoch bodoch v interiéri je spojnicový úsek, ktorý ich spája, tiež v interiéri. Niekoľko príkladov platných a neplatných polygónov nájdete na obrázku 2-3. OpenGL však neobmedzuje počet líniových segmentov tvoriacich hranicu konvexného mnohouholníka. Upozorňujeme, že mnohouholníky s otvormi nemožno opísať. Sú nekonvexné a nemožno ich nakresliť hranicou tvorenou jednou uzavretou slučkou. Uvedomte si, že ak prezentujete OpenGL nekonvexným polygónom, nemusí ho nakresliť podľa vašich očakávaní. Napríklad vo väčšine systémov by nebol vyplnený viac ako konvexný trup mnohouholníka. V niektorých systémoch môže byť vyplnený menej ako konvexný trup.

    Obrázok 2-3: Platné a neplatné polygóny

    Dôvodom obmedzení OpenGL na platné typy polygónov je, že je jednoduchšie poskytnúť hardvér na rýchle vykreslenie polygónov pre túto obmedzenú triedu polygónov. Jednoduché mnohouholníky sa dajú vykresliť rýchlo. Ťažké prípady je ťažké odhaliť rýchlo. Pre maximálny výkon teda OpenGL skríži prsty a predpokladá, že polygóny sú jednoduché.

    Mnoho povrchov v reálnom svete pozostáva z jednoduchých mnohouholníkov, nekonvexných mnohouholníkov alebo mnohouholníkov s otvormi. Pretože všetky takéto polygóny je možné vytvoriť z zväzkov jednoduchých konvexných polygónov, sú v knižnici GLU poskytované niektoré rutiny na vytváranie zložitejších objektov. Tieto rutiny preberajú zložité popisy a zostavujú ich, alebo ich rozdeľujú do skupín jednoduchších polygónov OpenGL, ktoré sa potom dajú vykresliť. (Viac informácií o teselačných rutinách nájdete v kapitole 11 „Polygónová mozaikovanie“.)

    Pretože vrcholy OpenGL sú vždy trojrozmerné, body tvoriace hranicu konkrétneho mnohouholníka nemusia nevyhnutne ležať v rovnakej rovine vesmíru. (Samozrejme, že v mnohých prípadoch áno - ak sú napríklad všetky súradnice z nulové, alebo ak je mnohouholníkom trojuholník.) Ak vrcholy mnohouholníka nespočívajú v rovnakej rovine, potom po rôznych rotáciách v priestore, zmeny v uhle pohľadu a premietnutie na obrazovku, body už nemusia tvoriť jednoduchý konvexný mnohouholník. Napríklad si predstavte štvorbodový štvoruholník, kde sú body mierne mimo rovinu, a pozrite sa naň takmer okrajovo. Môžete získať nenáročný mnohouholník, ktorý pripomína motýlika, ako je to znázornené na obrázku 2-4, ktorého zaručené vykreslenie nie je zaručené. Táto situácia nie je až taká neobvyklá, ak aproximujete zakrivené plochy štvoruholníkmi z bodov ležiacich na skutočnej ploche. Problémom sa dá kedykoľvek vyhnúť použitím trojuholníkov, pretože akékoľvek tri body ležia vždy v rovine.

    Obrázok 2-4: Neplanárny mnohouholník transformovaný na nepoddajný mnohouholník

    Obdĺžniky

    Pretože obdĺžniky sú v grafických aplikáciách také bežné, OpenGL poskytuje primitívny nástroj na kreslenie plného obdĺžnika, glRect * (). Môžete nakresliť obdĺžnik ako mnohouholník, ako je popísané v časti „OpenGL Geometric Drawing Primitives“, ale vaša konkrétna implementácia OpenGL mohla optimalizovať glRect * () pre obdĺžniky.

    void glRect (TYPEx1, TYPEy1, TYPEx2, TYPEy2)
    void glRect v (TYPE * v1, TYPE * v2) Nakreslí obdĺžnik definovaný rohovými bodmi (x1, y1) a (x2, y2). Obdĺžnik leží v rovine z = 0 a má strany rovnobežné s osami x - a y. Ak sa použije vektorová forma funkcie, rohy sú dané dvoma smerníkmi na polia, z ktorých každý obsahuje dvojicu (x, y).

    Upozorňujeme, že hoci obdĺžnik začína určitou orientáciou v trojrozmernom priestore (v rovine x-y a rovnobežne s osami), môžete to zmeniť použitím rotácií alebo iných transformácií. (Informácie o tom, ako to urobiť, nájdete v kapitole 3.)

    Krivky a zakrivené povrchy

    Akákoľvek hladko zakrivená čiara alebo povrch sa dá aproximovať - ​​s ľubovoľnou mierou presnosti - krátkymi úsečkami alebo malými mnohouholníkovými oblasťami. Teda dostatočné rozdelenie zakrivených čiar a plôch a ich aproximácia segmentmi priamky alebo plochými mnohouholníkmi spôsobí, že budú vyzerať zakrivené (pozri obrázok 2-5). Ak ste skeptickí, že to naozaj funguje, predstavujte si ďalšie členenie, kým nebude každý čiarový segment alebo polygón taký malý, že je menší ako pixel na obrazovke.

    Obrázok 2-5: Aproximačné krivky

    Aj keď krivky nie sú geometrickými primitívmi, OpenGL poskytuje určitú priamu podporu pre ich delenie a kreslenie. (Informácie o tom, ako kresliť krivky a zakrivené povrchy, nájdete v kapitole 12.)

    Zadanie vrcholov

    S OpenGL sú všetky geometrické objekty nakoniec opísané ako usporiadaná sada vrcholov. Pomocou príkazu glVertex * () určíte vrchol.

    void glVertex <234>[v] (TYPEcoords) Určuje vrchol na použitie pri opise geometrického objektu. Môžete zadať až štyri súradnice (x, y, z, w) pre konkrétny vrchol alebo len dve (x, y) výberom príslušnej verzie príkazu. Ak používate verziu, ktorá výslovne nešpecifikuje z alebo w, z sa rozumie 0 a w sa chápe ako 1. Hovory na glVertex * () sú účinné iba medzi pármi glBegin () a glEnd ().

    Príklad 2-2 poskytuje niekoľko príkladov použitia glVertex * ().

    Príklad 2-2: Právne použitia glVertex * ()

    Prvý príklad predstavuje vrchol s trojrozmernými súradnicami (2, 3, 0). (Pamätajte, že ak nie je zadaná, súradnica z sa chápe ako 0.) Súradnice v druhom príklade sú (0,0, 0,0, 3,1415926535898) (čísla s pohyblivou rádovou čiarkou s dvojitou presnosťou). Tretí príklad predstavuje vrchol s trojrozmernými súradnicami (1,15; 0,5; -1,1). (Pamätajte, že súradnice x, yaz sú nakoniec rozdelené súradnicou w.) V poslednom príklade je dvect ukazovateľ na pole troch čísel s pohyblivou rádovou čiarkou s dvojnásobnou presnosťou.

    Na niektorých strojoch je vektorová forma glVertex * () efektívnejšia, pretože grafickému subsystému musí byť odovzdaný iba jeden parameter. Špeciálny hardvér môže byť schopný odoslať celú sériu súradníc v jednej dávke. Ak je váš stroj taký, je vašou výhodou usporiadať údaje tak, aby sa súradnice vrcholov postupne ukladali do pamäte. V tomto prípade môže dôjsť k určitému zvýšeniu výkonu použitím operácií poľa vrcholov OpenGL. (Pozri „Vertex Arrays.“)

    OpenGL Geometrické kreslenie - primitívy

    Teraz, keď ste videli, ako určiť vrcholy, musíte ešte vedieť, ako povedať OpenGL, aby z týchto vrcholov vytvoril množinu bodov, úsečku alebo mnohouholník.Ak to chcete urobiť, urobte hranicu každej sady vrcholov medzi volaním glBegin () a volaním glEnd (). Argument odovzdaný glBegin () určuje, aký druh geometrického primitívu je konštruovaný z vrcholov. Napríklad Príklad 2-3> určuje vrcholy mnohouholníka zobrazeného na obrázku 2-6.

    Príklad 2-3: Vyplnený polygón

    Obrázok 2-6: Kreslenie mnohouholníka alebo sady bodov

    Ak by ste namiesto GL_POLYGON použili GL_POINTS, primitívom by bolo jednoducho päť bodov zobrazených na obrázku 2-6. Tabuľka 2-2 v nasledujúcom súhrne funkcií pre glBegin () uvádza desať možných argumentov a zodpovedajúci typ primitívu.

    void glBegin (režim GLenum) Označí začiatok zoznamu údajov o vrchole, ktorý popisuje geometrický primitív. Typ primitívu je označený režimom, ktorým môže byť ktorákoľvek z hodnôt uvedených v tabuľke 2-2. Tabuľka 2-2: Geometrické primitívne názvy a významy

    dvojice vrcholov interpretovaných ako jednotlivé úsečky

    séria spojených líniových segmentov

    rovnaké ako vyššie, so segmentom pridaným medzi posledný a prvý vrchol

    trojice vrcholov interpretovaných ako trojuholníky

    spojený pás trojuholníkov

    štvornásobky vrcholov interpretované ako štvorstranné polygóny

    spojený pás štvoruholníkov

    hranica jednoduchého, konvexného mnohouholníka

    Označí koniec zoznamu údajov o vrchole.

    Obrázok 2-7 zobrazuje príklady všetkých geometrických primitívov uvedených v tabuľke 2-2. Odseky, ktoré nasledujú po obrázku, popisujú pixely, ktoré sú nakreslené pre každý z objektov. Upozorňujeme, že okrem bodov je definovaných niekoľko typov čiar a mnohouholníkov. Je zrejmé, že môžete nájsť veľa spôsobov, ako nakresliť toho istého primitíva. Metóda, ktorú si vyberiete, závisí od vašich údajov o vrchole.

    Obrázok 2-7: Geometrické primitívne typy

    Pri čítaní nasledujúcich popisov predpokladajme, že n párov (v0, v1, v2,., Vn-1) je opísaných medzi pármi glBegin () a glEnd ().

    Nakreslí bod na každom z n vrcholov.

    Nakreslí sériu neprepojených úsečiek. Segmenty sa vykresľujú medzi v0 a v1, medzi v2 a v3 atď. Ak je n nepárne, posledný segment sa nakreslí medzi vn-3 a vn-2 a vn-1 sa ignoruje.

    Nakreslí čiarový segment z v0 na v1, potom z v1 na v2 atď. A nakoniec nakreslí segment z vn-2 na vn-1. Takto je nakreslených celkom n - 1 úsečiek. Nič nie je nakreslené, pokiaľ n nie je väčšie ako 1. Na vrcholy popisujúce čiarový pás (alebo čiarovú slučku) neexistujú žiadne obmedzenia, ktoré sa môžu čiary ľubovoľne pretínať.

    Rovnaké ako GL_LINE_STRIP, až na to, že sa posledný segment úsečky nakreslí z vn-1 na v0 a dokončí tak slučku.

    Nakreslí sériu trojuholníkov (trojstranných mnohouholníkov) pomocou vrcholov v0, v1, v2, potom v3, v4, v5 atď. Ak n nie je presný násobok 3, konečný jeden alebo dva vrcholy sa ignorujú.

    Nakreslí sériu trojuholníkov (trojstranných polygónov) pomocou vrcholov v0, v1, v2, potom v2, v1, v3 (všimnite si poradie), potom v2, v3, v4 atď. Objednávka má zabezpečiť, aby boli všetky trojuholníky nakreslené s rovnakou orientáciou, aby mohol pás správne tvoriť súčasť povrchu. Zachovanie orientácie je dôležité pri niektorých operáciách, ako napríklad zabíjanie. (Pozri „Cúvanie a odstraňovanie mnohouholníkových tvárí“) n musí byť minimálne 3, aby sa dalo niečo nakresliť.

    Rovnaké ako GL_TRIANGLE_STRIP, až na to, že vrcholy sú v0, v1, v2, potom v0, v2, v3, potom v0, v3, v4 atď. (Pozri obrázok 2-7).

    Nakreslí sériu štvoruholníkov (štvorstranné mnohouholníky) pomocou vrcholov v0, v1, v2, v3, potom v4, v5, v6, v7 atď. Ak n nie je násobkom 4, konečný jeden, dva alebo tri vrcholy sa ignorujú.

    Nakreslí sériu štvoruholníkov (štvorstranné polygóny) začínajúcich na v0, v1, v3, v2, potom na v2, v3, v5, v4, potom na v4, v5, v7, v6 atď. (Pozri obrázok 2-7). n musí byť minimálne 4, aby sa niečo nakreslilo. Ak je n nepárne, výsledný vrchol sa ignoruje.

    Nakreslí mnohouholník pomocou bodov v0,. , vn-1 ako vrcholy. n musí byť minimálne 3, alebo sa nič nekreslí. Zadaný polygón sa navyše nesmie pretínať a musí byť konvexný. Ak vrcholy tieto podmienky nespĺňajú, výsledky sú nepredvídateľné.

    Obmedzenia pri používaní glBegin () a glEnd ()

    Najdôležitejšou informáciou o vrcholoch sú ich súradnice, ktoré určuje príkaz glVertex * (). Môžete tiež dodať ďalšie údaje špecifické pre vrchol pre každý vrchol - farbu, normálny vektor, súradnice textúry alebo ľubovoľnú ich kombináciu - pomocou špeciálnych príkazov. Okrem toho je medzi pármi glBegin () a glEnd () platných niekoľko ďalších príkazov. Tabuľka 2-3 obsahuje kompletný zoznam týchto platných príkazov.

    Tabuľka 2-3: Platné príkazy medzi glBegin () a glEnd ()

    nastaviť normálne vektorové súradnice

    extrahovať údaje vrcholového poľa

    Medzi pármi glBegin () a glEnd () nie sú platné žiadne iné príkazy OpenGL a uskutočnenie väčšiny ďalších hovorov OpenGL generuje chybu. Niektoré príkazy vrcholového poľa, ako napríklad glEnableClientState () a glVertexPointer (), keď sú volané medzi glBegin () a glEnd (), majú nedefinované správanie, ale nevyhnutne nevytvárajú chybu. (Rutiny súvisiace s OpenGL, ako napríklad rutiny glX * (), majú nedefinované správanie medzi glBegin () a glEnd ().) Týmto prípadom by ste sa mali vyhnúť a ich ladenie môže byť zložitejšie.

    Upozorňujeme však, že sú obmedzené iba príkazy OpenGL, môžete určite zahrnúť aj iné konštrukcie programovacieho jazyka (okrem hovorov, ako napríklad vyššie uvedené rutiny glX * ()). Napríklad príklad 2-4 nakreslí obrysový kruh.

    Príklad 2-4: Ostatné konštrukcie medzi glBegin () a glEnd ()

    Poznámka: Tento príklad nie je najefektívnejším spôsobom, ako nakresliť kruh, najmä ak to chcete urobiť opakovane. Použité grafické príkazy sú zvyčajne veľmi rýchle, ale tento kód počíta uhol a volá rutiny sin () a cos () pre každý vrchol, navyše je tu réžia slučky. (Ďalším spôsobom, ako vypočítať vrcholy kruhu, je použitie rutiny GLU, pozri „Kvadrics: vykreslenie guľôčok, valcov a diskov“ v kapitole 11.) Ak potrebujete nakresliť veľa kruhov, vypočítajte súradnice vrcholov raz a uložte ich do poľa a vytvorte zoznam zobrazenia (pozri kapitolu 7) alebo na ich vykreslenie použite vrcholové polia.

    Pokiaľ nie sú zostavené do zoznamu na zobrazenie, všetky príkazy glVertex * () by sa mali objavovať medzi kombináciami glBegin () a glEnd (). (Ak sa objavia inde, nič nesplnia.) Ak sa zobrazia v zozname na obrazovke, vykonajú sa, iba ak sa objavia medzi glBegin () a glEnd (). (Ďalšie informácie o zoznamoch na displeji nájdete v kapitole 7.)

    Aj keď je medzi glBegin () a glEnd () povolených veľa príkazov, vrcholy sa generujú iba pri vydaní príkazu glVertex * (). V okamihu, keď sa volá glVertex * (), OpenGL priraďuje výslednému vrcholu aktuálnu farbu, súradnice textúry, normálne vektorové informácie atď. Ak to chcete vidieť, pozrite si nasledujúcu postupnosť kódov. Prvý bod je napriek zvláštnym farebným príkazom nakreslený červenou farbou a druhý a tretí bod modrou farbou.

    Môžete použiť ľubovoľnú kombináciu 24 verzií príkazu glVertex * () medzi glBegin () a glEnd (), aj keď v skutočných aplikáciách majú všetky hovory v konkrétnom prípade rovnakú formu. Ak je vaša špecifikácia údajov o vrchole konzistentná a opakujúca sa (napríklad glColor *, glVertex *, glColor *, glVertex *.), Môžete výkon svojho programu vylepšiť použitím vrcholových polí. (Pozri „Vertex Arrays.“)

    Základné riadenie štátu

    V predchádzajúcej časti ste videli príklad stavovej premennej, aktuálnej farby RGBA a toho, ako ju možno priradiť k primitívu. OpenGL udržuje veľa stavov a stavových premenných. Objekt môže byť vykreslený s osvetlením, textúrami, odstránením skrytého povrchu, hmlou alebo inými stavmi ovplyvňujúcimi jeho vzhľad.

    Väčšina z týchto stavov je predvolene neaktívnych. Aktivácia týchto stavov môže byť napríklad nákladná, zapnutie mapovania textúr takmer určite spomalí rýchlosť vykresľovania primitívu. Kvalita obrazu sa však zlepší a bude vyzerať realistickejšie kvôli vylepšeným grafickým možnostiam.

    Mnoho z týchto stavov môžete zapnúť a vypnúť pomocou týchto dvoch jednoduchých príkazov:

    void glEnable (uzáver GLenum)
    void glDisable (GLenum cap) glEnable () zapne funkciu a glDisable () ju vypne. Existuje viac ako 40 vymenovaných hodnôt, ktoré je možné odovzdať ako parameter parametrom glEnable () alebo glDisable (). Niektoré príklady sú GL_BLEND (ktorý riadi zmiešavanie hodnôt RGBA), GL_DEPTH_TEST (ktorý riadi porovnanie hĺbky a aktualizácie hĺbkovej medzipamäte), GL_FOG (ktorý riadi hmlu), GL_LINE_STIPPLE (vzorované čiary), GL_LIGHTING (získate predstavu) a tak ďalej.

    Môžete tiež skontrolovať, či je stav momentálne povolený alebo zakázaný.

    GLboolean glIsEnabled (GLenum capability) R eturns GL_TRUE or GL_FALSE, depending on whether the queryed capability is currently activated.

    Stavy, ktoré ste práve videli, majú dve nastavenia: zapnuté a vypnuté. Väčšina rutín OpenGL však nastavuje hodnoty pre komplikovanejšie stavové premenné. Napríklad rutina glColor3f () nastavuje tri hodnoty, ktoré sú súčasťou stavu GL_CURRENT_COLOR. Existuje päť rutín dotazovania, ktoré sa používajú na zistenie, aké hodnoty sú nastavené pre mnoho stavov:

    void glGetBooleanv (GLenum pname, GLboolean * params)
    void glGetIntegerv (GLenum pname, GLint * params)
    void glGetFloatv (GLenum pname, GLfloat * params)
    void glGetDoublev (GLenum pname, GLdouble * params)
    void glGetPointerv (GLenum pname, GLvoid ** params) Získava premenné stavu typu Boolean, integer, floating-point, double-precision alebo pointer. Argument pname je symbolická konštanta označujúca stavovú premennú, ktorá sa má vrátiť, a params je ukazovateľ na pole označeného typu, do ktorého sa majú vrátiť vrátené údaje. Možné hodnoty pre pname sú uvedené v tabuľkách v prílohe B. Napríklad pre získanie aktuálnej farby RGBA vám tabuľka v prílohe B navrhuje, aby ste použili glGetIntegerv (GL_CURRENT_COLOR, params) alebo glGetFloatv (GL_CURRENT_COLOR, params). V prípade potreby sa vykoná typová konverzia, aby sa požadovaná premenná vrátila ako požadovaný údajový typ.

    Tieto rutiny dotazovania vybavujú väčšinu, ale nie všetky, požiadaviek na získanie informácií o stave. (Ďalších 16 rutín dotazovania nájdete v časti „Príkazy dotazu“ v prílohe B.)

    Zobrazenie bodov, čiar a mnohouholníkov

    Predvolene je bod nakreslený ako jediný pixel na obrazovke, čiara je nakreslená plnou a jeden pixel široká a polygóny sú nakreslené pevne vyplnené. Nasledujúce odstavce pojednávajú o podrobnostiach, ako zmeniť tieto predvolené režimy zobrazenia.

    Podrobnosti o bode

    Ak chcete ovládať veľkosť vykresleného bodu, použite glPointSize () a ako argument zadajte požadovanú veľkosť v pixeloch.

    void glPointSize (GLfloat size) Nastaví šírku v pixeloch pre veľkosť vykreslených bodov, ktorá musí byť väčšia ako 0,0 a predvolene je 1,0.

    Skutočná zbierka pixelov na obrazovke, ktoré sú nakreslené pre rôzne šírky bodov, závisí od toho, či je povolené vyhladzovanie. (Vyhlazovanie je technika vyhladzovania bodov a čiar pri ich vykresľovaní, viac podrobností nájdete v časti „Vyhlazovanie“ v kapitole 6.) Ak je vyhladzovanie vypnuté (predvolené), zlomkové šírky sa zaokrúhlia na celé čísla a štvorec zarovnaný podľa obrazovky. je nakreslená oblasť pixelov. Ak je teda šírka 1,0, štvorec je 1 pixel x 1 pixel, ak je šírka 2,0, štvorec je 2 pixely x 2 pixely atď.

    Pri povolenom vyhladzovaní je nakreslená kruhová skupina pixelov a pixely na hraniciach sú zvyčajne vykreslené s menej ako plnou intenzitou, aby okraj mal hladší vzhľad. V tomto režime nie sú celé šírky zaokrúhlené.

    Väčšina implementácií OpenGL podporuje veľmi veľké veľkosti bodov. Maximálna veľkosť vyhladených bodov je dopytovateľná, ale rovnaké informácie nie sú k dispozícii pre štandardné vyhladené body. Konkrétna implementácia by však mohla obmedziť veľkosť štandardných aliasovaných bodov na nie menej ako je maximálna veľkosť antialiasedového bodu zaokrúhlená na najbližšiu celočíselnú hodnotu. Túto hodnotu s pohyblivou rádovou čiarkou môžete získať pomocou GL_POINT_SIZE_RANGE s glGetFloatv ().

    Detaily linky

    Pomocou OpenGL môžete určiť čiary s rôznymi šírkami a čiary, ktoré sú bodkované rôznymi spôsobmi - bodkované, prerušované, nakreslené striedajúcimi sa bodkami a pomlčkami atď.

    Široké čiary

    Skutočné vykreslenie čiar je ovplyvnené režimom vyhladzovania, rovnako ako pri bodoch. (Pozri „Vyhlazovanie“ v kapitole 6.) Bez vyhladenia, šírky 1, 2 a 3 vykresľujú čiary široké 1, 2 a 3 pixely. Ak je povolené vyhladzovanie, sú možné šírky nelineárnych čiar a pixely na hraniciach sa zvyčajne vykresľujú s menej ako plnou intenzitou. Rovnako ako pri veľkostiach bodov, aj konkrétna implementácia OpenGL môže obmedziť šírku neantializovaných riadkov na maximálnu šírku vyhladeného riadku, zaokrúhlenú na najbližšiu celočíselnú hodnotu. Túto hodnotu s pohyblivou rádovou čiarkou môžete získať pomocou GL_LINE_WIDTH_RANGE s glGetFloatv ().

    Poznámka: Pamätajte, že predvolené riadky majú šírku 1 pixel, takže sa na obrazovkách s nižším rozlíšením javia širšie. Pre počítačové displeje to obvykle nie je problém, ale ak používate OpenGL na vykreslenie do plotru s vysokým rozlíšením, 1-pixlové čiary môžu byť takmer neviditeľné. Ak chcete získať šírku čiary nezávislú od rozlíšenia, musíte brať do úvahy fyzické rozmery pixelov.

    Pri neprirodzených širokých čiarach sa šírka čiary nemeria kolmo na čiaru. Namiesto toho sa meria v smere y, ak je absolútna hodnota sklonu menšia ako 1,0, inak sa meria v smere x. Vykreslenie vyhladenej čiary je presne ekvivalentné vykresleniu vyplneného obdĺžnika danej šírky so stredom na presnej čiare.

    Zaškrtnuté čiary

    Ak chcete vytvoriť bodkované (bodkované alebo prerušované) čiary, pomocou príkazu glLineStipple () definujete vzor bodky a potom povolíte bodkovanie pomocou glEnable ().

    void glLineStipple (faktor GLint, GLushort pattern) Nastaví aktuálny bodkovací vzor pre čiary. Argument pattern je 16-bitová séria 0s a 1s a v prípade potreby sa daný riadok opakuje, ako je potrebné. 1 označuje, že sa vyskytuje kresba, a 0, že nie, na základe jednotlivých pixelov, počnúc bitom vzoru nízkeho rádu. Vzor je možné roztiahnuť pomocou faktora, ktorý znásobí každú podskupinu po sebe nasledujúcich 1 s a 0 s. Ak sa teda vo vzore objavia tri po sebe idúce 1 s, natiahnu sa na šesť, ak je faktor 2. faktor je upnutý tak, aby ležal medzi 1 a 255. Bodkovanie riadku musí byť povolené prechodom GL_LINE_STIPPLE na glEnable () je zakázané vypnutím rovnakého argument na glDisable ().

    S predchádzajúcim príkladom a vzorom 0x3F07 (čo v binárnom preklade znamená 0011111100000111) by sa nakreslila čiara so zapnutými 3 pixelmi, potom vypnutými 5, 6 zapnutými a 2 vypnutými. (Ak sa to zdá byť zaostalé, nezabudnite, že sa najskôr použije bit dolného rádu.) Keby bol faktor 2, vzor by sa predĺžil: 6 pixelov zapnuté, 10 vypnuté, 12 zapnuté a 4 vypnuté. Obrázok 2-8 zobrazuje čiary nakreslené rôznymi vzormi a faktormi opakovania. Ak nepovolíte bodkovanie, kreslenie bude pokračovať, akoby bol vzor 0xFFFF a faktor 1. (Na zakázanie bodkovania použite glDisable () s GL_LINE_STIPPLE.) Upozorňujeme, že bodkovanie je možné použiť v kombinácii so širokými čiarami na vytvorenie širokých čiarkovaných čiar.

    Obrázok 2-8: Potlačené čiary

    Jedným zo spôsobov, ako premýšľať o bodkovaní, je to, že pri kreslení čiary sa vzor posúva o 1 bit zakaždým, keď sa nakreslí pixel (alebo sa nakreslia faktorové pixely, ak faktor nie je 1). Keď je medzi jedným glBegin () a glEnd () nakreslená séria spojených líniových segmentov, vzor sa naďalej posúva, keď sa jeden segment zmení na ďalší. Týmto spôsobom pokračuje šablónový vzor v sérii spojených líniových segmentov. Keď sa vykoná glEnd (), vzor sa vynuluje a - ak sa pred vypnutím bodkovania nakreslí viac riadkov - bodkovanie sa reštartuje na začiatku vzoru. Ak kreslíte čiary pomocou GL_LINES, vzor sa vynuluje pre každú nezávislú čiaru.

    Príklad 2-5 ilustruje výsledky kreslenia s niekoľkými rôznymi bodkovými vzormi a šírkami čiar. Tiež ilustruje, čo sa stane, ak sú čiary nakreslené ako rad jednotlivých segmentov namiesto jedného spojeného pruhu čiar. Výsledky spustenia programu sa nachádzajú na obrázku 2-9.

    Obrázok 2-9: Široké bodkované čiary

    Príklad 2-5: Vzory čiarových vzorov: lines.c

    Polygónové podrobnosti

    Polygóny sa zvyčajne kreslia vyplnením všetkých pixelov uzavretých v rámci hranice, môžete ich však nakresliť aj ako obrysové polygóny alebo jednoducho ako body na vrcholoch. Vyplnený polygón môže byť pevne vyplnený alebo bodkovaný s určitým vzorom. Aj keď sú tu vynechané presné podrobnosti, vyplnené polygóny sú nakreslené takým spôsobom, že ak susedné polygóny zdieľajú hranu alebo vrchol, pixely tvoriace hranu alebo vrchol sú nakreslené presne raz - sú zahrnuté iba v jednom z polygónov. To sa deje tak, aby čiastočne priehľadné polygóny nemali svoje hrany nakreslené dvakrát, čo by spôsobilo, že by tieto hrany vyzerali tmavšie (alebo jasnejšie, v závislosti od toho, s akou farbou kreslíte). Môže to mať za následok, že úzke polygóny nebudú mať vyplnené pixely v jednom alebo viacerých riadkoch alebo stĺpcoch pixelov. Vyhlazovanie mnohouholníkov je zložitejšie ako pre body a čiary. (Podrobnosti nájdete v časti „Vyhlazovanie“ v kapitole 6.)

    Polygóny ako body, obrysy alebo plné telesá

    Polygón má dve strany - prednú a zadnú - a môže sa vykresliť odlišne v závislosti od toho, ktorá strana smeruje k divákovi. To vám umožní mať pohľady v reze na masívne objekty, v ktorých je zrejmý rozdiel medzi časťami, ktoré sú vo vnútri, a časťami, ktoré sú vonku. Predvolene sú obe predné a zadné tváre nakreslené rovnako. Ak to chcete zmeniť alebo nakresliť iba obrysy alebo vrcholy, použite glPolygonMode ().

    void glPolygonMode (tvár GLenum, režim GLenum) Ovláda režim kreslenia prednej a zadnej strany mnohouholníka. Tvár parametra môže byť GL_FRONT_AND_BACK, GL_FRONT alebo režim GL_BACK môže byť GL_POINT, GL_LINE alebo GL_FILL na označenie, či má byť mnohouholník nakreslený ako body, načrtnutý alebo vyplnený. Predvolene sú predná aj zadná strana nakreslené vyplnené.

    Môžete napríklad nechať vyplniť predné tváre a zadné tváre dvoma volaniami tejto rutiny:

    Cúvanie a vyraďovanie polygónových tvárí

    Podľa konvencie sa polygóny, ktorých vrcholy sa na obrazovke zobrazujú proti smeru hodinových ručičiek, nazývajú predné. Môžete vytvoriť povrch ľubovoľnej „rozumnej“ pevnej látky - matematik by tento povrch nazval orientovateľným rozdeľovačom (gule, šišky a čajníky sú orientovateľné Kleinove fľaše a Mobiusove pásky nie) - z polygónov konzistentnej orientácie. Inými slovami, môžete použiť všetky polygóny v smere hodinových ručičiek alebo všetky polygóny proti smeru hodinových ručičiek. (Toto je v podstate matematická definícia orientovateľného.)

    Predpokladajme, že ste dôsledne popisovali model orientovateľného povrchu, ale že náhodou máte zvonku orientáciu v smere hodinových ručičiek. To, čo OpenGL považuje za zadnú plochu, môžete vymeniť pomocou funkcie glFrontFace (), ktorá zabezpečí požadovanú orientáciu pre polygóny smerujúce dopredu.

    void glFrontFace (režim GLenum) Určuje, ako sa určujú polygóny smerujúce spredu. V predvolenom nastavení je režim GL_CCW, čo zodpovedá orientácii usporiadaných vrcholov premietaného mnohouholníka v súradniciach okna proti smeru hodinových ručičiek.Ak je režim GL_CW, tváre s orientáciou v smere hodinových ručičiek sa považujú za čelné.

    Na úplne uzavretom povrchu vyrobenom z nepriehľadných polygónov s konzistentnou orientáciou nie je nikdy viditeľný žiadny z polygónov obrátených dozadu - vždy sú zakryté polygónmi smerujúcimi dopredu. Ak ste mimo tento povrch, môžete povoliť utratenie a vyradiť polygóny, o ktorých OpenGL zistí, že sú obrátené. Podobne, ak sa nachádzate vo vnútri objektu, sú viditeľné iba polygóny smerujúce dozadu. Ak chcete dať OpenGL pokyn, aby zahodili predné alebo zadné polygóny, použite príkaz glCullFace () a povoľte utratenie pomocou glEnable ().

    void glCullFace (režim GLenum) Označuje, ktoré polygóny by sa mali zahodiť (vylúčiť) predtým, ako sa prevedú na súradnice obrazovky. Režim je buď GL_FRONT, GL_BACK alebo GL_FRONT_AND_BACK na označenie spredu, dozadu alebo všetkých polygónov. Aby bolo možné platiť, musí byť utratenie povolené pomocou glEnable () s GL_CULL_FACE, je možné ho deaktivovať pomocou glDisable () a rovnakého argumentu.

    Z technického hľadiska rozhodnutie, či je plocha mnohouholníka otočená spredu alebo dozadu, závisí od znamienka oblasti mnohouholníka vypočítaného v súradniciach okna. Jedným zo spôsobov, ako vypočítať túto oblasť, je

    kde x i a y i sú súradnice okna x a y i-tého vrcholu n -vrcholového polygónu a

    Za predpokladu, že bol zadaný GL_CCW, ak je & gt0, polygón zodpovedajúci danému vrcholu sa považuje za smerujúci spredu, je obrátený dozadu. Ak je zadaný GL_CW a ak & lt0, potom je zodpovedajúci mnohouholník obrátený spredu, je obrátený dozadu.

    Upravte príklad 2-5 pridaním niekoľkých vyplnených polygónov. Experimentujte s rôznymi farbami. Vyskúšajte rôzne režimy mnohouholníka. Povoľte tiež utratenie, aby ste videli jeho účinok.

    Stipding Polygons

    Vyplnené polygóny sa predvolene kreslia plným vzorom. Môžu byť tiež vyplnené 32-bitovým a 32-bitovým bodovým vzorom zarovnaným do okna, ktorý určíte glPolygonStipple ().

    void glPolygonStipple (const GLubyte * mask) Definuje aktuálny vzor stipple pre vyplnené polygóny. Maska argumentu je ukazovateľ na 32 & # 180 32 bitmapu, ktorá sa interpretuje ako maska ​​0 a 1 s. Tam, kde sa objaví 1, sa nakreslí zodpovedajúci pixel v mnohouholníku a tam, kde sa zobrazí 0, sa nekreslí nič. Obrázok 2-10 ukazuje, ako je z znakov v maske zostavený bodkovaný vzor. Polygon stippling je povolený a zakázaný použitím glEnable () a glDisable () s argumentom GL_POLYGON_STIPPLE. Interpretácia údajov masky je ovplyvnená režimami glPixelStore * () GL_UNPACK *. (Pozri „Ovládanie režimov ukladania pixelov“ v kapitole 8.)

    Okrem definovania súčasného vzoru bodkovania polygónu musíte povoliť bodkovanie:

    Použite glDisable () s rovnakým argumentom na zakázanie bodkovania polygónov.

    Obrázok 2-11 zobrazuje výsledky polygónov nakreslených nekomplikovane a potom s dvoma rôznymi vzormi dotiahnutia. Program je uvedený v príklade 2-6. K obráteniu bielej na čiernu (z obrázka 2-10 na obrázok 2-11) dôjde, pretože program kreslí bielu farbu na čierne pozadie a používa vzor zo schémy 2-10 ako šablónu.

    Obrázok 2-10: Konštrukcia mnohouholníkového vzorčeka

    Obrázok 2-11: Štipcovité polygóny

    Príklad 2-6: Polygónové vzory vzorov: polys.c

    Možno budete chcieť použiť zobrazovacie zoznamy na ukladanie vzorov polygónových bodiek, aby ste maximalizovali účinnosť. (Pozri „Filozofia dizajnu zobrazovaného zoznamu“ v kapitole 7.)

    Označenie hraníc polygónu

    OpenGL dokáže vykresliť iba konvexné polygóny, ale v praxi vzniká veľa nekonvexných polygónov. Ak chcete nakresliť tieto nekonvexné polygóny, zvyčajne ich rozdelíte na konvexné polygóny - zvyčajne trojuholníky, ako je to znázornené na obrázku 2-12 - a potom nakreslite trojuholníky. Bohužiaľ, ak rozložíte všeobecný polygón na trojuholníky a nakreslíte ich, nemôžete skutočne použiť glPolygonMode () na nakreslenie obrysov mnohouholníka, pretože všetky obrysy trojuholníka obsahujú. Ak chcete vyriešiť tento problém, môžete OpenGL povedať, či konkrétny vrchol predchádza hraničnej hrane. OpenGL sleduje tieto informácie tak, že spolu s každým vrcholom odovzdá kúsok označujúci, či za týmto vrcholom nasleduje hraničná hrana. Keď sa potom nakreslí polygón v režime GL_LINE, nevykreslia sa hraničné okraje. Na obrázku 2-12 prerušované čiary predstavujú pridané okraje.

    Obrázok 2-12: Rozdelenie nekonvexného mnohouholníka

    V predvolenom nastavení sú všetky vrcholy označené ako predchádzajúce hraničnej hrane, nastavenie príznaku hrany však môžete ovládať ručne príkazom glEdgeFlag * (). Tento príkaz sa používa medzi pármi glBegin () a glEnd () a ovplyvňuje všetky po ňom určené vrcholy až do uskutočnenia ďalšieho volania glEdgeFlag (). Vzťahuje sa iba na vrcholy určené pre mnohouholníky, trojuholníky a štvorkolky, nie na vrcholy určené pre pásy trojuholníkov alebo štvorkoliek.

    void glEdgeFlag (GLboolean flag)
    void glEdgeFlagv (const GLboolean * flag) Označuje, či sa má vrchol považovať za inicializáciu hraničnej hrany mnohouholníka. Ak je príznak GL_TRUE, príznak okraja je nastavený na TRUE (predvolené nastavenie) a všetky vytvorené vrcholy sa považujú za predchádzajúce hraničným okrajom, kým sa táto funkcia znova nevyvolá s príznakom GL_FALSE.

    Napríklad príklad 2-7 nakreslí obrys zobrazený na obrázku 2-13.

    Obrázok 2-13: Obrysový polygón nakreslený pomocou vlajok na okraji

    Príklad 2-7: Označenie hraníc hraníc polygónu

    Normálne vektory

    Normálny vektor (alebo skrátene normálny) je vektor, ktorý smeruje v smere kolmom na povrch. Pre rovný povrch je jeden kolmý smer rovnaký pre každý bod na povrchu, ale pre všeobecne zakrivený povrch môže byť normálny smer v každom bode povrchu odlišný. Pomocou OpenGL môžete určiť normálu pre každý polygón alebo pre každý vrchol. Vrcholy toho istého mnohouholníka môžu zdieľať rovnakú normálu (pre rovný povrch) alebo môžu mať odlišné normály (pre zakrivený povrch). Normály však nemôžete priradiť nikde inde ako na vrcholoch.

    Normálne vektory objektu určujú orientáciu jeho povrchu v priestore - najmä jeho orientáciu vzhľadom na svetelné zdroje. Tieto vektory používa OpenGL na určenie toho, koľko svetla dostane objekt na svoje vrcholy. Osvetlenie - samo o sebe veľká téma - je predmetom kapitoly 5 a možno si budete chcieť prečítať nasledujúce informácie po prečítaní tejto kapitoly. O normálnych vektoroch sa tu stručne diskutuje, pretože pre objekt definujete normálne vektory a zároveň definujete geometriu objektu.

    Pomocou glNormal * () nastavíte aktuálnu normálu na hodnotu vloženého argumentu. Následné volania glVertex * () spôsobia, že zadaným vrcholom bude priradený aktuálny normál. Každý vrchol má často inú normálu, čo si vyžaduje sériu striedajúcich sa volaní, ako v príklade 2-8.

    Príklad 2-8: Normály povrchu na vrcholoch

    void glNormal3 (TYPEnx, TYPEny, TYPEnz)
    void glNormal3 v (const TYPE * v) Nastaví aktuálny normálny vektor podľa argumentov. Verzia bez vektorov (bez v) má tri argumenty, ktoré určujú vektor (nx, ny, nz), ktorý sa považuje za normálny. Alternatívne môžete použiť vektorovú verziu tejto funkcie (s v) a zadať jedno pole troch prvkov na určenie požadovanej normály. Verzie b, s a i zväčšujú svoje hodnoty parametrov lineárne na rozsah [-1,0,1,0].

    Načítať normály pre objekt nie je nijaké kúzlo - s najväčšou pravdepodobnosťou musíte vykonať nejaké výpočty, ktoré môžu zahŕňať aj odvodenie derivátov - ale na dosiahnutie určitých efektov môžete použiť niekoľko techník a trikov. Príloha E vysvetľuje, ako nájsť normálne vektory pre povrchy. Ak už viete, ako to urobiť, ak môžete rátať s tým, že vám budú vždy dodané normálne vektory, alebo ak nechcete používať osvetľovacie zariadenie poskytované osvetľovacím zariadením OpenGL, nemusíte si prečítať túto prílohu.

    Upozorňujeme, že v danom bode na povrchu sú dva vektory kolmé na povrch a smerujú v opačných smeroch. Podľa konvencie je normálna tá, ktorá smeruje k vonkajšej strane modelovaného povrchu. (Ak sa vo vašom modeli zvnútra a zvonku obrátite, stačí zmeniť každý normálny vektor z (x, y, z) na (- & ampxgr, - y, - z)).

    Nezabúdajte tiež, že keďže bežné vektory označujú iba smer, ich dĺžka je väčšinou irelevantná. Môžete zadať normály ľubovoľnej dĺžky, ale nakoniec sa musia pred vykonaním výpočtov osvetlenia previesť na dĺžku 1. (Vektor, ktorý má dĺžku 1, má jednotkovú dĺžku alebo je normalizovaný.) Všeobecne by ste mali dodať normalizované normálne vektory. Ak chcete vytvoriť normálny vektor s dĺžkou jednotky, vydelte každú z jeho zložiek x, y, z dĺžkou normály:

    Normálne vektory zostanú normalizované, pokiaľ transformácie vášho modelu zahŕňajú iba rotácie a preklady. (Diskusiu o transformáciách nájdete v kapitole 3.) Ak vykonávate nepravidelné transformácie (napríklad zmena mierky alebo vynásobenie šmykovou maticou) alebo ak zadáte normály inej ako dĺžky, mali by ste mať program OpenGL po transformáciách automaticky normalizovať vaše normálne vektory. . Ak to chcete urobiť, zavolajte glEnable () s argumentom GL_NORMALIZE. Automaticky je štandardne vypnutá. Upozorňujeme, že automatická normalizácia zvyčajne vyžaduje ďalšie výpočty, ktoré by mohli znížiť výkon vašej aplikácie.

    Vrcholné polia

    Možno ste si všimli, že OpenGL vyžaduje na vykreslenie geometrických primitívov veľa volaní funkcií. Kreslenie 20-stranného mnohouholníka vyžaduje 22 volaní funkcií: jedno volanie glBegin (), jedno volanie pre každý z vrcholov a posledné volanie glEnd (). V dvoch predchádzajúcich príkladoch kódu ďalšie informácie (príznaky hraníc mnohouholníka alebo normály povrchu) pridali volania funkcií pre každý vrchol. Takto môžete rýchlo zdvojnásobiť alebo strojnásobiť počet volaní funkcií potrebných pre jeden geometrický objekt. V prípade niektorých systémov majú volania funkcií veľkú réžiu a môžu brániť výkonu.

    Ďalším problémom je redundantné spracovanie vrcholov, ktoré sú zdieľané medzi susednými polygónmi. Napríklad kocka na obrázku 2-14 má šesť tvárí a osem zdieľaných vrcholov. Bohužiaľ, pri použití štandardnej metódy popisu tohto objektu by musel byť každý vrchol určený trikrát: raz pre každú tvár, ktorá ho používa. Bolo by teda spracovaných 24 vrcholov, aj keď by ich bolo dosť.

    Obrázok 2-14: Šesť strán osem zdieľaných vrcholov

    OpenGL má rutiny poľa vrcholov, ktoré vám umožňujú zadať množstvo údajov súvisiacich s vrcholmi iba pomocou niekoľkých polí a pristupovať k týmto údajom s rovnako malým počtom volaní funkcií. Pomocou rutín vrcholového poľa bolo možné vložiť všetkých 20 vrcholov v 20-strannom mnohouholníku do jedného poľa a zavolať ich pomocou jednej funkcie. Keby mal každý vrchol tiež normálu povrchu, všetkých 20 normálov povrchu bolo možné vložiť do iného poľa a tiež zavolať jednou funkciou.

    Usporiadanie údajov vo vrcholových poliach môže zvýšiť výkon vašej aplikácie. Použitie vrcholných polí znižuje počet volaní funkcií, čo zvyšuje výkon. Používanie vrcholových polí tiež môže umožniť neredundantné spracovanie zdieľaných vrcholov. (Zdieľanie vrcholu nie je podporované vo všetkých implementáciách OpenGL.)

    Poznámka: Polia Vertex sú štandardom vo verzii 1.1 OpenGL, ale neboli súčasťou špecifikácie OpenGL 1.0. S OpenGL 1.0 niektorí dodávatelia implementovali vrcholové polia ako rozšírenie.

    Používanie vrcholných polí na vykreslenie geometrie má tri kroky.

    Aktivujte (povoľte) až šesť polí, z ktorých každé ukladá iný typ údajov: súradnice vrcholov, farby RGBA, farebné indexy, normály povrchu, súradnice textúry alebo príznaky hrany mnohouholníka.

    Vložte údaje do poľa alebo polí. K poliam sa pristupuje pomocou adries (tj. Ukazovateľov na) ich pamäťových miest. V modeli klient-server sú tieto údaje uložené v adresnom priestore klienta.

    Nakreslite geometriu s údajmi. OpenGL získava údaje zo všetkých aktivovaných polí dereferenciou ukazovateľov. V modeli klient-server sa údaje prenášajú do adresného priestoru servera. Existujú tri spôsoby, ako to urobiť:

    Prístup k jednotlivým prvkom poľa (náhodne poskakujúci)

    Vytvorenie zoznamu jednotlivých prvkov poľa (metodicky poskakovanie)

    Spracovanie prvkov postupného poľa

    Zvolená metóda dereferencie môže závisieť od typu problému, s ktorým sa stretnete.

    Ďalším bežným spôsobom organizácie sú dáta vloženého vrcholového poľa. Namiesto toho, aby ste mali až šesť rôznych polí, z ktorých každé uchováva iný typ údajov (farba, normála povrchu, súradnice atď.), Môžete mať rôzne typy údajov zmiešané do jedného poľa. (Dva spôsoby riešenia tohto problému nájdete v časti „Prekladané polia“.)

    Krok 1: Povolenie polí

    Prvým krokom je volanie glEnableClientState () s vymenovaným parametrom, ktorý aktivuje vybrané pole. Teoreticky to možno budete musieť zavolať až šesťkrát, aby ste aktivovali šesť dostupných polí. V praxi budete pravdepodobne aktivovať iba medzi jedným až štyrmi poľami. Napríklad je nepravdepodobné, že by ste aktivovali GL_COLOR_ARRAY aj GL_INDEX_ARRAY, pretože režim zobrazenia vášho programu podporuje buď režim RGBA, alebo režim indexu farieb, ale pravdepodobne nie obidva súčasne.

    void glEnableClientState (pole GLenum) Určuje pole, ktoré sa má povoliť. Symbolické konštanty GL_VERTEX_ARRAY, GL_COLOR_ARRAY, GL_INDEX_ARRAY, GL_NORMAL_ARRAY, GL_TEXTURE_COORD_ARRAY a GL_EDGE_FLAG_ARRAY sú prijateľné parametre.

    Ak používate osvetlenie, možno budete chcieť definovať normálu povrchu pre každý vrchol. (Pozri „Normálne vektory“.) Ak chcete v takom prípade použiť vrcholové polia, aktivujete povrchové normálové aj vrcholové súradnice:

    Predpokladajme, že chcete v určitom okamihu vypnúť osvetlenie a iba nakresliť geometriu pomocou jednej farby. Chcete zavolať glDisable () na vypnutie svetelných stavov (pozri kapitolu 5). Teraz, keď bolo osvetlenie deaktivované, chcete tiež prestať meniť hodnoty normálneho stavu povrchu, čo je zbytočné úsilie. Ak to chcete urobiť, zavolajte

    void glDisableClientState (pole GLenum) Určuje pole, ktoré sa má zakázať. Prijíma rovnaké symbolické konštanty ako glEnableClientState ().

    Možno si kladiete otázku, prečo architekti OpenGL vytvorili tieto nové (a dlhé!) Názvy príkazov, gl * ClientState (). Prečo nemôžete zavolať glEnable () a glDisable ()? Jedným z dôvodov je, že glEnable () a glDisable () môžu byť uložené v zozname zobrazení, ale špecifikácia vrcholových polí nemôže, pretože údaje zostávajú na strane klienta.

    Krok 2: Zadanie údajov pre polia

    Existuje priamy spôsob, ktorým jediný príkaz špecifikuje jedno pole v klientskom priestore. Existuje šesť rôznych rutín na zadanie polí - jedna rutina pre každý druh poľa. Existuje aj príkaz, ktorý dokáže určiť niekoľko polí klientskeho priestoru naraz, všetky pochádzajú z jedného prekladaného poľa.

    void glVertexPointer (veľkosť GLint, typ GLenum, GLsizei stride,
    const GLvoid * pointer) Určuje, kde je možné získať prístup k údajom o priestorových súradniciach. pointer je adresa pamäte prvej súradnice prvého vrcholu v poli. type určuje typ údajov (GL_SHORT, GL_INT, GL_FLOAT alebo GL_DOUBLE) každej súradnice v poli. size je počet súradníc na vrchol, ktorý musí byť 2, 3 alebo 4. krok je posunutie bajtu medzi po sebe nasledujúcimi vrcholmi. Ak je krok 0, potom sa vrcholy chápu ako pevne zabalené v poli.

    Na prístup k ďalším piatim poliam existuje päť podobných rutín:

    void glColorPointer (veľkosť GLint, typ GLenum, GLsizei stride,
    const GLvoid * ukazovateľ)
    void glIndexPointer (typ GLenum, GLsizei stride, const GLvoid * ukazovateľ)
    void glNormalPointer (typ GLenum, GLsizei stride,
    const GLvoid * ukazovateľ)
    void glTexCoordPointer (veľkosť GLint, typ GLenum, GLsizei stride,
    const GLvoid * ukazovateľ)
    void glEdgeFlagPointer (GLsizei stride, const GLvoid * pointer)

    Hlavné rozdiely medzi rutinami sú v tom, či sú veľkosť a typ jedinečné alebo musia byť špecifikované. Napríklad normála povrchu má vždy tri komponenty, takže je zbytočné určovať jej veľkosť. Príznak okraja je vždy jeden boolovský znak, takže nie je potrebné uvádzať veľkosť ani typ. Tabuľka 2-4 zobrazuje zákonné hodnoty pre veľkosť a typy údajov.

    Tabuľka 2-4: Veľkosti poľa vrcholu (hodnoty na vrchol) a typy údajov (pokračovanie)

    GL_SHORT, GL_INT, GL_FLOAT, GL_DOUBLE

    GL_BYTE, GL_SHORT, GL_INT, GL_FLOAT, GL_DOUBLE

    GL_BYTE, GL_UNSIGNED_BYTE, GL_SHORT, GL_UNSIGNED_SHORT, GL_INT, GL_UNSIGNED_INT, GL_FLOAT, GL_DOUBLE

    GL_UNSIGNED_BYTE, GL_SHORT, GL_INT, GL_FLOAT, GL_DOUBLE

    GL_SHORT, GL_INT, GL_FLOAT, GL_DOUBLE

    žiadny argument typu (typ údajov musí byť GLboolean)

    Príklad 2-9 používa vrcholové polia pre farby RGBA aj pre súradnice vrcholov. Hodnoty RGB s pohyblivou rádovou čiarkou a ich zodpovedajúce (x, y) celočíselné súradnice sa načítajú do GL_COLOR_ARRAY a GL_VERTEX_ARRAY.

    Príklad 2-9: Povolenie a načítanie vrcholných polí: varray.c

    Kráčať

    S nulovým krokom musí byť každý typ vrcholového poľa (farba RGB, farebný index, súradnica vrcholov atď.) Pevne zabalený. Údaje v poli musia byť homogénne, to znamená, že údajmi musia byť všetky hodnoty farieb RGB, všetky súradnice vrcholov alebo všetky ďalšie údaje, ktoré sú nejakým spôsobom podobné.

    Použitie kroku iného ako nula môže byť užitočné, najmä keď sa jedná o prekladané polia. V nasledujúcom poli GLfloats je šesť vrcholov. Pre každý vrchol existujú tri hodnoty farieb RGB, ktoré sa striedajú so súradnicami vrcholu (x, y, z).

    Stride umožňuje vrcholovému poľu prístup k požadovaným údajom v pravidelných intervaloch v poli. Napríklad, aby sme odkazovali iba na hodnoty farieb v prepletenom poli, nasledujúce volanie sa začína od začiatku poľa (ktoré by sa dalo tiež odovzdať ako & ampintertwined [0]) a preskočí 6 * sizeof (GLfloat) bajtov, čo je veľkosť farebných aj vrcholových súradníc. Tento skok je dostatočný na to, aby ste sa dostali na začiatok údajov pre ďalší vrchol.

    Pre ukazovateľ súradníc vrcholov musíte začať od ďalšieho poľa, pri štvrtom prepletenom prvku (nezabudnite, že programátori C začínajú počítať od nuly).

    Krok 3: Dereferencovanie a vykreslenie

    Kým nedôjde k dereferencii obsahu vrcholných polí, zostanú tieto polia na strane klienta a ich obsah sa dá ľahko meniť. V kroku 3 sa získa obsah polí, ktorý sa odošle na server a potom sa pošle dolu kanál spracovania grafiky na vykreslenie.

    Existujú tri spôsoby, ako získať údaje: z jedného prvku poľa (indexované umiestnenie), zo sekvencie prvkov poľa a z usporiadaného zoznamu prvkov poľa.

    Dereferencia prvku s jedným poľom

    glArrayElement () sa zvyčajne nazýva medzi glBegin () a glEnd (). (Ak je volané vonku, glArrayElement () nastaví aktuálny stav pre všetky povolené polia, okrem vrcholu, ktorý nemá aktuálny stav.) V príklade 2 - 10 je nakreslený trojuholník pomocou tretieho, štvrtého a šiesteho vrcholu z povoleného vrcholu polia (znova nezabudnite, že programátori jazyka C začnú počítať umiestnenia polí s nulou).

    Príklad 2-10: Použitie glArrayElement () na definovanie farieb a vrcholov

    Po spustení má posledných päť riadkov kódu rovnaký účinok ako

    Pretože glArrayElement () je iba jedno volanie funkcie na vrchol, môže znížiť počet volaní funkcií, čo zvyšuje celkový výkon.

    Upozorňujeme, že ak sa zmení obsah poľa medzi glBegin () a glEnd (), nie je zaručené, že dostanete pôvodné údaje alebo zmenené údaje pre požadovaný prvok. Z bezpečnostných dôvodov nemeňte obsah žiadneho prvku poľa, ku ktorému je možné získať prístup, až kým nebude dokončený primitív.

    Dereferencia zoznamu prvkov poľa

    glArrayElement () je vhodný na náhodné "preskakovanie" vašich dátových polí. Podobná rutina glDrawElements () je dobrá na usporiadanejšie preskakovanie okolo vašich dátových polí.

    void glDrawElements (režim GLenum, počet GLsizei, typ GLenum,
    void * indices) Definuje postupnosť geometrických primitívov pomocou počtu prvkov, ktorých indexy sú uložené v indexoch poľa. type musí byť jeden z GL_UNSIGNED_BYTE, GL_UNSIGNED_SHORT alebo GL_UNSIGNED_INT, čo označuje dátový typ poľa indexov. mode určuje, aký druh primitívov je konštruovaný, a je jednou z rovnakých hodnôt, ktoré akceptuje glBegin (), napríklad GL_POLYGON, GL_LINE_LOOP, GL_LINES, GL_POINTS atď.

    Účinok glDrawElements () je takmer rovnaký ako v tomto poradí príkazov:

    glDrawElements () navyše kontroluje, či je režim, počet a typ platný. Na rozdiel od predchádzajúcej sekvencie tiež vykonávanie glDrawElements () ponecháva neurčité niekoľko stavov. Po vykonaní glDrawElements () je aktuálna farba RGB, index farieb, normálne súradnice, súradnice textúry a príznak okraja neurčité, ak je príslušné pole povolené.

    Pomocou glDrawElements () môžu byť vrcholy pre každú tvár kocky umiestnené v rade indexov. Príklad 2-11 ukazuje dva spôsoby použitia glDrawElements () na vykreslenie kocky. Obrázok 2-15 zobrazuje číslovanie vrcholov použitých v príklade 2-11.

    Obrázok 2-15: Kocka s očíslovanými vrcholmi

    Príklad 2-11: Dva spôsoby použitia glDrawElements ()

    Alebo ešte lepšie, rozdelte všetky indexy dohromady:

    Poznámka: Je chybou zapuzdriť glDrawElements () medzi pár glBegin () / glEnd ().

    Pri obidvoch glArrayElement () a glDrawElements () je tiež možné, že vaša implementácia OpenGL ukladá do medzipamäte nedávno spracované vrcholy, čo umožňuje vašej aplikácii vrcholy „zdieľať“ alebo „opakovane používať“. Vezmime si napríklad spomínanú kocku, ktorá má šesť tvárí (mnohouholníkov), ale iba osem vrcholov. Každý vrchol používajú presne tri tváre. Bez glArrayElement () alebo glDrawElements () by vykreslenie všetkých šiestich tvárí vyžadovalo spracovanie dvadsiatich štyroch vrcholov, hoci šestnásť vrcholov by bolo nadbytočných. Vaša implementácia OpenGL môže byť schopná minimalizovať redundanciu a spracovať až osem vrcholov. (Opätovné použitie vrcholov môže byť obmedzené na všetky vrcholy v rámci jedného volania glDrawElements () alebo pre glArrayElement () v rámci jedného páru glBegin () / glEnd ().)

    Dereferencia sekvencie prvkov poľa

    Zatiaľ čo glArrayElement () a glDrawElements () „poskakujú“ po vašich údajových poliach, glDrawArrays () sa cez ne zorientuje.

    void glDrawArrays (režim GLenum, GLint first, GLsizei count) Vytvorí sekvenciu geometrických primitívov pomocou prvkov poľa začínajúcich najskôr a končiacich prvým + počet -1 každého povoleného poľa. mode určuje, aké druhy primitívov sú konštruované, a je jednou z rovnakých hodnôt akceptovaných glBegin (), napríklad GL_POLYGON, GL_LINE_LOOP, GL_LINES, GL_POINTS atď.

    Účinok glDrawArrays () je takmer rovnaký ako v tomto poradí príkazov:

    Rovnako ako v prípade glDrawElements (), glDrawArrays () tiež vykonáva kontrolu chýb svojich hodnôt parametrov a ponecháva aktuálnu farbu RGB, index farieb, normálne súradnice, súradnice textúry a príznak okraja s neurčitými hodnotami, ak je príslušné pole povolené.

    Prekladané polia

    Predtým v tejto kapitole (v „Stride“) bol skúmaný špeciálny prípad prekladaných polí. V tejto časti sa k prepletenému poľu, ktoré prekladá súradnice farieb RGB a 3D vrcholov, pristupovalo prostredníctvom volaní glColorPointer () a glVertexPointer (). Starostlivé použitie kroku pomohlo správne špecifikovať polia.

    Existuje tiež monštrum rutiny glInterleavedArrays (), ktoré dokáže určiť niekoľko vrcholných polí naraz. glInterleavedArrays () tiež umožňuje a zakazuje príslušné polia (takže kombinuje kroky 1 aj 2). Pole prepletené presne zapadá do jednej zo štrnástich konfigurácií vkladania údajov podporovaných glInterleavedArrays (). Takže aby ste určili obsah poľa prepleteného do farebných a vrcholových polí RGB a umožnili obidve polia, zavolajte

    Toto volanie glInterleavedArrays () umožňuje polia GL_COLOR_ARRAY a GL_VERTEX_ARRAY. Zakáže položky GL_INDEX_ARRAY, GL_TEXTURE_COORD_ARRAY, GL_NORMAL_ARRAY a GL_EDGE_FLAG_ARRAY.

    Toto volanie má tiež rovnaký účinok ako volanie glColorPointer () a glVertexPointer () na zadanie hodnôt pre šesť vrcholov do každého poľa. Teraz ste pripravení na krok 3: Volanie glArrayElement (), glDrawElements () alebo glDrawArrays () na dereferenciu prvkov poľa.

    void glInterleavedArrays (formát GLenum, GLsizei stride, void * pointer) Inicializuje všetkých šesť polí, zakáže polia, ktoré nie sú zadané vo formáte, a povolí zadané polia. format je jedna zo 14 symbolických konštánt, ktoré predstavujú 14 dátových konfigurácií. Tabuľka 2-5 zobrazuje hodnoty formátu. stride určuje posun bajtu medzi po sebe idúcimi vrcholmi. Ak je krok 0, vrcholy sa chápu ako pevne zabalené v poli. pointer je adresa pamäte prvej súradnice prvého vrcholu v poli.

    Upozorňujeme, že glInterleavedArrays () nepodporuje príznaky okraja.

    Mechanika glInterleavedArrays () je zložitá a vyžaduje odkaz na príklad 2-12 a tabuľku 2-5. V tomto príklade a tabuľke uvidíte et, ec a en, ktoré sú boolovskými hodnotami pre povolené alebo zakázané súradnice textúry, farby a normálne polia, a uvidíte st, sc a sv, ktoré sú veľkosti (počet komponentov) súradníc textúr, farieb a vrcholových polí. tc je údajový typ pre farbu RGBA, čo je jediné pole, ktoré môže mať hodnoty typu float bez prekladania. pc, pn a pv sú vypočítané kroky pre skok cez jednotlivé hodnoty farieb, normálne a vrcholy a s je krok (ak nie je zadaný používateľom), ktorý slúži na skok z jedného prvku poľa na nasledujúci.

    Účinok glInterleavedArrays () je rovnaký ako volanie postupnosti príkazov v príklade 2-12 s mnohými hodnotami definovanými v tabuľke 2-5. Celá aritmetika ukazovateľa sa vykonáva v jednotkách sizeof (GL_UNSIGNED_BYTE).

    Príklad 2-12: Účinok glInterleavedArrays (formát, krok, ukazovateľ)

    V tabuľke 2-5 sú T a F pravdivé a nepravdivé. f je veľkosť (GL_FLOAT). c je 4-krát sizeof (GL_UNSIGNED_BYTE), zaokrúhlené na najbližší násobok f.