manual mesh und kein Licht (Ogre)

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Benutzeravatar
dllfreak2001
Beiträge: 2925
Registriert: 07.09.2004 23:44
Wohnort: Bayern

manual mesh und kein Licht (Ogre)

Beitrag von dllfreak2001 »

bei dem Manual Mesh geht kein dynamisches Licht.
Aber bei dem fertigen Robotmesh schon warum ist das so
könnt ihr mir bitte helfen...
I´a dllfreak2001
Benutzeravatar
dllfreak2001
Beiträge: 2925
Registriert: 07.09.2004 23:44
Wohnort: Bayern

Beitrag von dllfreak2001 »

Ok, hab es gefunden die normals fehlten in der Datasection. /:->

Gestern leif die Forensuche im Archiv nicht richtig bei mir.
I´a dllfreak2001
Benutzeravatar
dllfreak2001
Beiträge: 2925
Registriert: 07.09.2004 23:44
Wohnort: Bayern

Beitrag von dllfreak2001 »

Leider funzt der Kram immer noch nicht korrekt.
Das Licht kommt an der falschen Stelle.
Die Formel für die Normals aus dem Trick-Archiv peil ich nicht
guckt mal hier. Ich hab sie in diesem Tool reingepackt:

Code: Alles auswählen

OpenWindow(0,0,0,180,110,#PB_Window_ScreenCentered|#PB_Window_MinimizeGadget|#PB_Window_SystemMenu,"NormalRechner")
    CreateGadgetList(WindowID(0))
        TextGadget(100,5,22,20,15,"1:")
        TextGadget(101,5,42,20,15,"2:")
        TextGadget(102,5,62,20,15,"3:")
        
        TextGadget(103,45,5,20,15,"X:")
        TextGadget(104,95,5,20,15,"Y:")
        TextGadget(105,145,5,20,15,"Z:")
        
        TextGadget(106,5,87,20,15,"=>")
         
        StringGadget(0,25,20,50,20,"0")
        StringGadget(1,75,20,50,20,"0")
        StringGadget(2,125,20,50,20,"0")
        
        StringGadget(3,25,40,50,20,"0")
        StringGadget(4,75,40,50,20,"0")
        StringGadget(5,125,40,50,20,"0")
       
        StringGadget(6,25,60,50,20,"0")
        StringGadget(7,75,60,50,20,"0")
        StringGadget(8,125,60,50,20,"0")
        
        StringGadget(9,25,85,150,20,"0.000, 0.000, 0.000",#PB_String_ReadOnly)
       
        Global x1.f, x2.f, x3.f, y1.f, y2.f, y3.f, z1.f, z2.f, z3.f, Norm_x1.f, Norm_y1.f, Norm_z1.f, Length.f
Repeat
    winevent = WaitWindowEvent()
    gadgetevent = EventGadgetID()
    
  If gadgetevent <= 8 And winevent = #PB_Event_Gadget
    x1 = ValF(GetGadgetText(0))
    y1 = ValF(GetGadgetText(1))
    z1 = ValF(GetGadgetText(2))
    
    x2 = ValF(GetGadgetText(3))
    y2 = ValF(GetGadgetText(4))
    z2 = ValF(GetGadgetText(5))

    
    x3 = ValF(GetGadgetText(6))
    y3 = ValF(GetGadgetText(7))
    z3 = ValF(GetGadgetText(8))

    Norm_x1 = (y1 - y2) * (z2 - z3) - (z1 - z2) * (y2 - y3)
    Norm_y1 = (z1 - z2) * (x2 - x3) - (x1 - x2) * (z2 - z3)
    Norm_z1 = (x1 - x2) * (y2 - y3) - (y1 - y2) * (x2 - x3)
    
    Length = Sqr(Pow(Norm_x1, 2)+ Pow(Norm_y1, 2)+ Pow(Norm_z1, 2))
    If Length = 0: Length = 1: EndIf
    
    SetGadgetText(9, StrF(Norm_x1/Length,3) + ", " + StrF(Norm_y1/Length,3) + ", " +StrF(Norm_z1/Length,3))
    EndIf
    
 Until winevent = #PB_Event_CloseWindow 
CloseWindow(0)
End
Allerdings scheinen die NormalVektorWerte für das Manual Mesh Beispiel aus dem Example-Ordner nicht zu passen.
Hier ist mal die angepasste Version mit Licht von manual_mesh.pb,
sie nutzt die grafiken aus dem data Ordner innerhalb des Examples Ordners.:

Code: Alles auswählen

;
; ------------------------------------------------------------
;
;   PureBasic - Manul Mesh
;
;    (c) 2003 - Fantaisie Software
;
; ------------------------------------------------------------
;

#CameraSpeed = 5

IncludeFile "Screen3DRequester.pb"

DefType.f KeyX, KeyY, MouseX, MouseY

If InitEngine3D()

  Add3DArchive("Data\"          , #PB_3DArchive_FileSystem)
  Add3DArchive("Data\Skybox.zip", #PB_3DArchive_Zip)
  
  InitSprite()
  InitKeyboard()
  InitMouse()
  
  If Screen3DRequester()
  
    ; Create a cube, manually.. See the DataSetion, for more precisions
    ;
    CreateMesh(0)
    SetMeshData(0, 0, ?CubeVertices          , 8)
    SetMeshData(0, 1, ?CubeFacesIndexes      , 12)
    SetMeshData(0, 2, ?CubeTextureCoordinates, 8)
    ;-Hier habe ich die Normals dem Mesh übergeben
   
    SetMeshData(0, 3, ?CubeNormal, 12)
    
    AmbientColor(RGB(0,0,0))
    
    CreateEntity(0, MeshID(0), CreateMaterial(0, LoadTexture(0, "Data/terrain_detail.jpg")))
    ;ScrollMaterial(0, 0.2, 0.2, 1)
     ; Just for fun, use an animated material
    DisableMaterialLighting(0, 0)
   
   
    ScaleEntity(0, 3, 3, 3)
    ;-Mein Licht
  
  CreateLight(0,RGB(255,255,255),0,0,20)
    CreateCamera(0, 0, 0, 100, 100)
    CameraLocate(0,0,0,20)
    
    Repeat
      Screen3DEvents()
      
      ClearScreen(0, 0, 0)
            
      If ExamineKeyboard()
        
        If KeyboardPushed(#PB_Key_Left)
          KeyX = -#CameraSpeed 
        ElseIf KeyboardPushed(#PB_Key_Right)
          KeyX = #CameraSpeed 
        Else
          KeyX = 0
        EndIf
                  
        If KeyboardPushed(#PB_Key_Up)
          KeyY = -#CameraSpeed 
        ElseIf KeyboardPushed(#PB_Key_Down)
          KeyY = #CameraSpeed 
        Else
          KeyY = 0
        EndIf

      EndIf
      ;-Das Licht hat immer die gleiche POS wie die Cam
      LightLocate(0,CameraX(0),CameraY(0),CameraZ(0))
      
      If ExamineMouse()
        MouseX = -(MouseDeltaX()/10)*#CameraSpeed/2
        MouseY = -(MouseDeltaY()/10)*#CameraSpeed/2
      EndIf

      RotateEntity(0, 1, 1, 1)
      
      RotateCamera(0, MouseX, MouseY, RollZ)
      MoveCamera  (0, KeyX, 0, KeyY)
      
      RenderWorld()
      Screen3DStats()      
      FlipBuffers()
    Until KeyboardPushed(#PB_Key_Escape) Or Quit = 1
  EndIf
    
Else
  MessageRequester("Error", "The 3D Engine can't be initialized",0)
EndIf
  
End

DataSection

  CubeVertices:
    Data.f 0, 0, 0 ; Vertex index 0
    Data.f 1, 0, 0 ; Vertex index 1
    Data.f 1, 0, 1 ; Vertex index 2
    Data.f 0, 0, 1 ; Vertex index 3

    Data.f 0, 1, 0 ; Vertex index 4 - Note: exactly the same as above, but with 'y'
    Data.f 1, 1, 0 ; Vertex index 5
    Data.f 1, 1, 1 ; Vertex index 6
    Data.f 0, 1, 1 ; Vertex index 7

  CubeFacesIndexes:
    Data.w 0, 1, 2 ; bottom face (clockwise as it's reversed...)
    Data.w 2, 3, 0 
    Data.w 6, 5, 4 ; top face
    Data.w 4, 7, 6
    Data.w 1, 5, 6 ; right face
    Data.w 6, 2, 1
    Data.w 7, 4, 0 ; left face
    Data.w 0, 3, 7
    Data.w 5, 1, 0 ; back face
    Data.w 0, 4, 5
    Data.w 2, 6, 7 ; front face
    Data.w 7, 3, 2

  CubeTextureCoordinates:
    Data.f 0   , 0.33 ; Vertex 0
    Data.f 0.33, 0.33 ; Vertex 1
    Data.f 0.33, 0    ; Vertex 2
    Data.f 0,    0    ; Vertex 3

    Data.f 0.66, 1    ; Vertex 4
    Data.f 1,    1    ; Vertex 5
    Data.f 1,    0.66 ; Vertex 6
    Data.f 0.66, 0.66 ; Vertex 7
    
    ;-Das sind die Normals
   
  CubeNormal:
  
    Data.f 0, -1, 0
    Data.f 0, -1, 0
    
    Data.f 0, 1, 0
    Data.f 0, 1, 0
   
    Data.f 1,0, 0
    Data.f 1,0, 0
    
    Data.f -1,0, 0
    Data.f -1,0, 0
    
        Data.f 0,0,-1
    Data.f 0,0,-1
EndDataSection
I´a dllfreak2001
Benutzeravatar
dllfreak2001
Beiträge: 2925
Registriert: 07.09.2004 23:44
Wohnort: Bayern

Beitrag von dllfreak2001 »

Bitte helft mir doch...
I´a dllfreak2001
Benutzeravatar
Vallan
Beiträge: 223
Registriert: 20.01.2006 19:34
Kontaktdaten:

Beitrag von Vallan »

Hatte ich auch probleme....

Eine Normale gibt an in welche Richtung die Facette zeigt und wird für die
Lichter benötigt.

Probir mal:
http://www.purebasic.fr/english/viewtop ... highlight=

(= englisches Forum)



die Links daraus:
http://www.euclideanspace.com/maths/alg ... /index.htm
http://www.euclideanspace.com/maths/alg ... /index.htm

(Danke an traumatic!)
Zuletzt geändert von Vallan am 19.04.2006 20:21, insgesamt 1-mal geändert.
Benutzeravatar
Vallan
Beiträge: 223
Registriert: 20.01.2006 19:34
Kontaktdaten:

Beitrag von Vallan »

Ach so.

Kreutz Produkt:

Code: Alles auswählen

Structure VECTOR3
  x.f
  y.f
  z.f
EndStructure

Procedure VectorCross(*out.VECTOR3, *v1.VECTOR3, *v2.VECTOR3)
  *out\x = (*v1\y * *v2\z) - (*v1\z * *v2\y)
  *out\y = (*v1\z * *v2\x) - (*v1\x * *v2\z)
  *out\z = (*v1\x * *v2\y) - (*v1\y * *v2\x)
  ProcedureReturn *out
EndProcedure 
(Noch mal danke an traumatic!)
Antworten