Permalänk
Medlem

[C# DirectX] Unproject

Jag håller på att göra en level editor till ett spel där jag i ett fönster använder 3 olika vyer för att sätta ut meshar. Nu vill jag kunna flytta på mesharna och då måste jag kunna ta reda på om jag träffar en mesh när jag klickar i någon av mina vyer. så här ser koden ut:

// Convert the mouse point into a 3D point
vIn.X = p.X; vIn.Y = p.Y;
vIn.Z = 1.0f;

// Compute point on Near Clip plane at cursor
vIn.Z = 0;
vNear = Microsoft.DirectX.Vector3.Unproject(vIn, viewport, proj, view, world);

// Compute point on Far clip plane at cursor
vIn.Z = 1;
vFar = Microsoft.DirectX.Vector3.Unproject(vIn, viewport, proj, view, world);

// Comput direction vector
vDir = Microsoft.DirectX.Vector3.Subtract(vNear, vFar);
vDir.Normalize();

//Check for mesh intersection
for(int i = 0; i < myform.index; i++)
{
if(mesh.Intersect(vNear, vDir, out ClosestHit))
return true;
}
return false;

Dessvärre fungerar inte detta. Får inga träffar alls. Ett värde undrar jag över och det är dom jag får ut i vNear och vFar efter det att dom gått genom "Unproject". Dom ser lite konstiga ut och det jag undrar är om det är nödvändigt att använda sig av dom över huvudtaget eller om det räcker att skicka in den punkt man klickat på till "Intersect" metoden.

Hoppas ni förstår vad jag menar annars får ni säga till så får jag försöka göra det lite klarare.

Permalänk
Medlem

Hej!
På vilket sätt ser värdena konstiga ut?

det jag kan komma på som skulle kunna krångla är om du får in skärmkoordinaterna rätt. Jag vet inte om de skall anges som pixlar eller från 0 - 1.
Jag vet inte riktigt hur Substract funkar, men om man tar Vektor1 - Vektor2 så tror jag man brukar få en vektor som pekar från v2 till v1, I ditt fall skulle det betyda en vektor som pekar mot dig, kan vara där luret är.
Slutligen, om du vill slippa göra den andra unprojecten så kan du använda din Eye Position så att du tar

vNear - EyePos

för att få en riktningsvektor.

Hoppas nåt hjälper, och lycka till

Visa signatur

PIX, plx.

Permalänk
Medlem

Här är lite värden jag får:

vNear: X:-785,9999 Y:311 Z:-10101,5
vFar: X:-757,9999 Y:158 Z:-10100

VDir: X:0 Y:0 Z:-1,5 (innan normalisering)

Värdena på vNear och vFar känns helskumma, den enda anledning jag kan se till att Z värdet blir så stort hos vFar och vNear är att mitt farclipplane ligger på 20000. Det ska tilläggas att X och Y värdena inte alls verkar ha någon direkt sammankoppling med den punkt man klickar på...

En anledning till att inga träffar registeras kan också ha att göra med att mitt fönster är uppdelat i olika vyer. Det jag vet att är jag använder rätt matriser för den vy jag just klickat i för att kolla detekteringen men tydligen blir det fel på något sätt ändå.