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

21

05.01.2005, 23:54

so langsam denke ich, es liegt irgendwie an der Hardware... oder ich habe einen grundsätzlichen Fehler, der sich immer bei mir einschleicht...

hier habe ich mal versucht Grafikkarten-Speicher freundlich ein Memory-Feld zu rendern.
Dazu besteht jede Karte aus einem Deckblatt... und direkt dahinter ein Blatt was später als Textur das Bild bekommt (könnte auch ein und das selbe Viereck nehmen, aber so habe ich die möglichkeit die Karte nachher "aufklappen" zu lassen).
Dazu schreibe ich die Koordinaten nur einmal in den Speicher und render die gleiche Karte 64mal immer mit einer vom Index abhängigen Translationsmatrix... allerdings zeigt er mir irgendwie auch hier nichts an.

Einfach aus dem oberen link (auf die Seite mit rechts drauf klicken -> Quelltext anzeigen) den gesamten Text kopieren und die texturen.cpp durch diesen code ersetzen....

22

06.01.2005, 00:01

Also an der Hardware liegt es nicht, da ich das ja auch getestet hab und meine Graka ist ne ATI Radeon X800 XT PE schneller geht nicht 8) , nur 2 Kerten zusammen. DIe ist nagelneu und damit sollte sowas jawohl lockder gehen. Die restlich Hardware von mir ist auch nicht die schlechteste also daran liegt es nicht!

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

23

06.01.2005, 00:02

versuchs mal so...;)

Quellcode

1
2
float f = 0.1f;
g_pD3DDevice->SetRenderState( D3DRS_FOGDENSITY, *( DWORD* )( &f ) );


so machst du aus den 4 bytes von deinem float ein DWORD und übergibst das an d3d.

rein von der logik her würds z.b. auch so gehn ( habs nicht getestet ):

Quellcode

1
2
3
4
5
6
7
8
9
10
11
union
{

    DWORD dw;
    float f;

} irgendwas;

irgendwas.f = 0.1f;

g_pD3DDevice->SetRenderState( D3DRS_FOGDENSITY, irgendwas.dw );


welche variante dir besser gefällt entscheidest du selber ;)

24

06.01.2005, 00:16

das erste hats schon gebracht :D ... jetzt ist endlich Nebel da *freu*

danke :) ... so, jetzt mal gucken ob ich noch irgendwo den DWORD-Wert falsch übergebe

ich hab immer gedacht, sowas hier reicht um den Wert korrekt umzuwandeln:
g_pD3DDevice->SetRenderState(D3DRS_FOGDENSITY,(DWORD)(0.1f));

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

25

06.01.2005, 13:25

das 2. war auch nicht ganz ernst gemeint... ;)

26

06.01.2005, 15:44

hm.... wenn jetzt noch jemand entdeckt, warum das Licht nicht an geht bin ich happy :D ... ansonsten geh ich jetzt gleich nochmal das ganze Kapitel Schritt für Schritt durch und überprüf mein Lämpchen :)

(muß man da zufällig auch irgendwo nen DWORD übergeben?^^)

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

27

06.01.2005, 16:10

zum licht ein tipp:

nim zum anfang mal ein point oder direction light

Quellcode

1
2
3
4
5
6
7
    Light.Type = D3DLIGHT_POINT; 
    Light.Diffuse = tbColor(1.0f, 1.0f, 1.0f); 
    Light.Ambient = tbColor(1.0f, 1.0f, 1.0f); 
    Light.Specular = tbColor(1.0f, 1.0f, 1.0f); 
    Light.Position = tbVector3(0.0f, 0.0f, 0.0f); 
    Light.Range = 999.0f; 
    Light.Attenuation1 = 0.01f;


wie ich dem code oben entnommen hab nimmst du ein spotlight...
naja, wenn da was nicht 100%ig stimmt, dann leuchtets am ende an deinen polys vorbei etc.

schau außerdem nach ob deine normalvektoren stimmen...

28

06.01.2005, 16:25

hm... Punktlicht gibt auch nen vollkommen schwarzen Bildschirm... und selbst wenn das Spotlight vorbeischeinen würde, dann müsste doch durch:

g_pD3DDevice->SetRenderState(D3DRS_AMBIENT, tbColor(0.25f, 0.0f, 0.0f));

wenigstens ein bißchen Licht auftauchen, oder?

Heißt das jetzt meine Normalvektoren sind falsch?

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

29

06.01.2005, 16:44

mom, heißt das, wenn du ambientlight anmachst, dann siehst du auch nix? nichtmal irgendeienen umsriss von dem modell?
wie merkst du dann ob der nebenl denn funzt...

stells mal stärker ein...

ambient light braucht keine normalvektoren, also sollten die hier wurscht sein

z.b.

Quellcode

1
g_pD3DDevice->SetRenderState(D3DRS_AMBIENT, 0xFFFFFFFF );


zeig mir mal wie du die normalvektoren berechnest

und schalt backface culling aus:

Quellcode

1
g_pD3DDevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE );

30

06.01.2005, 16:48

also screenshot ist ganz einfach:

einfach nur ein schwarzer Bildschirm :D
auch mit einer stärkeren Einstellung von Ambient-Light bleibts schwarz. Das der Nebel funktioniert hab ich getestet indem ich:

g_pD3DDevice->SetRenderState(D3DRS_LIGHTING, FALSE);

das Licht deaktiviert habe...

(muß nun eine Stunde Nachhilfe geben... schau danach wieder vorbei)

/edit: culling ist ausgeschaltet... Normalvektoren werden wie folgt berechnet:

g_pVertices[iVertex].vNormal = tbVector3Normalize(g_pVertices[iVertex].vPosition - vCubePosition);

(die Position des Punktes - die Position des Würfels (Mittelpunkt))
dadurch sollte ein Normalvektor für glatte Kanten entstehen...

Werbeanzeige