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

29.05.2013, 19:30

Seltsames Verhalten von D3D beim Zeichnen

Heyho,

ich bin dabei an meinem Terrain zu arbeiten. Dazu erstelle ich eine Grundfläche aus Quadraten, die jeweils aus 5 Dreiecken bestehen.
Weiterhin erzeuge ich EINE Colormap, die sozusagen als Basis benutzt wird und mit der das Terrain ganz einfach inkl. Beleuchtung gezeichnet werden soll.
Zu meiner Zeichenmethoden gehört eigentlich auch das schichtweise Zeichnen der einzelnen Terrain-Texturen (inkl. Detailmap und Alphamap). Das habe ich zum Test jedoch durch frühzeitiges return abgeklemmt. (Darum die TextureStageStates..).

Nun zum Problem:
Eigentlich dürfte es nicht schwierig sein, die Colormap einfach ohne irgendwelches AlphaBlending etc. zu zeichnen.
Mein Resultat sieht allerdings so aus:




Und noch aus anderer Perspektive um zu zeigen, dass sich das ganze mit der Position der Kamera ändert:





Hier der entscheidende Codeteil:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
d3ddev->SetRenderState( D3DRS_ZENABLE, D3DZB_TRUE );
d3ddev->SetRenderState( D3DRS_ALPHABLENDENABLE, FALSE );
d3ddev->SetTextureStageState( 0, D3DTSS_TEXCOORDINDEX, 0 );
d3ddev->SetTexture( 0, pTexture );
d3ddev->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE );
d3ddev->SetTextureStageState( 0, D3DTSS_COLORARG2, D3DTA_CURRENT );
d3ddev->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_MODULATE );
d3ddev->SetTextureStageState( 1, D3DTSS_COLOROP, D3DTOP_DISABLE );

d3ddev->SetRenderState( D3DRS_CULLMODE, D3DCULL_CW );
d3ddev->SetStreamSource( 0, vBuffer, 0, sizeof(SVertex) );
d3ddev->SetIndices( iBuffer );
d3ddev->DrawIndexedPrimitive( ... );



Was ich bis jetzt herausgefunden habe:
- Das gleiche Produkt kommt bei ausgeschaltetem Licht heraus (damit fallen auch falsche Normalen weg)
- Es muss irgendwie mit den TextureStageStates zusammenhängen, da wenn ich für D3DTSS_COLOROP den Wert D3DTOP_SELECTARG2 einsetze (entspricht ja in dem Fall den Diffuse Wert) kommt dieses Muster nicht. Logischerweise kann ich dann auch nicht die Colormap darüberziehen ;)
- Es sieht aus wie Nebel, aber selbst ohne Nebel gleiches Resultat

Ich sitze jetzt schon mehrere Tage an dem Problem und hab noch immer keinen Schimmer, woran das liegt.
Möglichweise bin ich da auch schon blind geworden :D

Ich hoffe ihr könnt mir bei diesem Problem helfen.


Dank vorweg,
iSmokiieZz
EnvisionGame(); EnableGame(); AchieveGame(); - Visionen kann man viele haben. Sie umzusetzen und auf das Ergebnis stolz zu sein ist die eigentliche Kunst.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »iSmokiieZz« (29.05.2013, 19:37)


Schrompf

Alter Hase

Beiträge: 1 470

Wohnort: Dresden

Beruf: Softwareentwickler

  • Private Nachricht senden

2

29.05.2013, 20:17

Für mich sieht das aus, als hätte Deine Textur keine MipMaps, aber Du hast MipMapping an. Ich hatte vor langer Zeit mal so ein Problem, und das Ergebnis sah so ähnlich aus.
Häuptling von Dreamworlds. Baut aktuell an nichts konkretem, weil das Vollzeitangestelltenverhältnis ihn fest im Griff hat. Baut daneben nur noch sehr selten an der Open Asset Import Library mit.

3

19.04.2014, 20:13

Vielen Dank. Nach langer Zeit bin ich mal wieder hier. Und es war tatsächlich das MipMapping in Kombination mit einem verdrehten Indexbuffer, dass mir das Ergebnis zerschossen hat ;)
EnvisionGame(); EnableGame(); AchieveGame(); - Visionen kann man viele haben. Sie umzusetzen und auf das Ergebnis stolz zu sein ist die eigentliche Kunst.

Werbeanzeige