Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
SUK
Založen: 14. 11. 2007 Příspěvky: 93 Bydliště: /dev/null
|
Zaslal: 27. leden 2008, 19:33:56 Předmět: 3D Smer kliknuti |
|
|
Kdyz uzivatel klikne nekam do 3D sceny (tzn na formular), potrebuju zjistit jakym to je smerem od kamery. Zatim mam napsano tohle: http://rafb.net/p/cUMCvQ35.html coz ale bohuzel nefunguje uplne tak jak bych chtel, hlavne kdyz se podivam pod sebe. Vi/ma nekdo nejaky reseni?
A jen tak mimochodem - jakej je asi tak idealni(kolik treba pouzivaj hry ap) pocet vertexu ve scene?
dik za rady, budou li |
|
Návrat nahoru |
|
|
nou
Založen: 28. 07. 2007 Příspěvky: 1047
|
Zaslal: 27. leden 2008, 20:09:50 Předmět: |
|
|
no mrkni na nehe je tam clanok o unproject http://nehe.ceske-hry.cz/cl_gl_gluunproject.php a pocet trojuholnikov zalezi od toho kolko karta zvladne. dnes je to tak milion tris _________________ Najjednoduchšie chyby sa najtažšie hľadajú. |
|
Návrat nahoru |
|
|
SUK
Založen: 14. 11. 2007 Příspěvky: 93 Bydliště: /dev/null
|
Zaslal: 27. leden 2008, 20:26:32 Předmět: |
|
|
milion? program co pisu uz kouse pri 150000 vertexech..
jinak dik za ten odkaz, snad to dokazu previst na to co prave delam.. btw, jak si mam predstavit souradnice kurzoru ktery to dela? je to smer od kamery nebo jak? |
|
Návrat nahoru |
|
|
nou
Založen: 28. 07. 2007 Příspěvky: 1047
|
Zaslal: 27. leden 2008, 23:58:12 Předmět: |
|
|
ide o to aku mas kartu. za druhe ako to vykrelujes. ale na Radeon 3850 co mam doma mi beha Crysis benchamrk kde vypisuje pocet tris okolo 1000000 a ide to na 22-26FPS a to este nie je ta najlepsia karta na trhu. no ak vykreslujes cez glBegin glEnd(odhadujem ze ides cez OGL) a na starucicekej Geforce 440SE som vykresloval 128000 tris iba s cullingom na 8FPS na glBegin glEnd a po prerobeni na DisplayListy to stuplo na 40FPS. _________________ Najjednoduchšie chyby sa najtažšie hľadajú. |
|
Návrat nahoru |
|
|
Marek
Založen: 28. 07. 2007 Příspěvky: 1782 Bydliště: Velká Morava
|
Zaslal: 28. leden 2008, 11:11:08 Předmět: |
|
|
Pro dosažení vhodné rychlosti doporučuju používat vertex arrays + vertex buffery + indexy.
Co se týče gluUnproject, nepoužívej glReadPixels na zjištění hloubky, jak je uvedeno v článku, je to strašně pomalé. Místo toho zadej hloubku jako 0, nech si vrátit pozici, pak zadej hloubku jako 1 a udělej to samé. Dostaneš 2 pozice, z nichž sestrojíš 3D přímku. Pro zjištění kolize s objekty budeš testovat průnik s touto přímkou. _________________ AMD Open Source Graphics Driver Developer |
|
Návrat nahoru |
|
|
SUK
Založen: 14. 11. 2007 Příspěvky: 93 Bydliště: /dev/null
|
Zaslal: 28. leden 2008, 11:27:41 Předmět: |
|
|
pouzivam DX, ale tak z toho OGL to snad nejak dostanu...
pouzivam jen jeden vertex buffer pro vse co vykresluju, nevim jestli to je rychlejsi nebo pomalejsi ale v tom problem asi tolik nebude si myslim
Eosie: ok, diky |
|
Návrat nahoru |
|
|
Marek
Založen: 28. 07. 2007 Příspěvky: 1782 Bydliště: Velká Morava
|
Zaslal: 28. leden 2008, 11:34:41 Předmět: |
|
|
gluUnproject je jenom pár jednoduchých výpočtů. Bod ve window space to převede do world space, toť vše. _________________ AMD Open Source Graphics Driver Developer |
|
Návrat nahoru |
|
|
]semo[
Založen: 29. 07. 2007 Příspěvky: 1526 Bydliště: Telč
|
Zaslal: 29. leden 2008, 09:36:53 Předmět: |
|
|
Jak říká eosie, vezmeš ModelViewProjection matici (nevím bohužel jak se jí říká v DX), ale je to normálě view matice kamery (invertovaná modelová matice kamery) vynásobená projekční maticí. Pak tu matici invertuj (aby nepřeváděla world space do post perspektive, ale obráceně).
Pak vezmeš souřadnice kursoru v okně (v opengl je to -1..1, čili musíš podělit velikostí okna, posunout a zvětšit...) jako třetí souřadnici zadáš -1 (což v OpenGL odpovídá pozici NearClip Plane v post perspektivním prostoru). Čtvrtá souřadnice je 1. Vynásobíš to tou maticí. Nezapomeň výsledek podělit čtvrtou suořadnicí. Tohle samý uděláš ještě jednou, ale jako hloubku (třetí souřadnici) dosadíš 1 (FarClip). A máš ty dva body ve světovým prostoru.
Funguje to, používám to v editoru.
V DX to bude nejspíš to samý, maximálně nějaký drobný odlišnosti. _________________ Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory |
|
Návrat nahoru |
|
|
Augi
Založen: 28. 07. 2007 Příspěvky: 782 Bydliště: Čerčany
|
Zaslal: 29. leden 2008, 10:08:41 Předmět: |
|
|
V DX se to liší tím, že near není na -1, ale na 0. Jinak je to stejný. |
|
Návrat nahoru |
|
|
SUK
Založen: 14. 11. 2007 Příspěvky: 93 Bydliště: /dev/null
|
Zaslal: 29. leden 2008, 10:38:18 Předmět: |
|
|
no, mam uz zjisteny vsechny souradnice, je nekde k sehnani zdroj glUnProject ? |
|
Návrat nahoru |
|
|
Augi
Založen: 28. 07. 2007 Příspěvky: 782 Bydliště: Čerčany
|
Zaslal: 29. leden 2008, 10:55:26 Předmět: |
|
|
Co třeba zkusit se zeptat Googlu nebo se mrknout do DirectX SDK? Pak bys rychle zjistil, že v DirectX existuje funkce D3DXVec3Unproject, která slouží přesně k tomu, co chceš. Jestli pak budeš chtít třeba testovat průsečík polopřímky s nějakým objektem (tj. hledání objektu, na který se kliklo), pak existuje v DirectX funkce D3DXIntersect - před jejím voláním ale doporučuju provést nějaký pre-test (např. na bounding sphere). |
|
Návrat nahoru |
|
|
SUK
Založen: 14. 11. 2007 Příspěvky: 93 Bydliště: /dev/null
|
Zaslal: 29. leden 2008, 11:16:56 Předmět: |
|
|
Ja googlil jak jsem mohl, jen se mi nedarilo najit to co potrebuju. Ale uz to mam diky Vector.Unproject a pak jsem odectl a normalizoval vektory a funguje. Dik moc! |
|
Návrat nahoru |
|
|
|