Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
hybr1D
Založen: 02. 09. 2007 Příspěvky: 22
|
Zaslal: 28. duben 2014, 08:15:53 Předmět: posun bodu |
|
|
Zdravím.
Mám menší problém. Mám program, kedy keď kliknem myšou do scény, má sa na danom mieste vytvoriť objekt. Nemá sa vytvoriť priamo v tom bode ale posúvam ho na ose Z o 10 dopredu. Mám vytvorenú funkciu, ktorá má vypočítať súradnice. Problém je v tom, že keď ten bod posuniem o 10 dopredu, tak už nie je na pozícií kurzora (to bude asi tou perspektívou). Vedel by mi niekto prosím poradiť, ako dosiahnuť toho, aby keď kliknem na scénu, tak sa mi bod vytvorí na pozícii kliku plus 10 na osi Z. Funkcia, ktorá počíta súradnice vyzerá nejak takto:
kód: |
public Vektor openGLPos(int x, int y)
{ //prepocet suradnic kliku v okne, na suradnice v 3D OpenGL
Double outX, outY, outZ; //vysupne suradnice
Vektor win = new Vektor(x, DATA.viewport[3] - y, 0);
unsafe //pracujem s pointrami tak musim byt v unsafe mode
{
CsGL.OpenGL.GL.glReadPixels(x, DATA.viewport[3] - y, 1, 1, GL.DEPTH_COMPONENT, GL.FLOAT, (&outZ)); //zizkam Ztovu suradnicu
}
//funkcia prepocita suradnice
CsGL.OpenGL.GL.gluUnProject(win.X, win.Y, outZ, DATA.modelview, DATA.projection, DATA.viewport, out outX, out outY, out outZ);
//pusniem bod kliku o 10 na ose Z
Vektor temp = new Vektor(outX - (10 * DATA.modelview[2]), outY - (10 * DATA.modelview[6]), outZ - (10 * DATA.modelview[10])); //
return temp;
} |
|
|
Návrat nahoru |
|
|
Ladis
Založen: 18. 09. 2007 Příspěvky: 1536 Bydliště: u Prahy
|
Zaslal: 28. duben 2014, 09:39:46 Předmět: |
|
|
Neposouvej ho +10 v z, ale +10 vektorem kamera->zjištěná_pozice. _________________ Award-winning game developer |
|
Návrat nahoru |
|
|
hybr1D
Založen: 02. 09. 2007 Příspěvky: 22
|
Zaslal: 28. duben 2014, 11:19:49 Předmět: |
|
|
A ako zistim vektor kamery? Robim to v C# pomocou OpenGL4Net |
|
Návrat nahoru |
|
|
Ladis
Založen: 18. 09. 2007 Příspěvky: 1536 Bydliště: u Prahy
|
Zaslal: 28. duben 2014, 12:18:19 Předmět: |
|
|
No kamera je někde umístěna, to je bod 1. Nalezený bod je bod 2. Když je spojíš, tak máš vektor směru "od kamery k bodu 2" (z tvého pohledu je to jeden pixel mířící do monitoru). Podělíš svojí velikostí, vynásobíš délkou, o kterou chceš posunout, a to přičteš k bodu 2. _________________ Award-winning game developer |
|
Návrat nahoru |
|
|
hybr1D
Založen: 02. 09. 2007 Příspěvky: 22
|
Zaslal: 28. duben 2014, 14:40:10 Předmět: |
|
|
A suradnice kamery zistim ako? Nepouzivam funkciu LookAt ale len translate a rotate. S kamerou kamerou ako takou som zatial moc nerobil, tak som z toho trochu mimo |
|
Návrat nahoru |
|
|
Ladis
Založen: 18. 09. 2007 Příspěvky: 1536 Bydliště: u Prahy
|
Zaslal: 28. duben 2014, 15:25:26 Předmět: |
|
|
Tak jestli jen hýbeš objekty okolo kamery, tak kamera je na výchozí pozici. Podle 3D API si přečti v dokumentaci, kde to je. _________________ Award-winning game developer |
|
Návrat nahoru |
|
|
hybr1D
Založen: 02. 09. 2007 Příspěvky: 22
|
Zaslal: 28. duben 2014, 21:52:08 Předmět: |
|
|
Super, už to fičí! Ďakujem moc. |
|
Návrat nahoru |
|
|
|