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
Zitat
Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veraltet strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.
Zitat
Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veraltet strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.
Das kommt auf die Größe des Mesh an.
Instancing rentiert sich vor allen bei kleinen Meshes(zb. Grasbüschel) die sehr oft an unterschiedlichen Stellen platziert werden müssen.
Der Geschwindigkeitsvorteil kommt einfach daher, dass nicht so oft der Drawcall (evt. auch noch mit Vertex\Indexdaten) über den Grafikbus wandern muss.
Bei kleinen Modellen kann das nämlich länger dauern als das eigentliche Rendern des Modelles.
Jedenfalls wollte ich das Gelände mit einer Kachel intialisieren, auf der ein Baum steht. Bei einer Standard-Karten-Größe von 100x100 Feldern macht das 10.000 Bäume.
Mein Verfahren funktioniert super, ist aber elendig langsam, wenn ich immer die Renderfunktion des DirectX-Meshes aufrufe.
plus einen kleinen Trick mit den Texturkoordinaten, um bei Skalierungen zu verhindern, dass die Interpolation oder die MipMaps benachbarte Fehlfarben rüberholt. Ich kann den Ansatz also empfehlen.
![]() |
C-/C++-Quelltext |
1 2 3 4 5 6 |
float4 MachMalPixel( VertexAusgabe rinnhey ) { float2 texkoords = clamp( rinnhey.texkoords, rinnhey.koordgrenz.xy, rinnhey.koordgrenz.zw); float4 farbe = tex2D( gTextur, texkoords); //usw. } |
![]() |
C-/C++-Quelltext |
1 2 3 4 5 6 |
// Größe des Tex-Randbereiches ermitteln. Standard ist ein halber Pixel, bei verkleinerter Darstellung // und entsprechender MipMap-Nutzung muss der Grenzbereich entsprechend größer werden float randGrenze = min( rein.groesse.x / rein.grafik.z, rein.groesse.y / rein.grafik.w); randGrenze = 0.5f / clamp( randGrenze, 1.0f/16.0f, 1.0f); raus.texGrenz = (rein.grafik.xyxy + float4( 0, 0, 1, 1) * rein.grafik.zwzw + float4( 1, 1, -1, -1) * randGrenze) * gQuellGroesse.xyxy; |
Werbeanzeige