Exportierte Meshs sehen schlimm aus. Warum eigendlich?

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
netvampire
Beiträge: 9
Registriert: 13.06.2006 13:16

Exportierte Meshs sehen schlimm aus. Warum eigendlich?

Beitrag 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 ;)
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag von MVXA »

Source wäre gut..
Bild
Benutzeravatar
netvampire
Beiträge: 9
Registriert: 13.06.2006 13:16

Beitrag 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
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Re: Exportierte Meshs sehen schlimm aus. Warum eigendlich?

Beitrag 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.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
netvampire
Beiträge: 9
Registriert: 13.06.2006 13:16

Beitrag 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... :(
Benutzeravatar
Zaphod
Beiträge: 2875
Registriert: 29.08.2004 00:40

Beitrag 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.
Benutzeravatar
netvampire
Beiträge: 9
Registriert: 13.06.2006 13:16

Beitrag 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?
Antworten