.[ ČeskéHry.cz ].
Pohyb samostatnych 3D objektu

 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> 3D API / 3D Enginy
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
Juraj



Založen: 06. 12. 2007
Příspěvky: 189

PříspěvekZaslal: 6. prosinec 2007, 14:01:13    Předmět: Pohyb samostatnych 3D objektu Odpovědět s citátem

Potřeboval bych radu,

chtěl bych si pro začátek vytvořit editor, kde si v prostoru budu umisťovat jednotlive 3D objekty. Jde mi o to co je nejlepší používat. Už jsem si vykreslil mesh nacteny z .x souboru ale dostal jsem se k problemu ze neivm jak pohybovat s jednotlivym objektem. Vsude jsou priklady jak pohybovat pouze s matici worldu. Neco uz jsem si cetl i o HLSL.

Tak abych to shrnul, potřebuji spíše radu a nějaký stučný návod jak otáčet jednotlivé meshe bez toho abych musel transformovat matici worldu. Nevím kde mám začít hledat.

Doufam že jem můj problém alespoň trochu srozumitelně nastínil, v Direct 3D začínám.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
tempicek



Založen: 04. 12. 2007
Příspěvky: 62

PříspěvekZaslal: 6. prosinec 2007, 14:09:44    Předmět: Re: Pohyb samostatnych 3D objektu Odpovědět s citátem

Pokud uz umis hybat s objektem pomoci world matice, tak Ti zbyva pouze tu matici spravne sestavit. Mohu to tu rozebrat vice, ale myslim, ze nejjednodussi pro Tebe bude pouzit funkci D3DXMatrixTransformation, ktera ma spoustu parametru, ale Tebe zajima jen par z nich, pro zacatek nejspis pouze Translation vektor. Ten nastavis podle toho, kam chces objekt ve scene umistit, tzn. napriklad

kód:
D3DXVECTOR3 vec3 = { 100, 200, 300 };

D3DXMatrixTransformation( ...., &vec3 );


umisti ten Tvuj objekt do svetovych souradnic x=100, y=200, z=300.

Pak si muzes hrat s rotacemi, potrebujes-li.

Doufam, ze to bylo to, co jsi hledal...
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Augi



Založen: 28. 07. 2007
Příspěvky: 782
Bydliště: Čerčany

PříspěvekZaslal: 6. prosinec 2007, 14:12:05    Předmět: Odpovědět s citátem

S objekty se manipuluje ale právě pomocí world matice. Kdybys to chtěl dělat jinak, tak jedině přes modifikaci vertexů, což by bylo strašně pomalý. Takže pozici/rotaci/scale objektu měň určitě pomocí world matice. Tahle matice může být samozřejmě pro každý objekt jiná, tzn. že před vykreslením každého objektu nastavíš odpovídající world matici.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Juraj



Založen: 06. 12. 2007
Příspěvky: 189

PříspěvekZaslal: 6. prosinec 2007, 14:18:02    Předmět: Odpovědět s citátem

Takže jsem to asi spravně pochoil. Něco o manipulovaní přímo s vertexy jsem čelt v tom HLSL.

A další dotaz Smile, pokud budu nastavovat matice worldu před vykreslením meshe, nebude to nějak extra pomalé, např úři vykrelsování cca 100 jednodušších objektů?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
tempicek



Založen: 04. 12. 2007
Příspěvky: 62

PříspěvekZaslal: 6. prosinec 2007, 14:30:25    Předmět: Odpovědět s citátem

To je bezny postup, takze to bude tak pomale, jak to byva vzdycky Smile Par tisic jich za frame zvladnes bez problemu.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Juraj



Založen: 06. 12. 2007
Příspěvky: 189

PříspěvekZaslal: 6. prosinec 2007, 14:33:20    Předmět: Odpovědět s citátem

tempicek napsal:
To je bezny postup, takze to bude tak pomale, jak to byva vzdycky Smile Par tisic jich za frame zvladnes bez problemu.


Chtěl bych si uděla takovou 3D scénu, ale i s nějakými efekty aby nebyla jak mrtvá. Tak jsem se ptal jak na to abych to v půlce nemusel předělávat na jinej spůsob. A ještě jedna věc, takže vždy před vykreslením jednotliveho meshe mu nastavim danou matici world. Pak dalsi a zase jinou matici.

Pochopil jsem to správně?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
tempicek



Založen: 04. 12. 2007
Příspěvky: 62

PříspěvekZaslal: 6. prosinec 2007, 14:39:30    Předmět: Odpovědět s citátem

Myslim, ze jsi to pochopil spravne, ale ja to napisi radeji strukturovane, aby to bylo jasne:

Begin Frame 1
SetWorldMatrix( obj1 );
Draw( obj1 );
SetWorldMatrix( obj2 );
Draw( obj2 );
...
End Frame 1

Begin Frame 2
SetWorldMatrix( obj1 );
Draw( obj1 );
SetWorldMatrix( obj2 );
Draw( obj2 );
...
End Frame 2


No a obcas je potreba tu matici jeste aktualizovat, ale to zpravidla nedelas pro kazdy objekt kazdy snimek.[/code]
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Peta



Založen: 28. 07. 2007
Příspěvky: 154
Bydliště: V prvnim patre hned vedle koupelny.

PříspěvekZaslal: 6. prosinec 2007, 15:29:15    Předmět: Odpovědět s citátem

Já jen dodám, že až tam budeš chtít přidat rotace, je nutné si uvědomit, že není jedno, zda objekt nejdřív posuneš a pak otočíš nebo opačně. Obojí vede k úplně jiným výsledkům. Nevím přesně jak je to realizováno v DX (co se týče programování), protože jsem v něm nedělal a mám zkušenosti jen s OpenGL, tak doufám že nekecám z cesty Smile
_________________
Když je Ti smutno, otoč se tváří ke slunci a všechny stíny padnou za Tebe.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Deluxe



Založen: 31. 07. 2007
Příspěvky: 235
Bydliště: Oslavany

PříspěvekZaslal: 6. prosinec 2007, 18:28:41    Předmět: Odpovědět s citátem

Pokud vim tak je to stejny jako v gl, protoze pokazdy musis nasobit matice. pokud vim tak by to mnelo byt scale*rotace*translation, ale nejsem si jistej
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
rezna



Založen: 27. 07. 2007
Příspěvky: 2156

PříspěvekZaslal: 6. prosinec 2007, 22:57:32    Předmět: Odpovědět s citátem

Deluxe napsal:
pokud vim tak by to mnelo byt scale*rotace*translation, ale nejsem si jistej


blbost Wink - zalezi na tom co chces delat - chces objekt posunout na danou pozici a na te ho mit natoceny o X stupnu (pak prvne rotuj pak posunuj) - chces objekt posunout a dane pozici orotovat kolem stredu (toho kde by predtim) - pak translace a potom rotace
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Augi



Založen: 28. 07. 2007
Příspěvky: 782
Bydliště: Čerčany

PříspěvekZaslal: 6. prosinec 2007, 22:57:38    Předmět: Odpovědět s citátem

D3D používá řádkové vektory a OGL sloupcové. Z toho vyplývá, že násobení matic probíhá v opačném pořadí a používané matice jsou vzájemně transponované.

Jinak jak jsi se zmiňoval o manipulování s vertexy v HLSL, tak to je něco jiného než s nima manipulovat ve vertex bufferu. Když manipuluješ v HLSL s vertexem, tak to děláš na základě parametrů, které jsi poslal do efektu, což de facto odpovídá nastavení world matrix.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> 3D API / 3D Enginy Časy uváděny v GMT + 1 hodina
Strana 1 z 1

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra
Nemůžete odpovídat na témata v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete hlasovat v tomto fóru


Powered by phpBB © 2001, 2005 phpBB Group


Vzhled udelal powermac
Styl "vykraden" z phpBB stylu MonkiDream - upraveno by rezna