Seite 1 von 1

Wie bekomme ich eine Textur auf ein Mesh

Verfasst: 27.10.2008 23:12
von String
Angeregt von dem Wurfelmesh.pb Code der Seite
http://www.basicpure.de.vu
Dort gibt es auch das dazugehörige Bild Wurfel.jpg.
Wollte ich das mal austesten.
Und habe den Code für (PB 4.3 Beta4 x86) angepasst.
Aber irgendwie will er die Textur nicht anzeigen.
Außerdem funktioniert
StartDrawing(ScreenOutput()) mit (PB 4.3 Beta4 x86) nicht. Wieso?

Code: Alles auswählen

InitKeyboard()
InitEngine3D()
InitSprite()
InitMouse()

OpenWindow(0, 50, 50, 640, 480, "3D - Würfel", #PB_Window_SystemMenu)
OpenWindowedScreen(WindowID(0), 0, 0, 640, 480, 0, 0, 0)

 ;- Kamera einstellen
 CreateCamera(0,  0,  5, 100, 90)
 CameraLocate(0, 33, 56, -66)
 CameraLookAt(0, 10, 10, 15)
 
DataSection
V_01:
Data.f  00,  00,  00 ;Point 0 *
Data.f  32,  00,  00 ;Point 1 +
Data.f  32,  32,  00 ;Point 2 -
Data.f  00,  32,  00 ;Point 3 /
   
Data.f  00,  00, -32 ;Point 4 !
Data.f  32,  00, -32 ;Point 5 ?
Data.f  32,  32, -32 ;Point 6 $
Data.f  00,  32, -32 ;Point 7 %
   
Data.f  00,  00,  00 ;Point 8 *
Data.f  32,  00,  00 ;Point 9 +
Data.f  32,  00, -32 ;Point 10 ?
Data.f  00,  00, -32 ;Point 11 !
   
Data.f  32,  32,  00 ;Point 12 -
Data.f  00,  32,  00 ;Point 13 /
Data.f  00,  32, -32 ;Point 14 %
Data.f  32,  32, -32 ;Point 15 $
   
Data.f  00,  00,  00 ;Point 16 *
Data.f  00,  32,  00 ;Point 17 /
Data.f  00,  32, -32 ;Point 18 %
Data.f  00,  00, -32 ;Point 19 !
   
Data.f  32,  32,  00 ;Point 20 -
Data.f  32,  00,  00 ;Point 21 +
Data.f  32,  00, -32 ;Point 22 ?
Data.f  32,  32, -32 ;Point 23 $

T_01:  ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
   
Data.w  0,  1,  2  ;Dreieck 0  (Vorne)
Data.w  0,  2,  3  ;Dreieck 1
Data.w  4,  6,  5  ;Dreieck 2  (Hinten)
Data.w  4,  7,  6  ;Dreieck 3
Data.w  8, 10,  9  ;Dreieck 4  (Unten)
Data.w  8, 11, 10  ;Dreieck 5
Data.w 12, 14, 13  ;Dreieck 6  (Oben)
Data.w 12, 15, 14  ;Dreieck 7
Data.w 16, 17, 18  ;Dreieck 8  (Links)
Data.w 16, 18, 19  ;Dreieck 9   
Data.w 20, 21, 22  ;Dreieck 10 (Rechts)
Data.w 20, 22, 23  ;Dreieck 11
U_01: ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
   
Data.f   0/256, 170/256 ; Vertex 0 
Data.f  85/256, 170/256 ; Vertex 1
Data.f  85/256, 255/256 ; Vertex 2  
Data.f   0/256, 255/256 ; Vertex 3
   
Data.f 170/256,  85/256 ; Vertex 4 
Data.f 255/256,  85/256 ; Vertex 5
Data.f 255/256, 170/256 ; Vertex 6  
Data.f 170/256, 170/256 ; Vertex 7

Data.f  85/256,  85/256 ; Vertex 8 
Data.f 170/256,  85/256 ; Vertex 9
Data.f 170/256, 170/256 ; Vertex 10  
Data.f  85/256, 170/256 ; Vertex 11 
   
Data.f  85/256, 170/256 ; Vertex 12 
Data.f 170/256, 170/256 ; Vertex 13
Data.f 170/256, 255/256 ; Vertex 14  
Data.f  85/256, 255/256 ; Vertex 15 
   
Data.f 170/256, 170/256 ; Vertex 16 
Data.f 255/256, 170/256 ; Vertex 17
Data.f 255/256, 255/256 ; Vertex 18  
Data.f 170/256, 255/256 ; Vertex 19
   
Data.f   0/256,  85/256 ; Vertex 20 
Data.f  85/256,  85/256 ; Vertex 21
Data.f  85/256, 170/256 ; Vertex 22  
Data.f   0/256, 170/256 ; Vertex 23
EndDataSection 
 
 
 CreateMesh(0,100)
 
 SetMeshData(0, #PB_Mesh_Vertex,       ?V_01,   24) 
 SetMeshData(0, #PB_Mesh_Face,         ?T_01,   12)
 SetMeshData(0, #PB_Mesh_UVCoordinate, ?U_01,   24)

 
 Add3DArchive(".", #PB_3DArchive_FileSystem)
 CreateEntity(0, MeshID(0), CreateMaterial(0, LoadTexture(0, "wurfel.jpg")))

 EntityLocate(0, 0, 0, 20)
 
 ;- Hauptschleife
 Repeat
  
  RenderWorld()
  
;   StartDrawing(ScreenOutput())
;    FrontColor(RGB(255,255,255)) : BackColor(RGB(0,0,0))
;    DrawText(4, 3,"Position = " +Str(CameraX(0))+ " ; " +Str(CameraY(0))+ " ; " + Str(CameraZ(0)) + Space(10))
;    DrawText(4, 460,"Auf = Num8  |  Ab = Num2  |  Drehen = Strg rechts")
;   StopDrawing()
  
  FlipBuffers(2)
 
  ExamineKeyboard()
  If KeyboardPushed(#PB_Key_All)
   Zm = 0 : Xm = 0 : Ym = 0
   If KeyboardPushed(#PB_Key_Up)       : Zm = -2.1 : EndIf
   If KeyboardPushed(#PB_Key_Down)     : Zm =  2.1 : EndIf
   If KeyboardPushed(#PB_Key_Right)    : Xm =  2.1 : EndIf
   If KeyboardPushed(#PB_Key_Left)     : Xm = -2.1 : EndIf
   If KeyboardPushed(#PB_Key_Pad8)     : Ym =  2.1 : EndIf
   If KeyboardPushed(#PB_Key_Pad2)     : Ym = -2.1 : EndIf
   MoveCamera(0, Xm, Ym, Zm)

   If KeyboardPushed(#PB_Key_RightControl)
     ReleaseMouse(0)
     ExamineMouse()
     RotateCamera(0, -MouseDeltaX(), -MouseDeltaY(), 0)
     MouseLocate(320, 240)
   EndIf
  EndIf
  If KeyboardReleased(#PB_Key_RightControl) : ReleaseMouse(1) : EndIf
Until KeyboardPushed(#PB_Key_Escape) Or WindowEvent() = #PB_Event_CloseWindow
CloseScreen()
End

Verfasst: 27.10.2008 23:39
von Batze
Bei mir geht das 2D-Drawing. Allerdings nicht die Textur. Eventuell hat sich das Datenformat für das UV-Mapping geändert. Der Code ist ja schließlich noch für eine sehr alte OGRE-Version geschrieben. Schön dass er immer noch nützlich ist.

Verfasst: 27.10.2008 23:40
von Kaeru Gaman
2D auf nem 3D screen geht mit 4.3 nicht mehr, weil DX9 das nicht unterstützt.

Verfasst: 28.10.2008 00:19
von String
Hallo Batze
Hallo Kaeru Gaman

Danke für die Infos!
Ich dachte schon das mit dem 2D währe ein Fehler in PB 4.3.

Das sich das Datenformat für das UV-Mapping geändert hat,
ist zumindest eine logische Erklärung.
Dann muss ich wohl mal sehen,
ob ich das irgendwie hin bekomme.

Verfasst: 28.10.2008 00:23
von Kaeru Gaman
kannst du gut englisch?
im Internationalen Forum ist die letzten Wochen ne Menge diskutiert worden, wie man was mit 4.3 umsetzen kann.
auch 2D auf 3D und dynamische Texturen wurden mehrfach besprochen.

Verfasst: 28.10.2008 00:44
von String
Geht so mit meinen englisch Kenntnissen.
(Mehr schlecht als recht)
Aber ich schau mir das mal an.
Danke für den Tipp :allright:

Verfasst: 28.10.2008 21:41
von String
Nochmal Danke!
Wenn man das mit den Texturen erst einmal einigermaßen verstanden hat.
Ist es gar nicht mehr so schwierig.


Hallo Batze
Nicht böse sein hab mal deine Textur verändert und hier abgelegt.
Bild
Textur bitte umbenennen zu Cube.jpg
PB Code und Textur müssen sich im selben
Verzeichnis befinden.

Läuft mit PB 410 / 420 & 430

Code: Alles auswählen

InitKeyboard()
InitEngine3D()
InitSprite()
InitMouse()

OpenWindow(0, 50, 50, 640, 480, "3D - Würfel", #PB_Window_SystemMenu)
OpenWindowedScreen(WindowID(0), 0, 0, 640, 480, 0, 0, 0)

;- Kamera einstellen
CreateCamera(0,  0,  5, 100, 90)
CameraLocate(0, 33, 56, -66)
CameraLookAt(0, 10, 10, 15)

DataSection
  V_01:
  Data.f  00,  00,  00 ;Point 0 *
  Data.f  1,  1,  1 
  Data.f   0/256, 170/256 ; Vertex 0
  Data.f  32,  00,  00 ;Point 1 +
  Data.f  1,  1,  1 
  Data.f  85/256, 170/256 ; Vertex 1
  Data.f  32,  32,  00 ;Point 2 -
  Data.f  1,  1,  1 
  Data.f  85/256, 255/256 ; Vertex 2 
  Data.f  00,  32,  00 ;Point 3 /
  Data.f  1,  1,  1 
  Data.f   0/256, 255/256 ; Vertex 3
  Data.f  00,  00, -32 ;Point 4 !
  Data.f  1,  1,  1 
  Data.f 170/256,  85/256 ; Vertex 4
  Data.f  32,  00, -32 ;Point 5 ?
  Data.f  1,  1,  1 
  Data.f 255/256,  85/256 ; Vertex 5
  Data.f  32,  32, -32 ;Point 6 $
  Data.f  1,  1,  1 
  Data.f 255/256, 170/256 ; Vertex 6 
  Data.f  00,  32, -32 ;Point 7 %
  Data.f  1,  1,  1 
  Data.f 170/256, 170/256 ; Vertex 7
  Data.f  00,  00,  00 ;Point 8 *
  Data.f  1,  1,  1 
  Data.f  85/256,  85/256 ; Vertex 8
  Data.f  32,  00,  00 ;Point 9 +
  Data.f  1,  1,  1 
  Data.f 170/256,  85/256 ; Vertex 9
  Data.f  32,  00, -32 ;Point 10 ?
  Data.f  1,  1,  1 
  Data.f 170/256, 170/256 ; Vertex 10 
  Data.f  00,  00, -32 ;Point 11 !
  Data.f  1,  1,  1 
  Data.f  85/256, 170/256 ; Vertex 11
  Data.f  32,  32,  00 ;Point 12 -
  Data.f  1,  1,  1 
  Data.f  85/256, 170/256 ; Vertex 12
  Data.f  00,  32,  00 ;Point 13 /
  Data.f  1,  1,  1 
  Data.f 170/256, 170/256 ; Vertex 13
  Data.f  00,  32, -32 ;Point 14 %
  Data.f  1,  1,  1 
  Data.f 170/256, 255/256 ; Vertex 14 
  Data.f  32,  32, -32 ;Point 15 $
  Data.f  1,  1,  1 
  Data.f  85/256, 255/256 ; Vertex 15
  Data.f  00,  00,  00 ;Point 16 *
  Data.f  1,  1,  1 
  Data.f 170/256, 170/256 ; Vertex 16
  Data.f  00,  32,  00 ;Point 17 /
  Data.f  1,  1,  1 
  Data.f 255/256, 170/256 ; Vertex 17
  Data.f  00,  32, -32 ;Point 18 %
  Data.f  1,  1,  1 
  Data.f 255/256, 255/256 ; Vertex 18 
  Data.f  00,  00, -32 ;Point 19 !
  Data.f  1,  1,  1 
  Data.f 170/256, 255/256 ; Vertex 19 
  Data.f  32,  32,  00 ;Point 20 -
  Data.f  1,  1,  1 
  Data.f   0/256,  85/256 ; Vertex 20
  Data.f  32,  00,  00 ;Point 21 +
  Data.f  1,  1,  1 
  Data.f  85/256,  85/256 ; Vertex 21
  Data.f  32,  00, -32 ;Point 22 ?
  Data.f  1,  1,  1 
  Data.f  85/256, 170/256 ; Vertex 22
  Data.f  32,  32, -32 ;Point 23 $
  Data.f  1,  1,  1 
  Data.f   0/256, 170/256 ; Vertex 23
  T_01:  ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  Data.w  0,  1,  2  ;Dreieck 0  (Vorne)
  Data.w  0,  2,  3  ;Dreieck 1
  Data.w  4,  6,  5  ;Dreieck 2  (Hinten)
  Data.w  4,  7,  6  ;Dreieck 3
  Data.w  8, 10,  9  ;Dreieck 4  (Unten)
  Data.w  8, 11, 10  ;Dreieck 5
  Data.w 12, 14, 13  ;Dreieck 6  (Oben)
  Data.w 12, 15, 14  ;Dreieck 7
  Data.w 16, 17, 18  ;Dreieck 8  (Links)
  Data.w 16, 18, 19  ;Dreieck 9   
  Data.w 20, 21, 22  ;Dreieck 10 (Rechts)
  Data.w 20, 22, 23  ;Dreieck 11
EndDataSection
 
 CreateMesh(0,100)
 SetMeshData(0, #PB_Mesh_Vertex |#PB_Mesh_Normal |#PB_Mesh_UVCoordinate  ,   ?V_01,   24)
 SetMeshData(0, #PB_Mesh_Face,         ?T_01,   12)
;======================================================
 CompilerPfad$ = #PB_Compiler_Home +"\Examples\Sources\Data\"
 Add3DArchive(".", #PB_3DArchive_FileSystem)
 Add3DArchive(CompilerPfad$, #PB_3DArchive_FileSystem)
;======================================================  
 If FileSize("Cube.jpg") > 0
   CreateEntity(0, MeshID(0), CreateMaterial(0, LoadTexture(0, "Cube.jpg")))
 Else
   If FileSize(CompilerPfad$ + "terrain_texture.jpg") > 0
      CreateEntity(0, MeshID(0), CreateMaterial(0, LoadTexture(0, "terrain_texture.jpg"))) 
   Else
      Debug "Die Bilddatei fehlt"
      End
   EndIf
 EndIf
;======================================================
 EntityLocate(0, -10, -10, 50)  
;- Hauptschleife
 Repeat
  
;======================================================
;-PB v430
;  RotateEntity(0, 1, 1, 1,#PB_Relative)
;======================================================
;-PB v410 & v420
  RotateEntity(0, a, a, a) : a + 1
;======================================================
 
  RenderWorld()
  FlipBuffers(2)
  ExamineKeyboard()
  If KeyboardPushed(#PB_Key_All)
   Zm = 0 : Xm = 0 : Ym = 0
   If KeyboardPushed(#PB_Key_Up)       : Zm = -2.1 : EndIf
   If KeyboardPushed(#PB_Key_Down)     : Zm =  2.1 : EndIf
   If KeyboardPushed(#PB_Key_Right)    : Xm =  2.1 : EndIf
   If KeyboardPushed(#PB_Key_Left)     : Xm = -2.1 : EndIf
   If KeyboardPushed(#PB_Key_Pad8)     : Ym =  2.1 : EndIf
   If KeyboardPushed(#PB_Key_Pad2)     : Ym = -2.1 : EndIf
   MoveCamera(0, Xm, Ym, Zm)
   If KeyboardPushed(#PB_Key_RightControl)
     ReleaseMouse(0)
     ExamineMouse()
     RotateCamera(0, -MouseDeltaX(), -MouseDeltaY(), 0)
     MouseLocate(320, 240)
   EndIf
  EndIf
  If KeyboardReleased(#PB_Key_RightControl) : ReleaseMouse(1) : EndIf
Until KeyboardPushed(#PB_Key_Escape) Or WindowEvent() = #PB_Event_CloseWindow
CloseScreen()
End