Jag tror du tar för lätt på spelprogrammering. spelprogrammering är oerhört komplicerat, och inget man lär sig på en dag. Men jag kan ge dig några vägledningar. För att räkna ut distansen mellan 2 punkter så kan du använda följande formel.
float X=g_Objekt1.xpos-g_Objekt2.xpos;
float Y=g_Objekt1.ypos-g_Objekt2.ypos;
float Z=g_Objekt1.zpos-g_Objekt2.zpos;
float distans=(X*X+Y*Y)+Z*Z;
Detta kallas Sphere-collision detect, eftersom man gör en sfär runt objekten. Det är såhär min vän att golfbanan och golfbollen är sina egna objekt med sin egen rymd och med sina egna x,y,z koordinater, dessa transformerar man sedan till världsrymd koordinater genom att multiplicera objekt-matrisen med världsrymd-matrisen, dessa multipliceras i sin tur med View och Projection matriserna. Projection gör att du får djup i skärmen, och View är din kamera.
Men till din golfbana, problemet är att din golfbana är ju ganska fet, och din golfboll kan landa lite varstans, , därför funkar det inte särskilt bra med en sfär collision, du behöver en Per-Vertex-Collisions detektor, och det finns inbyggda i managed Direct3D.
Och jag förmodar att du använder mesh.DrawSubset(int attributeID), eller hur, jepp, trodde väl det ;) nybörjare, då passar följande metod bra, den är den enklaste:
if(banamesh.IntersectSubset(bollpos,bolldir)==true)
{
// nu är golfbanan träffad av golfbollen
}
och en lite mer avancerad intersect är denna:
men först måste du veta vilket subset på din golfbana som är hålet, ta reda på det och använd denna metod så får du reda på om golfbollen kolliderar med den delen av meshet
if(banamesh.IntersectSubset(attribID,bollpos,bolldir)==true)
{
//kollision
}
attribID är vilket subset du testar emot.
bollpos = var din golfboll är i världs-rymd
bolldir = i vilken riktning din golfboll är på väg i världs-rymd.