Bin ziemlich unerfahren, was 3D Engines angeht, denke aber das es Sinn machen würde mehrere UV's zu erlauben. Denn man kann ja schliesslich auch mehrere Texturen auf ein Material legen. Da wäre es doch prima, wenn jeder Materiallayer seine eigene UV-Map hätte, oder etwa nicht ?!!? Auch stört es mich,dass zum Beispiel beim Terrain nur 2 Layer möglich sind: Der erste Layer ist die Grundtextur und der zweite ja der Detaillayer, der auf der Grundtextur ständig wiederholt wird. Ich hätte es aber gerne andersherum. Die Grundtextur sollte sich wiederholen (z.B. für Gras) und es sollte möglich sein andere Layer noch hinzuzufügen um das Terrain detailreicher zu gestalten (Strassen, Wege etc.).
Aber vielleicht liege ich da auch falsch.... (errare humanum est)
UV Koordinaten
Re: UV Koordinaten
Repeat
PureBasic
ForEver
PureBasic
ForEver
Re: UV Koordinaten
Wie Du siehst nicht, da ja nur der Zeiger auf die Mesh-Daten neu gesetzt wird.Aber trotzdem... Für jede Änderung musst du eine neue Entity erstellen. (Oder nicht?)
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.
@Darie
Mag sein dass es auch ein 3D-Format gibt, das mehrere UV-Maps unterstützt.
Gesehen hab ich aber bis dato noch keines.
Ob man nun die Textur der UV-Map anpasst oder die UV-Map der Textur ist
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