Seite 1 von 1

Exportierte Meshs sehen schlimm aus. Warum eigendlich?

Verfasst: 07.07.2006 15:34
von netvampire
Hi, ich hab da ein Problem (was wohl sonst ;) )

Also ich wollte einfach mal ein bisschen mit 3d rumspielen. Also hab ich mir als Startrekfan naürlich mal auf die Suche nach Raumschiffmeshs gemacht und hab sehr viele gefunden.
Natürlich waren die alle in anderen Formaten, aber ich bin ja nicht blöde (hoffe ich) und hab mir milkshape mit ogreexporter genommen, importiert und exportiert. nur sieht das ergebnis gar grauenhaft aus, wenn ich es in pb einfüge, und zwar so: Bild
Bei jeder Bewegung "flimmern" die Oberflächen, und es wird mit schwarzen Flächen zerfurcht.
Hat da mal wer ne Idee? Geht das so mit Milkshape, wie ich das gemacht habe? Muss man die Modelle noch vorher irgendwie behandeln? In Milkshape sehen sie ja ganz gut aus...

Hier der vollständigkeit halber mal noch das defiant-mesh in 3ds, was ich genutzt habe: http://www.trekmeshes.ch/meshes/downloa ... 1234757666

PS: Die Site http://www.trekmeshes.ch hat echt ne coole Auswahl an Meshs, wenns jemanden interessiert. Ist sozusagen Bestofstartrek ;)

Verfasst: 07.07.2006 15:49
von MVXA
Source wäre gut..

Verfasst: 07.07.2006 15:52
von netvampire
Klar kein Ding. Aber vorsicht, ist stark zusammengeschustert :D
Ist auch bloß das modifizierte entity-sample von pb4:

Code: Alles auswählen

;
; ------------------------------------------------------------
;
;   PureBasic - Entity
;
;    (c) 2002 - Fantaisie Software
;
; ------------------------------------------------------------
;

IncludeFile "Screen3DRequester.pb"

Define.f KeyX, KeyY, MouseX, MouseY

  
If InitEngine3D()

  Add3DArchive("Data\"          , #PB_3DArchive_FileSystem)
  Add3DArchive("Data\Stars.zip", #PB_3DArchive_Zip)
  
  InitSprite()
  InitKeyboard()
  InitMouse()
  
  If Screen3DRequester()
    
    Parse3DScripts()
    
    LoadMesh   (0, "defiant.mesh")
    
    ;CreateMaterial(0, LoadTexture(0, "clouds.jpg"))
    ;CreateMaterial(1, LoadTexture(1, "Mask.jpg"))
    
    ;CreateEntity(0, MeshID(0), MaterialID(0))
    CreateEntity(1, MeshID(0), #PB_Material_None, 0, 0, 0)
    ;CreateEntity(2, MeshID(0), MaterialID(1),  60, 0, 0)
    RotateEntity(1, 0, 90, 0)
    EntityRenderMode(1,#PB_Entity_Solid|#PB_Entity_CastShadow)
    
    ;AnimateEntity(0, "Walk")
    
    SkyBox("stars.jpg")
    
    CreateLight(0, RGB(150,150,150), 600,220,700)
    ;CreateLight(1, RGB(100,100,100), 600,220,700)
    ;HideLight(1,1)
    
    CreateCamera(0, 0, 0, 100, 100)
    CameraLocate(0,0,0,100)
 
    Repeat
      Screen3DEvents()
      
      ClearScreen(RGB(0, 0, 0))
            
      If ExamineKeyboard()
      
        If KeyboardPushed(#PB_Key_Left)
          KeyX = -10
        ElseIf KeyboardPushed(#PB_Key_Right)
          KeyX = 10
        Else
          KeyX = 0
        EndIf
        ;move ship
        If KeyboardPushed(#PB_Key_W)
          MoveEntity(1, 0, 1, 0)
        ElseIf KeyboardPushed(#PB_Key_D)
          MoveEntity(1, 1, 0, 0)
        ElseIf KeyboardPushed(#PB_Key_S)
          MoveEntity(1, 0, -1, 0)
        ElseIf KeyboardPushed(#PB_Key_A)
          MoveEntity(1, -1, 0, 0)
        ElseIf KeyboardPushed(#PB_Key_Q)
        x = x + 1
          RotateEntity(1, x, 0, 0)
        ElseIf KeyboardPushed(#PB_Key_E)
        x = x - 1
          RotateEntity(1, x, 0, 0)
        EndIf
        
        If KeyboardPushed(#PB_Key_Up)
          KeyY = -10
        ElseIf KeyboardPushed(#PB_Key_Down)
          KeyY = 30
        Else
          KeyY = 0
        EndIf
        
        If KeyboardPushed(#PB_Key_PageUp)
          RollZ = 30
        Else
          RollZ = 0
        EndIf
        
        If KeyboardPushed(#PB_Key_Add)
          Frame.f+0.005
        EndIf
        
      EndIf
      
      If ExamineMouse()
        MouseX = -MouseDeltaX()/10 
        MouseY = -MouseDeltaY()/10
      EndIf
      
      ;RotateEntity(1, 0, 0, 0)
      ;RotateEntity(2, 1, 0, 0)
      
      RotateCamera(0, MouseX, MouseY, RollZ)
      MoveCamera  (0, KeyX, 0, KeyY)
      ;LightLocate(0, KeyX - 10, 0, KeyY -10)
      
      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
PS: So sieht die Defiant im übrigen "real" aus :)

Bild

Re: Exportierte Meshs sehen schlimm aus. Warum eigendlich?

Verfasst: 07.07.2006 15:57
von DarkDragon
netvampire hat geschrieben:Bei jeder Bewegung "flimmern" die Oberflächen, und es wird mit schwarzen Flächen zerfurcht.
Vielleicht Depth-Buffer Probleme: Mach ein Objekt niemals aus mehreren Teilobjekten und lass die Polygone, die etwa in die gleiche Richtung schauen weiter außeinander, außer du weißt warum man das nicht machen sollte und verstehst was dahintersteckt.

Verfasst: 07.07.2006 16:05
von netvampire
Hmm, also sollte ich mich doch mit Moddeling auseinandersetzen.

Schade, denn dann müsste ich ja die Defiant nochmal nachbauen, obwohl es sie schon als Mesh gibt.

Gibts ne möglichkeit das Problem mit dem vorhanden Mesh in Milkshape zu lösen? Denn sonst müsste ich ja das Rad nochmal erfinden... :(

Verfasst: 07.07.2006 17:16
von Zaphod
Ich weiß nicht ob Milkshape da was anbietet. Das Problem mit den schwarzen dreiecken liegt denke ich an falschen Normalenvektoren. In manchen 3d Programmen kann man sich die normalen anziegen lassen und ggf. umdrehen. Vieleicht geht das ja auch mit Milkshape.

Das flimmern könnte von einer Extrem hohen Polygonzahl kommen. Generell unterscheidet man zwischen 3D Modellen die für sowas wie Spiele gedacht sind (lowpoly) und denen die für 3D Programme gedacht sind. Such mal nach lowpoly (low polygon count) Modellen, die sollten besser geeignet sein.

Verfasst: 07.07.2006 18:18
von netvampire
Hmm, das mit der Polygonanzahl kann eventuell stimmen. Aber ich hatte das selbe problem bei vielen Models, selbst bei nem pobligen Shuttle, was echt wenige polygone hat.
Kennt sich jemand in Milkshape aus und kann sagen ob es da sowas wie ne simplifyfunktion gibt, die dann die polygone verringert?

EDIT: Hab mal in Milkshape mit den Tools ein bisschen gespielt und dabei die Polygonanzahl reduziert auf folgendes:

Vertices: 1970
Triangles: 2529

Der Effekt ist aber der gleiche. Ich kann nun allerdings nicht einschätzen, ob diese Werte "niedrig" sind. Wie sollten sie denn sein?