Wie Du siehst nicht, da ja nur der Zeiger auf die Mesh-Daten neu gesetzt wird.
In diesem Fall mit der Leertaste. Steuerung der Kamera: a d w s und Maus.
Der Code läuft bei mir unter PureBasic 4.40 Beta 5 im 64bit Vista.
Mag sein dass es auch ein 3D-Format gibt, das mehrere UV-Maps unterstützt.
Gesehen hab ich aber bis dato noch keines.
letztendlich davon abhängig was man machen möchte.
Wenn letzteres nicht geht muss man denn wohl die Textur anpassen.
Also mit Purebasic wirst Du Dich wohl mit einer UV-Map abfinden müssen.
Code: Alles auswählen
If InitEngine3D() And InitSprite() And InitKeyboard() And InitMouse()
Global hwnd = OpenWindow(#PB_Any, 0, 0, 1024, 768, "WindowedScreen3D", #PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget|#PB_Window_SizeGadget|#PB_Window_ScreenCentered)
If hwnd
If OpenWindowedScreen(WindowID(hwnd), 0, 0, 1024, 768, 1, 0, 0)
Else
MessageBox_(0, "OpenWindowedScreen() failed!", "ERROR", #MB_ICONERROR)
End
EndIf
Else
MessageBox_(0, "OpenWindow() failed!", "ERROR", #MB_ICONERROR)
End
EndIf
Else
MessageBox_(0, "InitEngine3D() Or InitSprite() Or InitKeyboard() Or InitMouse() failed!", "ERROR", #MB_ICONERROR)
End
EndIf
;Add3DArchive("irgendein Pfad zur Textur", #PB_3DArchive_FileSystem)
mymesh = CreateMesh(#PB_Any, 1)
SetMeshData(mymesh, #PB_Mesh_Vertex | #PB_Mesh_Normal | #PB_Mesh_UVCoordinate, ?VertexID, 4)
SetMeshData(mymesh, #PB_Mesh_Face, ?FaceID, 2)
;mytextur = LoadTexture(#PB_Any, "irgendeine Textur.tga")
;mymaterial = CreateMaterial(#PB_Any, TextureID(mytextur))
myentity = CreateEntity(#PB_Any, MeshID(mymesh), 0); 0 = MaterialID(mymaterial)
mylight = CreateLight(#PB_Any, RGB(255, 255, 255))
LightLocate(mylight, x, 200, 200)
mycamera = CreateCamera(#PB_Any, 0, 0, 100, 100)
CameraLocate(mycamera, 0, 0, 300)
Repeat
If ExamineKeyboard()
If KeyboardPushed(#PB_Key_A)
KeyX.f = -2
ElseIf KeyboardPushed(#PB_Key_D)
KeyX.f = 2
Else
KeyX.f = 0
EndIf
If KeyboardPushed(#PB_Key_W)
KeyY.f = -2
ElseIf KeyboardPushed(#PB_Key_S)
KeyY.f = 2
Else
KeyY.f = 0
EndIf
If KeyboardReleased(#PB_Key_Space)
If Paused = #False
Paused = #True
SetMeshData(mymesh, #PB_Mesh_Vertex | #PB_Mesh_Normal | #PB_Mesh_UVCoordinate, ?VertexIDnew, 4)
Else
Paused = #False
SetMeshData(mymesh, #PB_Mesh_Vertex | #PB_Mesh_Normal | #PB_Mesh_UVCoordinate, ?VertexID, 4)
EndIf
EndIf
EndIf
If ReleaseMouse = 0
If ExamineMouse()
MouseX.f = -MouseDeltaX()/10
MouseY.f = -MouseDeltaY()/10
EndIf
EndIf
RotateCamera(mycamera, MouseY.f, MouseX.f, 0, #PB_Relative)
MoveCamera(mycamera, KeyX.f, 0, KeyY.f)
RenderWorld()
FlipBuffers()
If StartDrawing(WindowOutput(hwnd))
BackColor(RGB(0, 0, 0))
FrontColor(RGB(255, 255, 255))
DrawText(0, 0, StrF(Engine3DFrameRate(#PB_Engine3D_Current), 1)+" FPS")
DrawText(0, 15, Str(CountRenderedTriangles())+" Triangles")
DrawText(0, 30, Str(WindowWidth(hwnd)))
DrawText(0, 45, Str(WindowHeight(hwnd)))
StopDrawing()
EndIf
Event = WindowEvent()
If Event = 514
ReleaseMouse = 0
ReleaseMouse(0)
ElseIf Event = 517
MouseX.f = 0
MouseY.f = 0
ReleaseMouse = 1
ReleaseMouse(1)
ElseIf Event = #PB_Event_CloseWindow Or KeyboardReleased(#PB_Key_Escape)
End
EndIf
If GetWindowState(hwnd) = #PB_Window_Minimize
Delay(16)
EndIf
ForEver
DataSection
VertexID:
;Data.f x, y, z, Nx, Ny, Nz, U, V
Data.f -100, 100, 0, 0, 0, -1, 0, 0
Data.f -100, 0, 0, 0, 0, -1, 0, 1
Data.f 100, 0, 0, 0, 0, -1, 1, 1
Data.f 100, 100, 0, 0, 0, -1, 1, 0
FaceID:
Data.w 0, 1, 2
Data.w 0, 2, 3
VertexIDnew:
Data.f -150, 100, 0, 0, 0, -1, 0, 0
Data.f -100, 0, 0, 0, 0, -1, 0, 1
Data.f 100, 0, 0, 0, 0, -1, 1, 1
Data.f 150, 100, 0, 0, 0, -1, 1, 0
EndDataSection