Dot3 Normalmapping Fragen
Übersicht

![]() |
MegamagBetreff: Dot3 Normalmapping Fragen |
![]() Antworten mit Zitat ![]() |
---|---|---|
Es geht speziell um dieses Tutorial:
https://www.blitzforum.de/foru...light=dot3 Das ganze Ding ist zwar schon knapp 3 Jahre alt und die Bilder fehlen, aber da ich relativ naher Zukunft Normalmapping in einem Spiel nutzen möchte, bin ich da drauf gestoßen. Ich habe den Example Code mal benutz und ein wenig mit verschiedenen Maps rumprobiert. Sieht zeimlich klasse aus, jedoch habe ich einige Fragen was Dot3 Normalmapping angeht: 1.- Ich frage mich, ob mehrere Lights möglich sind. Wenn man statt einem DirectX-Light einen Pivot nimmt, sollten doch unbegrenzte Lichtquellen möglich sein, oder? Jedoch habe ich keine Ahnung, wie man soetwas in den code mit einbaut, da ich in dem Gebiet noch ein ziemlicher Anfänger bin ![]() 2.- Farbige Lichtquellen sind zwar für mein Projekt nicht notwendig, mich würde es aber trotzdem interessieren, wie man diese umsetzen kann. Die Vertexfarben verändern klappt nicht, da diese ja irgendwie für die Normalmap verwendet werden. Ich habe zwar ein wenig im Code rumprobiert, aber habe keine farbigen Lichter hinbekommen (ich habe es auch erhlichgesagt nicht erwartet...). Was müsste man verändern, damit man die Farbe beeinflussen kann? 3.- Als ich mir meine eigene Normalmap basteln wollte, bin ich auf das Programm CrazyBump gestoßen. Die Maps, die ich damit machen kann gehen auch alle und sehen auch toll aus, aber wenn ich die Textur exportiere, kommen da noch eine Menge anderer Maps mit, wie die "Occlusion-Map", die "Displacement-Map" und die "Specularity-Map". Was nutzen mir diese Texturen? Kann man die in Blitz3D verwenden, oder sind die irrelevant? Danke für eure Hilfe! ![]() Hier ist übrigens der Code aus dem Tutorial, für diejenigen, die sich das nicht durchlesen wollen ![]() Code: [AUSKLAPPEN] Graphics3D 640, 480, 32, 2
SetBuffer BackBuffer() AppTitle "Dot3 Bumpmapping" Camera = CreateCamera() PositionEntity Camera, 0, 0, -2 ;Light = CreateLight(1) light=CreatePivot() Light2 = CreateLight(1) Sphere = CreateSphere(30) ; mesh ;ScaleEntity Sphere,2,2,2 Normalmap = LoadTexture("Stone1_NRM.png", 1) ; normalmap Texture = LoadTexture("Stone1_COLOR.png", 1) ; tetxure EntityFX Sphere, 2 ; vertexcolor EntityTexture Sphere, Normalmap, 0, 0 ; layer 1 EntityTexture Sphere, Texture, 0, 1 ; layer 2 TextureBlend Normalmap, 4 ; dot3 bumpmapping TextureBlend Texture, 5 ; lightmapping ScaleTexture Texture, 0.2, 0.2 ; dont must be this values ScaleTexture Normalmap, 0.2, 0.2 While Not KeyDown(1) PositionEntity Light,(MouseX()-320)/100.0, (MouseY()-240)/-100.0,-1.5 ;PositionEntity Light2,(MouseX()-320)/100.0, (MouseY()-240)/-100.0,-1.5 TurnEntity Sphere, 0, 0.5, 0 UpdateDot3Normals(Sphere, Light) ; UpdateDot3Normals(Sphere, Light2) RenderWorld Flip Wend Function UpdateDot3Normals(Mesh, Light) Local LX#, LY#, LZ#, LNX#, LNY#, LNZ# Local S, Surface, V, VX#, VY#, VZ#, VNX#, VNY#, VNZ# Local Length#, DotProduct#, VRed, VGreen, VBlue ; get the lightcoords LX# = EntityX#(Light, 1) LY# = EntityY#(Light, 1) LZ# = EntityZ#(Light, 1) For S = 1 To CountSurfaces(Mesh) Surface = GetSurface(Mesh, S) For V = 0 To CountVertices(Surface)-1 ; get vertexcoords VX# = VertexX#(Surface, V) VY# = VertexY#(Surface, V) VZ# = VertexZ#(Surface, V) ; get vertexnormalcoords VNX# = VertexNX#(Surface, V) VNY# = VertexNY#(Surface, V) VNZ# = VertexNZ#(Surface, V) ; transform vertexcoords into worldcoords TFormPoint VX#, VY#, VZ#, Mesh, 0 VX# = TFormedX#() VY# = TFormedY#() VZ# = TFormedZ#() ; transform vertexnormalcoords into worldnormalcoords TFormNormal VNX#, VNY#, VNZ#, Mesh, 0 VNX# = TFormedX#() VNY# = TFormedY#() VNZ# = TFormedZ#() ; calculate a vector between vertex and light LNX# = LX#-VX# LNY# = LY#-VY# LNZ# = LZ#-VZ# ; normalize this vector Length# = Sqr#(LNX#^2.0+LNY#^2.0+LNZ#^2.0) LNX# = LNX#/Length# LNY# = LNY#/Length# LNZ# = LNZ#/Length# ; calculate the dotproduct between vertexnormal and the vector between light and vertex DotProduct# = VNX#*LNX#+VNY#*LNY#+VNZ#*LNZ# ; if the light behind the mesh If DotProduct# < 0.0 Then DotProduct# = 0.0 ; calculate the new vertexcolor VRed = ( LNX#*DotProduct#+1.0)*127.0 VGreen = ( LNY#*DotProduct#+1.0)*127.0 VBlue = (-LNZ#*DotProduct#+1.0)*127.0 ; update vertexcolor VertexColor Surface, V, VRed, VGreen, VBlue Next Next End Function |
||
Mein DeviantArt Profil
Gewinner des BAC #136 |
AvaGast |
![]() Antworten mit Zitat |
|
---|---|---|
zu 3)
Klingt ja spannend, dieses CrazyBump muss ich mir mal anschauen! ![]() ![]() |
||
![]() |
NightPhoenix |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich hab mich auch mal genau mit diesen Fragen beschäftigt und bin letztendlich zu diesem Ergebnis gekommen:
https://www.blitzforum.de/foru...hp?t=34666 Ich hoffe du kannst damit was anfangen. Das Beispiel kann zwar nicht mehrere Lichtquellen verarbeiten, aber immerhin unterstützt es Farben. ![]() Ich hab mir mal überlegt ob es nicht möglich wäre aus zwei VertexColor für 2 Lichtquellen oder mehr einen Durchschnittswert für jedes Vertex zu bilden und so theoretisch unendlich viele Lichtquellen auf die Normalmap zu übertragen. Naja es blieb aufgrund fehlender Motivation nur bei der Überlegung. ![]() |
||
![]() |
Shodan |
![]() Antworten mit Zitat ![]() |
---|---|---|
Gibt doch schon ne fertige hilfreiche Lösung. ![]() [prahl] Funktionsbibliothek http://www.selfmadegames.de/bsm.zip und Tutorial dazu http://www.selfmadegames.de/bump-tutorial.zip [/prahl] ![]() frag mich, falls noch was unklar ist. Shodan |
||
www.selfmadegames.de |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group