Ogre Schatten

Probleme beim Erstellen von 3D-Modellen und Texturen, keine Ahnung womit man Musik macht? Dies ist dein Forum.
cofter
Beiträge: 84
Registriert: 10.03.2006 19:07
Wohnort: Berlin
Kontaktdaten:

Ogre Schatten

Beitrag von cofter »

Ich habe eine kleine Welt gebastelt und möchte gern das die wichtigen Entitys schatten werfen.
Der #PB_Shadow_Modulative Schatten ist äußerst unschön aber sichtbar
der #PB_Shadow_Additive ist aber leider nicht sichtbar.
Könnte das an meiner Grafikkarte liegen (Ati Radeon 345m IGP)?
Sollte doch aber eigentlich ein Fehler kommen wenn meine Graka das nicht unterstützen sollte.

mfg
Cofter
Was ich nicht kenne das mach ich kaputt! :D
----------------------------------------------------
Purebasic v4.0
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Beitrag von bobobo »

hmm .. selbst bei meiner onboard-Graka (82852(82855 GM/GME in einem Notebook) geht das mit additiven Schatten.

Folgendes Beispiel (PB4) in Anlehnung an das mitgelieferte
light.pb Demo zeigt einen bunten Schattenverlauf. Das sind
mehrere farblich unterschiedliche Lichter die zueinander
leicht verschoben sind.

Code: Alles auswählen

; PB4 
;in das Example-Source-Verzeichnis speichern, da auf
;mitgelfierten PB_ressourcen zugegriffen wird

#CameraSpeed = 10
IncludeFile "Screen3DRequester.pb"
Define.f KeyX, KeyY, MouseX, MouseY
If InitEngine3D()
  Add3DArchive("Data\", #PB_3DArchive_FileSystem)
  InitSprite()
  InitKeyboard()
  InitMouse()
  If Screen3DRequester()
    WorldShadows(#PB_Shadow_Additive)
    LoadMesh   (0, "Robot.mesh")
    LoadTexture(0, "r2skin.jpg")
    AmbientColor(RGB(64,64,64))
    CreateEntity (0, MeshID(0), CreateMaterial(0, TextureID(0)))
    AnimateEntity(0, "Walk")
    EntityRenderMode(0,#PB_Entity_CastShadow)
    CreateLight(0, RGB(0,0,255), 80.0, 0, 0)   ; Blue light
    CreateLight(1, RGB(64,0,255), 80.0, 0, 5)   ; Blue light
    CreateLight(2, RGB(128,0,255), 80.0, 0, 10)   ; Blue light
    CreateLight(3, RGB(255,0,255), 80.0, 0, 15)   ; Blue light
    CreateCamera(0, 0, 0, 100, 100)
    CameraLocate(0,100,100,50)
    Repeat
      Screen3DEvents()
      ClearScreen(RGB(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
  If ExamineMouse()
    MouseX = -(MouseDeltaX()/10)*#CameraSpeed/2:MouseY = -(MouseDeltaY()/10)*#CameraSpeed/2
  EndIf
  RotateEntity(0, 1, 0, 0)
  RotateCamera(0, MouseX, MouseY, RollZ)
  MoveCamera  (0, KeyX, 0, KeyY)
  CameraLookAt(0,0,50,0)
  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
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
cofter
Beiträge: 84
Registriert: 10.03.2006 19:07
Wohnort: Berlin
Kontaktdaten:

Beitrag von cofter »

Ja ich wollts aber auf nen Terrain haben und da werden die Schatten nicht angezeigt.


mfg
Cofter
Was ich nicht kenne das mach ich kaputt! :D
----------------------------------------------------
Purebasic v4.0
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Beitrag von bobobo »

So ist das eben bei den terrains ..
Schatten werden wohl nur zwischen Entities berechnet

Wenn Du den Boden als Entity erzeugst erhälst Du wohl auch einen Schatten.
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
cofter
Beiträge: 84
Registriert: 10.03.2006 19:07
Wohnort: Berlin
Kontaktdaten:

Beitrag von cofter »

Wie soll ich das Terrain als Entity erzeugen?
Soll ich nen *.mesh laden? 0_o
Was ich nicht kenne das mach ich kaputt! :D
----------------------------------------------------
Purebasic v4.0
Preludian
Beiträge: 52
Registriert: 25.04.2006 09:21

Beitrag von Preludian »

So viel ich weiss gehen momentan Schatten auf Terrains mit der PB <= 4 nicht.
What shadows do is render zones with or without light (lit and shadowed, respectively). The problem here is that terrains are lit through lightmaps and not dinamically lit, so there's no difference between the lit and shadowed part. This might sound abstract, but, the shadow is there, though you can't see it.
I think you need to define a material with lighting on and enable terrain normals in the scene manager (through the terrain config file).
Additive stencil won't work on the terrain unless it's dynamically lit (which it isn't by default). Additive lighting works by masking out regular dynamic lighting, so if there isn't any, it's not going to work Wink

Use modulative instead, or if you want to use additive, turn on dynamic lighting on the terrain by enabling normals in terrain.cfg and using a custom material.
This is just the way GPUs behave, normals are scaled using the same world matrix as everything else, hence you should avoid scaling unless you use setNormalisedNormals.
Also scheint vieles nicht in unserer Hand zu liegen. Oder hat es jemand mal geschafft?? Sonst müsste Fred mal demnächst rein schauen...
Benutzeravatar
dllfreak2001
Beiträge: 2925
Registriert: 07.09.2004 23:44
Wohnort: Bayern

Beitrag von dllfreak2001 »

Also mit nem Mesh als Terrain funzt es Prima, aber die Echtzeitschatten sehen total mies aus.
Man kann auch auf den Boden ein Schattenmesh mit Transparenz legen, das ist flotter und man kann es schöner gestalten.
Hat Take 2 in GTA 3 auch gemacht.
I´a dllfreak2001
Preludian
Beiträge: 52
Registriert: 25.04.2006 09:21

Beitrag von Preludian »

und wie kriegst du es hin, dass der Schatten-Mesh bei unebenem Boden immer plan liegt, also den Unebenenheiten folgt? Durch verschieben der Mesh-Vertices?
cofter
Beiträge: 84
Registriert: 10.03.2006 19:07
Wohnort: Berlin
Kontaktdaten:

Beitrag von cofter »

Also ich Mesh als Terrain kann ich bei meinem vorhaben vergessen,
möchte ein Endlosterrain erstellen.
Könnte natürlich auch Tiles machen und dann dynamisch nachladen.
Habe mich jetzt ein wenig im Ogre-Forum umgesehen und etwas interessantes gefunden.

http://www.ogre3d.org/wiki/index.php/Pa ... ne_Manager

Weiss aber net ob das mit der PB Ogre Version funktioniert.
Dazu gibts es mitlerweile auch schon einen Mapeditor.

http://www.ogre3d.org/wiki/index.php/PGLM-MapEditor

Werde das demnächst mal testen.

Das mit dem Schatten werde ich erstmal ausklammern und mich auf andere Dinge konzentrieren.

mfg
Cofter
Was ich nicht kenne das mach ich kaputt! :D
----------------------------------------------------
Purebasic v4.0
Benutzeravatar
dllfreak2001
Beiträge: 2925
Registriert: 07.09.2004 23:44
Wohnort: Bayern

Beitrag von dllfreak2001 »

Naja weiß auch nicht genau wie das gehen soll.
Aufm Terrain sollte man die Winkel berechnen können wie das Mesh gedreht wird.
Aus bestimmten Blickwinkeln sieht das dann nicht so schön aus, da man erkennt das der Schatten sich vom Boden abhebt.


Andere Methode

Vielleicht kann man (wenn man das Terrain als Mesh gemacht hat)
den Schatten als Überlagerung einer Textur projektieren.
Verdunkeln geht dann, aber ich weiß nicht wie schnell das dann wird.

In Quake-Spielen werden statische Schatten generell so gemacht.

Ich Probier das mal aus.
I´a dllfreak2001
Antworten