Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Direct3D meshin ja ray

panttu [22.07.2006 17:49:46]

#

Olen opiskellut D3D, jonkin verran olen yrittänyt saada tehtyä osan poiminta toimintoa. Ilmeisesti Geometry luokalla voi seuloa sellaiset meshit joihin säde osuu. Tosin ongelma tässä on meshien etäisyys järjestyksen tekeminen, jotta valituksi tulisi lähin mesh.

Toisena vaihtoehtona on näyttäisi olevan mesh.intersect-metodi ja tuolla kolmas parametri kertoisi enemmän tietoa kuten etäisyyden, mutta onko tuo kuinka tehoton, jos "osia" on paljon.

Onko muita ehdotuksia?

Metabolix [23.07.2006 07:41:33]

#

Vai löytyy D3D:stä tuollaisiakin. Yleensä nuo on tarpeen tehdä ihan itse.

Jos meshit ovat paikallaan, kannattaa viritellä sellainen systeemi, joka jakaa maailman tietyn kokoisiin kuutioihin, joiden sisällä on enintään määrätty määrä meshejä. Eli ensiksi jaetaan kahdeksaan kuutioon, ja jokaisessa näistä tarkistetaan meshien määrä ja jos niitä on liikaa, jaetaan kyseinen kuutio edelleen kahdeksaan osaan. Näin tarvitsee tarkistaa säteen leikkaavuus tietyn meshin kanssa vain, jos säde kulkee tietyn kuution kautta. Tämä toimii täysin mutkattomasti ja tehokkaasti vain, jos meshit ovat paikallaan; uusi jako laatikoihin joka framella ei välttämättä ole kannattava.

Tehokasta on myös laskea jokaiselle meshille bounding box ja/tai bounding sphere eli ympäröivä laatikko ja ympäröivä pallo. Etenkin jälkimmäisellä osumien tarkistaminen on hyvin nopeaa, jolloin suuri osa mesheistä on mahdollista hylätä nopealla tarkistuksella. Jos meshit ovat enimmäkseen kuperia, voi olla tehokasta laskea myös kokonaan sisäpuolella oleva pallo, jolloin täysin selvät leikkauksetkin löytyvät nopeasti. Tästä ei tietenkään enää ole hyötyä, jos leikkauspistekin pitää selvittää, mutta pelkästään varman leikkauksen tunnistamista se voi nopeuttaa.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta