» »

C# 3D igra v XNA

C# 3D igra v XNA

FuI2cY ::

Pozdravljeni,

izdelujem 3D igro v XNA C#. Imam problem, ker nikakor ne morem spraviti, da bi imel karto realno na mizi. Karta izgleda na mizi, ko imam kamero tako obrnjeno, sam dejansko je razdalja med karto in mizo ogromna. Najprej sem imel problem, ker sem imel izredno veliko mizo in sem jo poskušal skalirati (jo zmanjšati), vendar ni potem bilo najboljše. Sedaj sem mizo zmanjašl v 3DS MAX orodju in še vedno imam isti problem.

Ok, gremo na začetek. Zadevo sem preizkušal že narediti na več načinov ampak vsi neuspešni oz. ne tako kot si jaz želim.

this.modelCardPosition = new Vector3(0.0f, 0.0f, 0.0f);
this.modelTablePosition = new Vector3(0.0f, 0.0f, 0.0f);

this.cameraPosition = new Vector3(0.0f, 0.0f, 1000.0f);

this.modelTableRotation = 0.0f;
this.modelCardRotation = 0.0f;


tukaj vidimo, da imam koordinate za karto in mizo identične. Kamera za izris obeh objektov je ista.

Tukaj se pa vidi koda za izris objekta na zaslon:
Matrix[] tableTransforms = new Matrix[this.modelTable.Bones.Count];
this.modelTable.CopyAbsoluteBoneTransformsTo(tableTransforms);

foreach (ModelMesh mesh in this.modelTable.Meshes)
{
    foreach (BasicEffect effect in mesh.Effects)
    {
        effect.EnableDefaultLighting();
        effect.World = tableTransforms[mesh.ParentBone.Index] * Matrix.CreateRotationX(modelTableRotation) * Matrix.CreateTranslation(modelTablePosition);
        effect.View = Matrix.CreateLookAt(cameraPosition, Vector3.Zero, Vector3.Up);
        effect.Projection = Matrix.CreatePerspectiveFieldOfView(MathHelper.ToRadians(45.0f), aspectRatio, 1.0f, 10000.0f);


        /*Matrix ObjectsWorldMatrix = Matrix.Identity;

        //ObjectsWorldMatrix *= Matrix.CreateRotationY(this.modelTableRotation + MathHelper.ToRadians(-90));
        ObjectsWorldMatrix *= transformsTable[mesh.ParentBone.Index] * Matrix.CreateRotationX(this.modelTableRotation);
        ObjectsWorldMatrix *= Matrix.CreateScale(this.scaleRatio, this.scaleRatio, this.scaleRatio);
        ObjectsWorldMatrix *= Matrix.CreateTranslation(this.modelTablePosition);

        effect.World = ObjectsWorldMatrix;*/
                    
    }   

    mesh.Draw();
}


Prikazana je koda za izris mize, koda za izris karte je identična. Zakomentirana koda je bila za skaliranje objekta, samo ni delovalo glih najbolje kot bi si želel (sem potem ročno zmanjšal objekt v orodju).

tukaj vam še pošiljam prikaz objektov, ko poženem program:

 Prikaz objektov ob zagonu programa

Prikaz objektov ob zagonu programa



Že ob štartu se vidi, da sta objekta izredno izredno daleč narazen. Ko objekta ročno (prek ukazov na tipkovnici) nekak približam in potem želim obrniti kamero, da bi pogledal kako blizu sta si objekta, mi ob vsaki rotaciji kamere gresta objekta vsak v svojo smer (isto pozicijo kamere uporabljam za oba objekta).

Lepo bi prosil, če bi mi lahko nekdo pomagal kako rešiti ta problem. Če je nekdo iz okolice Maribora, se lahko tudi osebno dobima in mu seveda plačam. Nekak morem spraviti, da bo karta realno na mizi.

Najlepša vam hvala že vnaprej!


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Android zamenjava pogledov

Oddelek: Programiranje
61087 (908) c00L3r
»

DirectX - težavica

Oddelek: Programiranje
141272 (1005) Senitel
»

[C#] [XNA] Premikanje objekta

Oddelek: Programiranje
6920 (877) furion
»

[c#] enostavna Igrca -> poraba procesorja 95%

Oddelek: Programiranje
192167 (1531) elKaktus

Več podobnih tem