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

11

04.05.2004, 22:38

Zitat von »"unsigned int"«

entweder vor dem ersten rendern oder nach dem zweiten


Hört sich vielleciht dumm an aber wo ist das erste Rendern und wo das zweite ? Ich hab eine Renderfunktion die wird immer aufgerufen und wo genau packe ich das dann da hin ?

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

12

04.05.2004, 22:38

Also Was du willst ist das ein Dreieck(Objekt) sich dreht und das andere nicht. Also wir haben schonmal 2 Aufrufe um die Dreiecke zu malen. Die Welt Matrix besagt, wie sich alle Objekte die mit der aktuellen Matrix verhalten sollen.
Was Du gemacht hast ist erst einmal zu sagen das alle Objekt neutral gezeichnet werden sollen, darauf hin sagst du, dass die Objekte, die gezeichnet werden, rotieren sollen UND erst dann zeichnest du BEIDE Objekte.
Also was hast du falsch gemacht?

13

05.05.2004, 02:10

Noch ein kleiner Tipp:

Zitat

Quellcode

1
2
// Clear the backbuffer to a black color
    g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,0,0), 1.0f, 0 ); 

Ganz böse. Hier fehlt das Löschen des Z-Buffers. Da haben sich schon viele dran aufgehängt ;)
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

Anonymous

unregistriert

14

05.05.2004, 17:16

Zitat von »"HansDieWurst"«

Ich habs jetzt mal so geändert wie du sagst :


Entschuldige bitte, aber das hast du NICHT !!!!

Zitat von »"Fabster"«

musst Du einfach erst vor dem 2.ten Dreieck die Rotation einfügen wie auch in dem Beispiel und vor dem 1.ten Dreieck musst Du die IDENTITÄTS-MATRIX einfügen, sozusagen die "Normale" Matrix, weil Du ja bei dem 2.ten Dreieck die Matrix änderst und die muss immer wieder zurückgesetzt werden


also nochmal ganz einfach :

Du setzt die Identitätsmatrix, renderst das 1 Dreieck, dann setzt Du die Rotationsmatrix und dann renderst Du das 2te Dreieck.....

und das sieht dann so aus :
(müsste es zumindest - habs jetzt nicht ausprobiert !)

ACHJA : der Hinweis mit dem Z-Buffer ist auch superwichtig !!!

Quellcode

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
28
VOID Render()
{
    // Clear the backbuffer to a black color & ZBUFFER !!!!!
    g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET  | D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(0,0,0), 1.0f, 0 );

    // Begin the scene
    if( SUCCEEDED( g_pd3dDevice->BeginScene() ) )
    {
        g_pd3dDevice->SetStreamSource( 0, g_pVB, 0, sizeof(CUSTOMVERTEX) );
        g_pd3dDevice->SetFVF( D3DFVF_CUSTOMVERTEX );

    D3DXMATRIXA16 matWorld;

    D3DXMatrixIdentity( &matWorld); 
    g_pd3dDevice->SetTransform( D3DTS_WORLD, &matWorld );
    g_pd3dDevice->DrawPrimitive( D3DPT_TRIANGLELIST, 0, 1);
     

    UINT  iTime  = timeGetTime() % 1000;
    FLOAT fAngle = iTime * (2.0f * D3DX_PI) / 1000.0f;
    D3DXMatrixRotationY( &matWorld, fAngle );
    g_pd3dDevice->SetTransform( D3DTS_WORLD, &matWorld );
    g_pd3dDevice->DrawPrimitive( D3DPT_TRIANGLELIST, 3, 1 );

     // End the scene
     g_pd3dDevice->EndScene();
     }
}


Und nochmal entschuldigung, aber wie gut kennst Du Dich denn mit C++ oder Programmieren allgemein aus ?
Weil der Code ist doch SEHR unstrukturiert, für meine Begriffe zumindest....
Kann aber ja auch daran liegen das Du überhaupt nicht weisst was Die Befehle überhaupt machen

Also benutzt am besten Mal die mitgelieferte Hilfe des DirectX-SDK und schau nach was denn jeder einzelne Befehl überhaupt macht ansonsten kann das doch nix werden !!!!

Zum Beispiel hast Du in Deinem Beispiel den FVF und die "StreamSource" vor dem Rendern gesetzt... Das geht in diesem Beispiel noch gerade eben gut (beim 2.ten rendern aber erst !) aber bei mehr Objekten mit verschiedenen "sources" oder FVFs wird das nur Müll ergeben !

Also nochmal mein Tip : DirectX - C++ Anleitung lesen und/oder ein passendes Buch kaufen, das von David zum Beispiel kann ich nur wärmstens empfehlen.....

Dein akutes Problem sollte ja obriger Code lösen....

15

05.05.2004, 18:48

Wie schon gesagt den Code hab ich nicht geschrieben der kommt aus der DirectX Hilfe! Das Dritte Sample ist das.

Anonymous

unregistriert

16

05.05.2004, 22:39

Zitat von »"HansDieWurst"«

Wie schon gesagt den Code hab ich nicht geschrieben der kommt aus der DirectX Hilfe! Das Dritte Sample ist das.


????

Zitat von »"Fabster"«

Zum Beispiel hast Du in Deinem Beispiel den FVF und die "StreamSource" vor dem Rendern gesetzt... Das geht in diesem Beispiel noch gerade eben gut (beim 2.ten rendern aber erst !) aber bei mehr Objekten mit verschiedenen "sources" oder FVFs wird das nur Müll ergeben !.


Im Dritten Sample machen die "DrawPrimitive" vor "SetFVF" und "SetStreamSource" ?

Das kann ich einfach nicht glauben !!!!!!!!

17

06.05.2004, 11:35

was genau ist das dritte sample?
bei mir wäre das LightingVS,
& wo wird da bitte gerendet vor SetStreamSource?

18

06.05.2004, 20:11

Vielleicht unklar ausgedrückt ich meine das dritte Tutoial im Direct3D Ordner.

19

06.05.2004, 21:09

okay.also ClipMirror?!

20

06.05.2004, 21:34

er meint das hier:

c:\DXSDK\Samples\C++\Direct3D\Tutorials\Tut03_Matrices

Werbeanzeige