Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Direct3d i klikanie na obiekcie

4 views
Skip to first unread message

FRT

unread,
Dec 13, 2004, 2:38:15 PM12/13/04
to
Jestem poczatkujacy w directx. Czy mozecie mnie naprowadzic na to jak
mam wychwycic kiedy jakis obiekt widoczny na ekranie zostanie kilkniety?
Najlepiej jakis przyklad lub link w c# ale w innych jezykach tez moze
byc :-D

BTW jakie polecacie narzedzie do tworzenia obiektow .x ???

Dzieki!

PS. wyslane na 3 grupy na raz :-)

--
gRiTs!!!
>>>>>>Pawel Halastra 'FRT'
>>>>>>fortar (at) o2 (dot) pl
>>>>>>http://3imagination.com
>>>>>>http://www.fortar.host.sk
>>>>>>ICQ: 35715927 GG: 5426327

Kołek Szymon

unread,
Dec 14, 2004, 4:47:30 AM12/14/04
to
?

pozdr.
st3tc


Pawel Halastra 'FRT'

unread,
Dec 14, 2004, 6:30:28 AM12/14/04
to
ZetX wrote:
> // przyklad w oparciu o: C# i Managed DirectX, Mesh'e reprezentujace siatki
> // obiektow renderowanych (jak bedziesz wczytywal .x to pewnie uzyjesz Mesh'y)
[CIACH]

Po 100x dzieki! Zaraz zabieram sie wdrazanie tego w zycie :-)

ZetX

unread,
Dec 14, 2004, 4:28:51 AM12/14/04
to
// przyklad w oparciu o: C# i Managed DirectX, Mesh'e reprezentujace siatki
// obiektow renderowanych (jak bedziesz wczytywal .x to pewnie uzyjesz Mesh'y)
//
// deviceD3D jest typu Microsoft.DirectX.Direct3D.Device
// Object3D jest to klasa zawierajaca m.in. Mesh'a
// (Microsoft.DirectX.Direct3D.Mesh)
// xPos i yPos - wspol. kursora myszki
// renderObjects moze byc typu System.Collections.ArrayList
// (zawierac renderowane obiekty juz po przetworzeniu algorytmem sprawdzania
// ich "widocznosci")
//
// pamietaj o using'ach: Microsoft.DirectX, Microsoft.DirectX.Direct3D

bool CheckMouseHit(int xPos, int yPos)
{
IntersectInformation intInformation = new IntersectInformation();

float dist = float.MaxValue;
Object3D object3D = null;

Vector3 s, d, rPosition, rDirection;

foreach ( Object3D obj3D in renderObjects )
{
s = Vector3.Unproject(new Vector3( xPos, yPos, 0),
deviceD3D.Viewport,
deviceD3D.Transform.Projection,
deviceD3D.Transform.View,
deviceD3D.Transform.World );
d = Vector3.Unproject(new Vector3( xPos, yPos, 1),
deviceD3D.Viewport,
deviceD3D.Transform.Projection,
deviceD3D.Transform.View,
deviceD3D.Transform.World );
rPosition = s;
rDirection = Vector3.Normalize(d-s);

if ( obj3D.Mesh.Intersect( rPosition,
rDirection,
ref intInformation ) )
{
if ( intInformation.Dist < dist )
{
dist = intInformation.Dist;
object3D = obj3D;
}
}
}

if ( object3D != null )
{
// mamy obiekt i teraz "cos" trzeba z nim zrobic :)
return true;
}

return false;
}

aimsoft

unread,
Dec 20, 2004, 9:51:29 AM12/20/04
to
Chodzi Ci o detekcje klikniecia na dowolny obiekt w 3d?

Nie jest to trywialne. Szukajac zaczalem od tego:
http://www.tek-tips.com/viewthread.cfm?qid=882560&page=1

Zajrzyj troche na ta stronke.

Zajrzyj tez w sample do DXa: '...you can look in the Pick sample in the
DX SDK and see an example of how this is done...'

'...you determine a line from the
camera to the point where the mouse click is (transformed
to the 3d world) and check for every triangle of the
object if there is an intersection...'

Tez za bardzo przykladu nie rozumiem, bo algebre liniowa mialem 3 lata
temu, ale jesli dziala to dziala :)

aimsoft

unread,
Dec 20, 2004, 9:59:39 AM12/20/04
to
>Jestem poczatkujacy w directx. Czy mozecie mnie naprowadzic na to jak
>mam wychwycic kiedy jakis obiekt widoczny na ekranie zostanie
kilkniety?
>Najlepiej jakis przyklad lub link w c# ale w innych jezykach tez moze
>byc :-D

Znalazlem cos jeszcze:
http://www.experts-exchange.com/Programming/Game_Development/3D_Programming/Q_20812666.html

Do poczytania. Sadze ze to rozwiaze Twoje problemy w calosci.

PS. Szukanie w internecie to bardzo przydatna umiejetnosc, ktorej
programisci zdaja sie nie dostrzegac.
Wpisalem w google: directX pick object 3d mouse
:D

Adam

0 new messages