UV Koordinaten

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Benutzeravatar
Darie
Beiträge: 204
Registriert: 14.09.2004 21:51

UV Koordinaten

Beitrag von Darie »

Hallo allerseits !!!

Ich weiss, zu diesem Thema gibts schon etliche Threads, aber leider muss ich noch einen posten, weil ich einfach nicht die gewünschte Textur auf mein Mesh bekomme. (Code von Danilo leicht abgeändert):

Code: Alles auswählen

; German forum: http://www.purebasic.fr/german/archive/viewtopic.php?t=1501&start=10 
; Author: Danilo (updated for PB 4.00 by ste123) 
; Date: 05. July 2003 
; OS: Windows 
; Demo: Yes 

If InitEngine3D() And InitSprite() And InitKeyboard() 
  OpenWindow(0,0,0,640,480,"3D Mesh Test",#PB_Window_SystemMenu|#PB_Window_ScreenCentered) 
  OpenWindowedScreen(WindowID(0),0,0,640,480,0,0,0) 
  BigFont = LoadFont(1,"Arial",38) 
  Add3DArchive("\", #PB_3DArchive_FileSystem)

   ; Viereck
    CreateMesh(1,30) 
    SetMeshData(1,#PB_Mesh_Vertex       ,?Ecken            , 4) ; 4 Ecken 
    SetMeshData(1,#PB_Mesh_Face         ,?Viereck          , 2) ; 4 Dreiecke (Vorder- und Rueckseite) 
    SetMeshData(1,#PB_Mesh_UVCoordinate ,?TexturKoordinaten, 4) 
    
   
    CreateMaterial(0, LoadTexture(0,"g88im13o6int.png"))
    ;CreateEntity(1, MeshID(1), #PB_Material_None) 
    CreateEntity(1, MeshID(1), MaterialID(0)) 

    ScaleEntity(1,4,4,4): MoveEntity(1,-3,0,0) 
    
    CreateCamera(0, 0, 0, 100, 100) 
    CameraLocate(0,0,0,10) 
    CameraLookAt(0, EntityX(1),EntityY(1),EntityZ(1))
    ;CameraRenderMode(0, #PB_Camera_Wireframe)
    CameraRenderMode(0, #PB_Camera_Textured)

    Repeat 
      ExamineKeyboard() 
      Select WindowEvent() 
        Case #PB_Event_CloseWindow 
          Quit = #True 
      EndSelect 
      
      rot=1:RotateEntity(1,rot*0.1,rot*0.1,rot*0.1, #PB_Relative) 
     
      RenderWorld() 
      FlipBuffers() 
    
    Until KeyboardPushed(#PB_Key_Escape) Or Quit 
Else 
  MessageRequester("Error", "Cant init DirectX 3D Engine",0) 
EndIf 
  
End 


DataSection 

  Ecken: 
    Data.f -1, -1,  0 ; Ecke 0             3-----2 
    Data.f  1, -1,  0 ; Ecke 1             |  .  | 
    Data.f  1,  1,  0 ; Ecke 2             |     | 
    Data.f -1,  1,  0 ; Ecke 3             0-----1 

  TexturKoordinaten: 
    Data.f 0,1      ; Vertex 0 
    Data.f 1,1      ; Vertex 1 
    Data.f 1,0      ; Vertex 2 
    Data.f 0,0      ; Vertex 3 

Viereck: 
    Data.w 0, 1, 2  ; Dreieck 1 besteht aus den Ecken 0, 1 und 2 
    Data.w 2, 3, 0  ; Dreieck 2 besteht aus den Ecken 2, 3 und 0 
                    ; = 1 Viereck Vorderseite 
    ;Data.w 0, 3, 2  ; Dreieck 1 besteht aus den Ecken 0, 3 und 2 
    ;Data.w 2, 1, 0  ; Dreieck 2 besteht aus den Ecken 2, 1 und 0 
                    ; = 1 Viereck Rueckseite 

EndDataSection 
Und hier auch die Textur: http://www2.pic-upload.de/06.10.09/g88im13o6int.png

Was mache ich da falsch ??? Und noch eine Bitte : Wozu sind die Meshnormals (und wie berechne ich die) und Meshcolors da ??? guter Link mit Erklärung wäre nett. Dankeschön !
Repeat
PureBasic
ForEver
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Re: UV Koordinaten

Beitrag von Kaeru Gaman »

hast du denn die alten formate angepasst?

benutze 4.0 bis 4.2, wenn du solch alte Beispiele benutzen willst.
ab 4.3 ist eine neue Version der OGRE drin, die benutzt ein leicht anderes MESH-Format.

es könnte vielleicht auch daran liegen, dass die Texture nicht genau das richtige Format hat...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Darie
Beiträge: 204
Registriert: 14.09.2004 21:51

Re: UV Koordinaten

Beitrag von Darie »

Hab es mit PureBasic V. 4.2 und 4.0 versucht, immer das gleiche. Hab auch die Textur neugemacht mit Paint.Net als JPG/TGA 24/32 Bit mit einer grösse von 128x128. Das Viereck bekommt zwar Farbe, aber nicht die komplette Textur....
Repeat
PureBasic
ForEver
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Re: UV Koordinaten

Beitrag von Kaeru Gaman »

trenne mal das LoadTexture raus und überprüfe den Rückgabewert, ob das Teil überhaupt geladen wird.

und funktioniert denn das unveränderte Beispiel aus den CodeArchiv?
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Darie
Beiträge: 204
Registriert: 14.09.2004 21:51

Re: UV Koordinaten

Beitrag von Darie »

Textur wird geladen. Das Original funktioniert unter V. 4.0 bei mir allerdings auch nicht. Na hoffentlich wird bald Version 4.4 released und die Hilfe aktualisiert.
Repeat
PureBasic
ForEver
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Re: UV Koordinaten

Beitrag von Kaeru Gaman »

Darie hat geschrieben:Das Original funktioniert unter V. 4.0 bei mir allerdings auch nicht.
na, dann würde ich mich erstmal darum kümmern!

... einfach auf die nächste Version hoffen hilft auch nix.

außerdem ist die Beta schon die 4te, also wenn da was funktioniert funktionierts auch jetzt.
und dass die Help jemals eine extrem ausführliche Beschreibung der OGRE-Interna enthalten wird,
kannste vergessen, dass wirst du dir schon auf der OGRE Homepage raussuchen müssen.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Darie
Beiträge: 204
Registriert: 14.09.2004 21:51

Re: UV Koordinaten

Beitrag von Darie »

Ja, hab das Problemchen gelöst. Die Reihenfolge beim Daten einlesen ist wohl etwas anders (wie du ja schon meintest) ;-)

Dieser Code läuft jetzt mit 4.4 -->

Code: Alles auswählen

; German forum: http://www.purebasic.fr/german/archive/viewtopic.php?t=1501&start=10 
; Author: Danilo (updated for PB 4.00 by ste123) 
; Date: 05. July 2003 
; OS: Windows 
; Demo: Yes 

If InitEngine3D() And InitSprite() And InitKeyboard() 
  OpenWindow(0,0,0,640,480,"3D Mesh Test",#PB_Window_SystemMenu|#PB_Window_ScreenCentered) 
  OpenWindowedScreen(WindowID(0),0,0,640,480,0,0,0) 
  BigFont = LoadFont(1,"Arial",38) 
  Add3DArchive("\", #PB_3DArchive_FileSystem)

   ; Viereck
    CreateMesh(1,10) 
    SetMeshData(1, #PB_Mesh_Vertex|#PB_Mesh_UVCoordinate, ?Ecken, 4)
    SetMeshData(1, #PB_Mesh_Face, ?Viereck, 4)
    
   
    CreateMaterial(0, LoadTexture(0,"setmesh.png"))
    ;CreateEntity(1, MeshID(1), #PB_Material_None) 
    CreateEntity(1, MeshID(1), MaterialID(0)) 

    ;ScaleEntity(1,4,4,4): MoveEntity(1,-3,0,0) 
    
    CreateCamera(0, 0, 0, 100, 100) 
    CameraLocate(0,0,0,30) 
    CameraLookAt(0, EntityX(1),EntityY(1),EntityZ(1))
    ;CameraRenderMode(0, #PB_Camera_Wireframe)
    CameraRenderMode(0, #PB_Camera_Textured)

    Repeat 
      ExamineKeyboard() 
      Select WindowEvent() 
        Case #PB_Event_CloseWindow 
          Quit = #True 
      EndSelect 
      
      rot=1:RotateEntity(1,rot*0.1,rot*0.1,rot*0.1,#PB_Relative) 
     
      RenderWorld() 
      FlipBuffers() 
    
    Until KeyboardPushed(#PB_Key_Escape) Or Quit 
Else 
  MessageRequester("Error", "Cant init DirectX 3D Engine",0) 
EndIf 
  
End 


DataSection 

  Ecken: 
    Data.f -10, -10,  0 ; Ecke 0 lu            
    Data.f 0,1
    Data.f  10, -10,  0 ; Ecke 1 ru          
    Data.f 1,1
    Data.f  10,  10,  0 ; Ecke 2 ro          
    Data.f 1,0
    Data.f -10,  10,  0 ; Ecke 3 lo            
    Data.f 0,0
    
  
Viereck: 
    Data.w 0, 1, 2  ; Dreieck 1 besteht aus den Ecken 0, 1 und 2 
    Data.w 2, 3, 0  ; Dreieck 2 besteht aus den Ecken 2, 3 und 0 
                    ; = 1 Viereck Vorderseite 
    Data.w 0, 3, 2  ; Dreieck 1 besteht aus den Ecken 0, 3 und 2 
    Data.w 2, 1, 0  ; Dreieck 2 besteht aus den Ecken 2, 1 und 0 
                    ; = 1 Viereck Rueckseite 

EndDataSection 
Was man nich alles beim Programmieren wissen muss...... :coderselixir: :coderselixir: :coderselixir:

Finde aber schon das man die unterschiedlichen Varianten die Meshdaten aus der DataSection auszulesen in der PB-Help erwähnen sollte, vorallem weil die erste Variante nicht funktioniert...
Repeat
PureBasic
ForEver
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Re: UV Koordinaten

Beitrag von Kaeru Gaman »

steht denn in der Help, wie die Struct eines Images aufgebaut ist, eines Sprites, eines Sounds, etc?
steht in der Help, wie der Stringpool intern verwaltet wird, wie ein ListIconGadget intern aufgebaut ist?

nein.
Warum?

weil es ein Referenzhandbuch und Befehlsliste ist, keine ausführliche Beschreibung sämtlicher Interna.

wenn du wissen willst, wie etwas unter der Haube aussieht, musst du dich extra informieren, das ist nunmal so.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Darie
Beiträge: 204
Registriert: 14.09.2004 21:51

Re: UV Koordinaten

Beitrag von Darie »

Klar steht in der Befehlsreferenz nicht drin, wie ein Imageformat aufgebaut ist, weil du es einfach nur mit dem Befehl LoadImage lädst. Und das klappt in 99% der Fälle dann auch.
Aber bei SetMeshData ist das was anderes, da man selber verantwortlich ist die Daten einzulesen und leider gibt die Referenz keinen Hinweis darauf, wie man die Daten richtig einliest.
Und das Ogre Manual bzw. die Wiki hilft da erstmal auch nicht weiter, da die SetMeshData-Funktion in Purebasic nunmal gewrappt ist und man leider auch nicht die Interna von Purebasic einfach
so sichtbar machen kann. Ergo ist man auf die PB-Referenz angewiesen. Ausserdem gibt es zusätzlich zur Referenz auch fast immer ein Example, dass mit der jeweiligen Version auch immer
fehlerfrei kompilierbar ist. Für SetMeshData gibt es aber kein passendes Example. Also wäre zumindest ein kleines lauffähiges Example für diesen Befehl nicht falsch...

Dann zeig mir dochmal den Link mit den richtigen Informationen zum manuellen Erstellen von Meshes in der Ogre-Wiki, wenn du es besser weisst.......
Repeat
PureBasic
ForEver
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Re: UV Koordinaten

Beitrag von Kaeru Gaman »

was geht ab?

wenn du dich mit sowas wie Meshes on-the-fly programmieren rumschlagen willst,
dann solltest du gefälligst in der Lage sein, dir den Krempel selber raus zu suchen.

ansonsten nimm dir nen Modeller und der OGRE-Mesh-Importer
und erstelle deine Meshes mit einem Editor wie die Anderen Hunderttausend Hobby-Modeller auch!

Aber werd hier nicht frech, wenn du zu faul bist, dir solche internen Informationen selber rauszusammeln.
mit so blöden Sprüchen erreichst du höchstens, dass solche Befehle wie SetMeshData aus PureBasic entfernt werden,
aber nicht, dass jemand vom Team seine Zeit damit verschwendet, dafür ne Anleitung zu schreiben.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten