Skaliertes Mesh == unbeleuchtet

Für Fragen zu Grafik APIs wie DirectX und OpenGL sowie Shaderprogrammierung.
Antworten
Loebl
Beiträge: 7
Registriert: 22.05.2002, 06:06

Skaliertes Mesh == unbeleuchtet

Beitrag von Loebl »

Moin. Hab mich grad mal wieder ans progammiern gesetzt nachdem ich seit längerem die schnauze voll davon hatte :))

Mein Problem der "Schwarzen Kugeln" wie ichs nenne hab ich nu schwups die wups gelöst aber nur duch hinwurschteln.


Folgende Sachlage:
Via D3D9 soll ein Planeten-System gerendert werden. Ich hab 10 Objekte mit unterschiedlichen Radien und ein Mesh das eine Kugel mit Radius=1 darstellt.
Zum Rendern jedes Planeten:

m_pDevice->SetTransform (D3DTS_WORD, ( Skalierungsmatrix(ObjektRadius) x Positions-Matrix) )
Mesh->DrawSubset (0);

ergebnis: Alle großen Kugeln pechschwarz, nur die Kleinen beleuchtet.

Bin damals verzweifelt, hab an allem möglichem rumgefrickelt, kam mir sehr vereimert vor und schmiss den Mist einfach in die Ecke.

Wie hab ichs jetzt gelöst?
Mesh klonen, Mesh-Klon-Vertexbuffer locken, Vertex-Normale gem.Objekt-Radius skalieren (NUR die Normalen)
Alles weitere haargenau wie oben.

Fragen: 1) Warum ist das so? 2) Brauch ich jetzt echt für jeden Planeten eine eigene Kugel?
Benutzeravatar
Schrompf
Moderator
Beiträge: 4884
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas Ziegenhagen
Wohnort: Dresden
Kontaktdaten:

Re: Skaliertes Mesh == unbeleuchtet

Beitrag von Schrompf »

Evtl. skaliert es Dir die Normalen mit. Da Du keinen VertexShader benutzt, musst Du das der Fixed Transformation Pipeline beibringen. Unter D3D9 gibt es nach meinem Wissen einen Renderstate NORMALIZE_NORMALS oder so ähnlich - aktiviere den mal und schau, ob es dadurch besser wird.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Loebl
Beiträge: 7
Registriert: 22.05.2002, 06:06

Re: Skaliertes Mesh == unbeleuchtet

Beitrag von Loebl »

SetRenderState (D3DRS_NORMALIZENORMALS, TRUE);


suuuuuuper. Wenn ich mich nicht solange über den Mist geärgert hätte, würd ich mich jetzt glatt totlachen.
Antworten