Normalen für Flatshading berechnen
Übersicht

NoxBetreff: Normalen für Flatshading berechnen |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
So, da ich's mit Hilfe von Dreameora und BIG BUG selbst endlich hinbekommen habe, könnte die Funktion für einige möglicherweise nützlich sein.
Sie berechnet für alle Surfaces eines Meshs die Normalen. UpdateNormals() tut das zwar auch, aber auf eine andere Art und Weise: Soweit ich das beobachtet habe, fasst UpdateNormals() bspw. Eckpunkte oder generell Punkte, die sich 2 oder mehr Triangles teilen, zusammen. Das kann zu unschönen Effekten führen. Code darf verändert, beliebig genutzt, vergewaltigt und aufgegessen werden. ![]() Code: [AUSKLAPPEN] Function UpdateNormalsFlat( mesh% ) Local srfMesh% Local srfnum%, trinum% Local v0%, v1%, v2% Local nx#, ny#, nz#, norm# Local v0x#, v0y#, v0z#, v1x#, v1y#, v1z#, v2x#, v2y#, v2z# Local v01x#, v01y#, v01z#, v02x#, v02y#, v02z# For srfnum% = 1 To CountSurfaces( mesh% ) srfMesh% = GetSurface( mesh%, srfnum% ) For trinum% = 0 To CountTriangles( srfMesh% ) - 1 v0% = TriangleVertex( srfMesh%, trinum%, 0 ) v1% = TriangleVertex( srfMesh%, trinum%, 1 ) v2% = TriangleVertex( srfMesh%, trinum%, 2 ) v0x# = VertexX( srfMesh%, v0% ) ; Nur zur besseren Lesbarkeit.. v0y# = VertexY( srfMesh%, v0% ) v0z# = VertexZ( srfMesh%, v0% ) v1x# = VertexX( srfMesh%, v1% ) v1y# = VertexY( srfMesh%, v1% ) v1z# = VertexZ( srfMesh%, v1% ) v2x# = VertexX( srfMesh%, v2% ) v2y# = VertexY( srfMesh%, v2% ) v2z# = VertexZ( srfMesh%, v2% ) v01x# = v0x# - v1x# ; (v0 - v1) v01y# = v0y# - v1y# v01z# = v0z# - v1z# v02x# = v0x# - v2x# ; (v0 - v2) v02y# = v0y# - v2y# v02z# = v0z# - v2z# ; Kreuzprodukt zwischen (v0 - v1) und (v0 - v2). nx# = v01y# * v02z# - v01z# * v02y# ny# = v01z# * v02x# - v01x# * v02z# nz# = v01x# * v02y# - v01y# * v02x# ; Normalisierungsfaktor bestimmen... norm# = Sqr( nx# * nx# + ny# * ny# + nz# * nz# ) nx# = nx# / norm# ; ...und normalisieren. ny# = ny# / norm# nz# = nz# / norm# ; Normale auf alle Vertices anwenden. VertexNormal( srfMesh%, v0%, nx#, ny#, nz# ) VertexNormal( srfMesh%, v1%, nx#, ny#, nz# ) VertexNormal( srfMesh%, v2%, nx#, ny#, nz# ) Next Next End Function |
||
![]() |
skey-z |
![]() Antworten mit Zitat ![]() |
---|---|---|
Danke dir, kann ich gut gebrauchen und mein Meshterrain sieht endlich gut aus *thumpsup* | ||
Awards:
Coffee's Monatswettbewerb Feb. 08: 1. Platz BAC#57: 2. Platz |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group