webForumDet fria alternativet

C# med directX

.NETur .NET

7 svar · 492 visningar · startad av mangej

Medlem sedan apr. 200224 inlägg
Frågan#1

Hej
Jag försöker att programmera ett litet spel i C# där jag använder en directX-bild. Bilden är från början skapad i 3ds-max och sedan omvandlad till .x-format.
Problemet är att jag inte kan känna av storleken på bilden.
Finns det någon som har erfarenhet eller kan hjälpa mig med detta är jag mycket tacksam.
(Eller hänvisa till ett annat forum eftersom jag vet att detta forumet mer inriktar sig på web-programmering.)

(Jag bifogar gärna kod om det behövs.)

Medlem sedan maj 20012 812 inlägg
#2

På pellesoft har de ett forum om DirectX i .NET.

Johan Lindfors på Microsoft brukar hänga där, och han tycker det är kul med DirectX, så där får du säkert hjälpa.

Ett annat tips är de små videosnuttar som MS har gjort om DirectX i .NET dessa kan du se på: http://www.microsoft.com/sverige/msdn/msdntv/msdntv_archive.asp

Det finns givetviss en massa filmer om altl möjligt...

- Magnus

Medlem sedan dec. 2000537 inlägg
#3

Hej på dig Mangej.
Vad kan jag hjälpa dig med :)
Får börja med att säga det är ingen bild om du sparat ner den som .x fil, då är det ett fullt 3D objekt.

Vad är det du vill ha gjort?

Kan också säga att det finns ett forum för spelutvecklarproffs.
https://www.gamedev.net , där hänger de flesta som skrivit fakta böcker om spelutveckling.

Medlem sedan apr. 200224 inlägg
#4

Ja du, är du bra på både C# och DirectX finns det massor du kan hjälpa mig med. Är lite dålig på 3d-grafik och objektorientering.
Jag har i mitt program två stycken 3d-objekt och det ena föreställer en golfboll, medan det andra föreställer en golfbana.
Jag vill kunna se hur objekten förhåller sig, så att jag kan lägga in en ny golfbana och hitta längden på den. (Så att jag vet hur långt det är till hålet, och om man kommit utanför banan.)
Objekten är skapade i 3ds-max och sedan konverterade till .X-filer.
Det enda jag lyckades känna av var färgerna (skulle kunna bli användbart om jag i framtiden vill känna av bunker, green och fairway), det gjorde jag med "banaMaterials*.Diffuse = ......" (där i går igenom samtliga material).
Men jag måste nog skicka hela klassen (eller programmet) till dig för att det ska bli helt överskådligt.

Ska kolla lite på de andra forumen med.

Tack på förhand /Magnus*

Medlem sedan dec. 2000537 inlägg
#5

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.

Medlem sedan apr. 200224 inlägg
#6

Tack för tipset.

Jag skulle svarat tidigare, men har inte hunnit lägga ner så mycket tid. Jag tittade på det nu igen, men får inte riktigt kläm på det.
Det stämmer mycket riktigt att jag har både: bollen.drawsubset(attrbID) och golfbana.drawsubset(attrbID)
Är det i denna fuktionen jag ska testa om de kolliderar?

kodraden:
if(banamesh.IntersectSubset(bollpos,bolldir)==true)
fungerar ju inte för att attribID måste ingå.
Så jag testar med den lite mer avancerade.

Har hittils inte använt bollPos som Vector3 och inte alls bollDir, men det borde inte bli några problem att få med det. Fast jag fattar inte riktigt hur själva funktionen
if(banamesh.IntersectSubset(attribID, bollPos, bollDir)==true)
fungerar, är det när bollPos == attribID och bollDir fortsätter in i objektet? Tycker det kunde räckt med (attribID, bollPos)==true.

/Magnus

Medlem sedan dec. 2000537 inlägg
#7

uj, skrev fel på den första intersect:en, ta bort "Subset" så funkar det, och du sätter den i RenderLoopen.

och om du vill använda den andra intersecten så sätter du den i forloopen när du ritar ut drawsubset:et.

alla dina positioner är Vector3:s , alltså x,y,z.
bollpos är en Vector3. så använd alltid de här vector-struct:sen när du använder Direct3D, de är väldigt användbara.

bollens Dir är egentligen bara vilken riktning bollen pekar åt, men det finns ju egentligen ingen nos på en golfboll hmm, men testa och sätt den till bollens roterings vinkel

Medlem sedan apr. 200224 inlägg
#8

Aha, så det var så den skulle vara. Men det spelade ingen roll, jag använder den mer avancerade, och kollar för alla material.

Jag tror faktiskt att det ska fungera nu. Jag har satt golfbollens direction till golfbollens position. Fungerar i alla fall på mina korta slag, och att det inte fungerar på långa gissar jag att det beror på att bollen inte hinner kollidera med banan innan den åkt igenom. (Har du något tips för att modifiera funktionen får du gärna svara.)

Jag tackar för hjälpen.

138 ms totalt · 3 externa anrop · v20260731065814-full.25f56b17
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)