Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

02.11.2005, 17:26

eigene D3D-2D-Spriteklasse funktioniert nicht

Also, ich arbeite an einer alternative zu D3DX-Sprites. Ist jetzt so ungefähr mein dritter Versuch und es funktioniert nix, und ich hab keinen Plan warum.
Zum Beispiel funktinieren meine Orthogonalmatrizen nciht, wenn ich das ganze mit XYZ_RHW render funktioniert es, ein wenig mehr, das heit das Dreieck wird richtig gerendert aber mit dne falschen Farben.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
void D3DSprite::Render()
{
    m_lpDevice->SetFVF(D3DFVF_XYZRHW | D3DFVF_DIFFUSE);
    m_lpDevice->SetRenderState(D3DRS_LIGHTING, false);
    m_lpDevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE);
    m_lpDevice->SetRenderState(D3DRS_DITHERENABLE, true);
    
    m_lpDevice->SetTransform(D3DTS_WORLD, &cMatrix().D3DMatrix);//Identittsmatrix

    m_lpDevice->SetTransform(D3DTS_VIEW, &MatrixOrthogonalView(1024, 768).D3DMatrix);
    m_lpDevice->SetTransform(D3DTS_PROJECTION, &MatrixOrthogonalProjektion(1024, 768).D3DMatrix);

    Vertex Vertices[3];
    Vertices[0].x=100;
    Vertices[0].y=100;
    Vertices[0].z=0.5;
    Vertices[0].Color=0x00ff00ff;
    Vertices[1].x=100;
    Vertices[1].y=200;
    Vertices[1].z=0.5;
    Vertices[1].Color=0x00ffffff;
    Vertices[2].x=200;
    Vertices[2].y=100;
    Vertices[2].z=0.5;
    Vertices[2].Color=0x000000ff;

    m_lpDevice->DrawPrimitiveUP(D3DPT_TRIANGLELIST, 1, Vertices, sizeof(Vertex));
}


C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
__forceinline cMatrix MatrixOrthogonalProjektion(float Width, float Height)
{
    return cMatrix( 2.0f/Width, 0.0f, 0.0f, 0.0f,
                    0.0f, 2.0f/Height, 0.0f, 0.0f,
                    0.0f, 0.0f, 1.0f/(1.0f, 0.1f), 0.0f,
                    0.0f, 0.0f, 0.1f/(0.1f-1.0f), 1.0f);
}

__forceinline cMatrix MatrixOrthogonalView(float Width, float Height)
{
    return cMatrix( 1.0f, 0.0f, 0.0f, 0.0f,
                    0.0f, -1.0f, 0.0f, 0.0f,
                    0.0f, 0.0f, 1.0f, 0.0f,
                    -Width*0.5f, Height*0.5f, 0.1f, 1.0f);
}


Also, das Dreieck wir dnur bei RHW angezigt, nicht bei XYZ. Dabei sind die oberen beide Punkte knallrot, und unten der schwarz. Irgendwie hab ich das gefühl das das überhaupt gar nicht zu den angegebenen Farben passen will.
Lieber dumm fragen, als dumm bleiben!

2

03.11.2005, 22:53

habs rausgefunden, Marizberechnunen waren fehlerhaft und bei dem Vertexformat fehlte w-varaible, dadurch die farbfehler.
Lieber dumm fragen, als dumm bleiben!