normalmap+uvmap+alphamap

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

 

martin_moehler

Betreff: normalmap+uvmap+alphamap

BeitragSo, Sep 02, 2007 22:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Einen wunderschönen guten Abend,
ich habe mir zum Testen einen kleines Haus erstellt, eine uv-Textur drübergezogen danach noch eine normalmap.
Als ich jetzt aber das Fenster mit ner alphamap durchsichtig machen wollte, hats nich funktioniert.

Code: [AUSKLAPPEN]
   
EntityTexture Haus, Normalmap,0, 0             ; layer 1
   EntityTexture Haus, Texture, 0, 1               ; layer 2
   
   EntityTexture Haus, Alpha,0,2               ; layer 3
   
   TextureBlend Normalmap, 4                      ; dot3 bumpmapping
   TextureBlend Texture, 5                        ; lightmapping


Es klappt nur entweder normalmapping oder alphamapping. Kann mir irgendjemand weiterhelfen?
Im voraus schon den besten Dank
 

Dreamora

BeitragMo, Sep 03, 2007 10:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Das geht nicht.
Wenn du verschiedene Texturen brauchst, mach verschiedene Surfaces so dass du das via Brushes oder manuellem Multitexturing erledigen kannst.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Markus2

BeitragMo, Sep 03, 2007 12:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Du kannst im Haus die Fenster in einzelne Objekte umwandeln
und die z.B. Glas nennen .
Dann mit LoadAnimMesh das Haus laden und die Hirachie durch gehen
und EntityAlpha benutzen bei denen die im Namen mit Glas anfangen .
 

Dreamora

BeitragMo, Sep 03, 2007 12:29
Antworten mit Zitat
Benutzer-Profile anzeigen
oder halt verschiedene Materialien (-> verschiedene Surfaces)

dann am besten deiner Textur ein "alpha_" oder so vorne rein packen, dann kannst du sogar mit den texturefilter arbeiten. Ansonsten kannst du material settings nur auf B3D Modellen machen.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

martin_moehler

BeitragMo, Sep 03, 2007 22:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Markus2 hat Folgendes geschrieben:
mit LoadAnimMesh das Haus laden und die Hirachie durch gehen
.

wie kann ich die Hirachie eines Meshes auslesen??
In der BB-Hilfe steht dazu nix.

Oder:

Dreamora hat Folgendes geschrieben:
mach verschiedene Surfaces so dass du das via Brushes oder manuellem Multitexturing erledigen kannst.

wie kann ich ein Surface genau auf mein Fenster legen?
 

Dreamora

BeitragMo, Sep 03, 2007 22:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Indem das Fenster eine eigene Textur hat.
Eigene Textur erzeugt automatisch ein eigenes Surface


Und was die Hierarchie durchgehen betrifft: Dafür sind die Child Befehle bei den Entity Befehlen.
Also FindChild etc, denn ein B3D Objekt hat immer genau einen "Head Node" wo alles andere dran hängt.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

martin_moehler

BeitragMo, Sep 03, 2007 23:00
Antworten mit Zitat
Benutzer-Profile anzeigen
klappt FindChild auch in 3ds oder nur b3d?
 

martin_moehler

BeitragDi, Sep 04, 2007 0:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Hat sich erledigt Very Happy

Ich hab mir den b3d exporter downgeloaded und hab es so gemacht wie du es vorgeschlagen hast.
Code: [AUSKLAPPEN]
Global Haus = LoadAnimMesh("Haus.b3d")      ; mesh
   
   Normalmap = LoadTexture("Haus2bump.bmp", 1) ; normalmap
   Texture = LoadTexture("Haus2.bmp", 1)      ; tetxure
   
   EntityAlpha FindChild (Haus,"Fenster"),.5      ;Alphawert des Fensters
   EntityFX Haus, 2                  ; vertexcolor
   EntityTexture Haus, Normalmap,0, 0         ; layer 1
   EntityTexture Haus, Texture, 0, 1         ; layer 2
   
   TextureBlend Normalmap, 4            ; dot3 bumpmapping
   TextureBlend Texture, 5 



Hat allese geklappt! Vielen Dank
Razz
 

martin_moehler

BeitragDo, Sep 06, 2007 0:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Mein Problem hat sich leider wieder etwas erweitert:

Zum Abschluss wollte ich mein Haus nun mit einem Schatten an einer Plane verpassen. Dafür wollte ich das DevilShadowSystem.bb benutzen, was auch nach etwas rumprobieren geklappt hat, jedoch ist mein Haus nun nicht mehr farbig. Normalmapping funktioniert, aber nur in Schwarz-Weiß!
Auch funktioniert alles (sogar farbig), wenn ich RenderModus 2 benutze, allerdings ist das der Debugmodus
Code: [AUSKLAPPEN]
;Use Render() insted of RenderWorld()
   ;Don't ever use RenderWorld. Not even in the cubemap rendering proccess!
   ;Render(mode = 0, anim_tween#
   ;mode 0 = shadows and all other stuff disabled.
   ;mode 1 = shadows and all other stuff enabled.
   ;mode 2 = debug mode; volumes visible only. (For advanced users only!)
   ;anim_tween# is the animation step for UpdateWorld
   ;=> UpodateWorld(anim_tween#)


Mein Code:
Code: [AUSKLAPPEN]
Graphics3D 640, 480, 32, 2
SetBuffer BackBuffer()
AppTitle "Dot3 Bumpmapping"

Camera = CreateCamera()
PositionEntity Camera, 0, 0, -2

Include "DevilShadowSystem.bb"
Include "UserInterface.bb"
Include "ShadowVolumes.bb"

Global Haus = LoadAnimShadowMesh("Haus.b3d")            ; AnimMesh um über FindChildren das Fenster zu finden
   
   Normalmap = LoadTexture("Hausbump.bmp", 1)    ; normalmap
   Texture = LoadTexture("Haus.bmp", 1)         ; tetxure
   
   EntityAlpha FindChild (Haus,"Fenster"),.5
   
   EntityFX Haus, 2                                ; vertexcolor
   
   EntityTexture Haus, Normalmap,0, 0             ; layer 1
   EntityTexture Haus, Texture, 0, 1               ; layer 2
   

   
   TextureBlend Normalmap, 4                      ; dot3 bumpmapping
   TextureBlend Texture, 5                        ; lightmapping


plane = CreatePlane()
   MoveEntity plane,0,0,10
   EntityColor plane,50,50,100
   TurnEntity plane,-90,0,0
   
ScaleEntity Haus,.1,.1,.1


Light = CreateLight(1)
Light2 = CreateLight(1,FindChild (Haus,"Fenster"))
light3 = CreateLight(1)
   MoveEntity light3,-10,0,-10
s=CreateSphere(5,light2)
MoveEntity Light2 ,0,0,-.5


; Schatten
   InitShadows(Camera)
   SetShadowLight(Light3)
   SetShadowMesh(plane, False)
   
While Not KeyDown(1)
   PositionEntity Light,(MouseX()-320)/100.0, (MouseY()-240)/-100.0,-1.5

   TurnEntity Haus, 0, 1, 0
   
   UpdateDot3Normals(Haus, Light)
   
   Render(1)
   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


Bitte helft mir ich stehe vor einem Rätsel!! Vielen Dank Sad
 

Dreamora

BeitragDo, Sep 06, 2007 9:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Du wirst nicht alles kombinieren können und das macht auch keinen Sinn.

Wenn du soviele moderne (und hardware hungrige!) Technik nutzt, wäre es sinnvoller du nutzt direkt eine DX9 Engine mit Schatten und Bumpmapping.

Mit DX7 wird das nicht gehen und auch auf keiner DX7 Karte laufen (alleine schon das hinzufügen der Stencil Schatten wird die mindestanforderung drastisch nach oben schrauben)

Vor allem nutzt man keine stencil schatten für statische objekte, dafür gibt es lightmaps, die kosten primär dich zeit beim vorausberechnen, sind nachher aber umsonst Smile
Sollte dein Ziel etwas SplinterCell ähnliches sein: Auch dafür braucht man keine Stencil Schatten, SC hat das erst in der neuensten Version mit "echtem" Schatten, das war vorher alles Lightmapping.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group