Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 14 odgovora
  • 7.517 pregleda

Najnovija ↓

Klik na 3d objekat 13.10.2005. u 01:55 · pre 256 meseci #1
Bezuspesno sam trazio na netu primer kako da u Direct3D sceni kada kliknem misem na objekat, dobijem informaciju koji je objekat "selektovan".

Molim Vas da mi pomognete. Da li postoji neka funkcija ili je nesto drugo.
Re: Klik na 3d objekat 13.10.2005. u 02:02 · pre 256 meseci #2
Citat:
Article on Mouse Picking - 04/06/05

There comes a time in every 3D game where the user needs to click on something in the scene. Maybe he needs to select a unit in an RTS, or open a door in an RPG, or delete some geometry in a level editing tool. This conceptually simple task is easy to screw up since there are so many little steps that can go wrong. I've written an article on this subject, however it's in PDF form since it's pretty heavy on the math notation.

http://www.bookofhook.com/Article/GameDevelopment/mousepick.pdf
Potpis
https://github.com/bkaradzic/bgfx
Re: Klik na 3d objekat 13.10.2005. u 07:22 · pre 256 meseci #3
Ej ako neko zna rjesenje iste stvari u openGL ?
Potpis
Never argue with an idiot. They bring you down to their level and beat you with
experience.
Re: Klik na 3d objekat 13.10.2005. u 13:49 · pre 256 meseci #5
Ma na dialu sam, pa nemam para da downloadujem ne provjerene stvari, jer znate svi kako je kada skdate nesto duze vrijeme, i nakon toga nije to ono sto vam treba ...
Potpis
Never argue with an idiot. They bring you down to their level and beat you with
experience.
Re: Klik na 3d objekat 13.10.2005. u 14:45 · pre 256 meseci
izmenjeno 1 put, poslednji put SashaX 13.10.2005. u 14:46
  1. SashaX13.10.2005. u 14:46zapis iz teksta poruke
#6
To je 100kb, oko 20-ak sekundi maximalno preko dial-up-a
Re: Klik na 3d objekat 13.10.2005. u 19:34 · pre 256 meseci #7
Kazem ti nemam para, da provjeravam ono u sta nisam siguran, tj. radije cu fino pitati, pa kad neko kaze to je to onda ga skinem, a ne da skidam sve redom sa stranice, dok eventualno nenadjem ono pravo, u ovom slucaju je to jedan link, al' eto ...
Potpis
Never argue with an idiot. They bring you down to their level and beat you with
experience.
Re: Klik na 3d objekat 21.02.2006. u 00:20 · pre 251 mesec #9
Evo i koda za "buduca pokoljenja". Davno sam ovo pisao tako da mi sad i nije bas sve jasno, ali radi (verovatno je opisano u tom pdf-u, zvuci mi jako poznato)

Code:
// informations about the intersection between picking ray and mesh
struct INTERSECTION {
  // face in the mesh
  DWORD dwFace;
  // distance
  float fDist;
  // barycentric coordinates
  float fBary1, fBary2;
  // position of intersection
  D3DXVECTOR3 vPos;
};

bool CMyObject::IsClicked(int nMouseX, int nMouseY, int nWidth, int nHeight, INTERSECTION* pIntersection) {
  // transform the screen into the world coordinates
  D3DXMATRIX mxTemp;
  m_pD3DDevice->GetTransform(D3DTS_PROJECTION, &mxTemp);
  float fNear = - mxTemp._43 / mxTemp._33;
  float fNewX = (2.0f * nMouseX / nWidth - 1) / mxTemp._11;
  float fNewY = -(2.0f * nMouseY / nHeight - 1) / mxTemp._22;

  // calculate the inverse of the object's world transformation matrix
  D3DXMATRIX mxInvWorld;
  D3DXMatrixInverse(&mxInvWorld, NULL, &m_mxWorld);
  // calculate the inverse of the view transformation matrix
  D3DXMATRIX mxInvView;
  m_pD3DDevice->GetTransform(D3DTS_VIEW, &mxTemp);
  memcpy(&mxInvView, &mxTemp, sizeof(D3DXMATRIX));
  D3DXMatrixInverse(&mxInvView, NULL, &mxInvView);

  // calculate the ray direction vector
  D3DXVECTOR3 vRayDir;
  vRayDir.x = fNewX * mxInvView._11 + fNewY * mxInvView._21 + fNear * mxInvView._31;
  vRayDir.y = fNewX * mxInvView._12 + fNewY * mxInvView._22 + fNear * mxInvView._32;
  vRayDir.z = fNewX * mxInvView._13 + fNewY * mxInvView._23 + fNear * mxInvView._33;
  D3DXVec3Normalize(&vRayDir, &vRayDir);
  // we must rememeber this direction, before transforming it into object's space
  D3DXVECTOR3 vOldDir;
  memcpy(&vOldDir, &vRayDir, sizeof(D3DXVECTOR3));
  // transform the direction vector
  D3DXVec3TransformNormal(&vRayDir, &vRayDir, &mxInvWorld);

  // calculate the ray position vector
  D3DXVECTOR3 vRayPos = D3DXVECTOR3(mxInvView._41, mxInvView._42, mxInvView._43);
  // we must remember this vector, before transforming it into object's space
  pIntersection->vPos = vRayPos;
  // transform the position vector (transform coordinates of this point)
  D3DXVec3TransformCoord(&vRayPos, &vRayPos, &mxInvWorld);

  BOOL bHit;
  // check to see if the ray intersects the mesh
  D3DXIntersect(m_pMesh, &vRayPos, &vRayDir, &bHit, &pIntersection->dwFace, &pIntersection->fBary1,
    &pIntersection->fBary2, &pIntersection->fDist, NULL, NULL);
  if (bHit) {
    D3DXVec3Scale(&vOldDir, &vOldDir, pIntersection->fDist);
    D3DXVec3Add(&pIntersection->vPos, &pIntersection->vPos, &vOldDir);
  }
  return bHit;
}
Re: Klik na 3d objekat 24.02.2006. u 11:28 · pre 251 mesec #10
Citat:
Kazem ti nemam para, da provjeravam ono u sta nisam siguran


Vise ti je vremena trebalo fda napises ova dva posta, nemoj da se izvlacis
Re: Klik na 3d objekat 24.02.2006. u 13:57 · pre 251 mesec #11
Eh Djordje ne citas sve ... Rekao sam da nemam para da skidam sve sto se postavi na stranici tj. radije cu pitati pa cekati potvrdu da se u tom i tom fajlu nalazi ono sto mi treba, nego skidati dakle sve.
Potpis
Never argue with an idiot. They bring you down to their level and beat you with
experience.
Re: Klik na 3d objekat 24.02.2006. u 15:09 · pre 251 mesec #12
pricamo o konkretnom fajlu od 100k koji mozes da skines dosta brzo. Procitao sam sve
Re: Klik na 3d objekat 14.07.2006. u 18:20 · pre 247 meseci #13
Aman bre sto komplikujete.. u OpenGL je uradjeno tako sto svaki objekat predas opengl-u sa sa odgovarajucim ID-om . zatim postavis frustum da bude veoma uzak i izrendiras scenu i opengl ti vrati spisak svih objekata koji se nalaze u frustum-u.. sada mozes proizvoljno da biras koji ti treba ili prirodno koji je najblizi..

pozdrav.
Potpis
Necu vise da radim ,bre !
Re: Klik na 3d objekat 15.07.2006. u 15:38 · pre 247 meseci
izmenjeno 2 puta, poslednji put genuine 15.07.2006. u 15:49
  1. genuine15.07.2006. u 15:49zapis iz teksta poruke
  2. genuine15.07.2006. u 15:49zapis iz teksta poruke
#15
onda ovako.. svaki objekat ima svoj bounding volume ( bilo box, sphere ili sta vec) kada radite ispitivanje preseka onda prvo eliminisete sve koje mozete koristeci negi algoritam ... a za one potencijalne uradite proveru preseka sa zrakom.. ako nema preseka sa bounding volume onda nema ni sa objektom a ako ima onda udjete u hijerarhiju objeta i ispitujete preseke na sledecem nivou ( znaci preseci bounding volume-a ruke, noge, krila , tocka i sl i zraka ) .. postupak se ponavlja sve dok se ne dodje do listova u hijararhiji.... kada se stigne do njih testiranje se nastavlja ispitivanjem preseka zraka i trouglova.... svi objekti ( bilo koreni ili neki u stablu hijararhije) sa kojima postoji potencijalni presek se stavljaju u red i algoritam cupa prvi iz reda i nastavlja testiranje.. ako nadje nekoliko mogucnosti onda njih doda u red i tako redom...
Potpis
Necu vise da radim ,bre !
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme