Grundlagen zur 3D-Programmierung
Grundlagen zur 3D-Programmierung
Hallo zusammen,
ich bin auf der Suche nach einem Tutorial um die Grundlagen der 3d-Engine von Purebasic zu verstehen.
Was ich bisher im Netz gefunden habe ist, wie man Rechtecke erstellt und mit einer Textur belegt.
Was mich interessiert ist:
wie baue ich dreidimensionale Objekte und wie werden die entstehenden Flächen richtig mit Farben, oder auch mit Texturen belegt? Gibt es da denn nicht irgendwo eine nette Schritt für Schritt Anleitung. Mir scheint, ich nutze die falschen Schlüsselworte beim Suchen.
Ich möchte auch keine Landschaften mit Blender oder der gleichen erzeugen sondern wirklich Punktkoordinaten definieren, vertexes anlegen, Flächen Bilden und dann mit Farben oder Texturen belegen.
Ich würde mir selbst jetz sowieso eine Anleitung scheiben, zum besseren Verständnis und späterem Nachschlagen. Ich würde sie auch online stellen, aber hat das nicht evtl. schon jemend gemacht?
Ich hoffe auf Eure Hilfe!
ich bin auf der Suche nach einem Tutorial um die Grundlagen der 3d-Engine von Purebasic zu verstehen.
Was ich bisher im Netz gefunden habe ist, wie man Rechtecke erstellt und mit einer Textur belegt.
Was mich interessiert ist:
wie baue ich dreidimensionale Objekte und wie werden die entstehenden Flächen richtig mit Farben, oder auch mit Texturen belegt? Gibt es da denn nicht irgendwo eine nette Schritt für Schritt Anleitung. Mir scheint, ich nutze die falschen Schlüsselworte beim Suchen.
Ich möchte auch keine Landschaften mit Blender oder der gleichen erzeugen sondern wirklich Punktkoordinaten definieren, vertexes anlegen, Flächen Bilden und dann mit Farben oder Texturen belegen.
Ich würde mir selbst jetz sowieso eine Anleitung scheiben, zum besseren Verständnis und späterem Nachschlagen. Ich würde sie auch online stellen, aber hat das nicht evtl. schon jemend gemacht?
Ich hoffe auf Eure Hilfe!
Re: Grundlagen zur 3D-Programmierung
hmm .. Anleitung hab ich nicht
aber ein schönes Beipiel wo fast alles drin vorkommt bis auf die Camerabewegung
ff von hier und den darauf folgenden.
der rennt auch unter pb4.51 .. aber vorsicht .. das Ding macht auf Dauer krank im Kopf
aber ein schönes Beipiel wo fast alles drin vorkommt bis auf die Camerabewegung
ff von hier und den darauf folgenden.
der rennt auch unter pb4.51 .. aber vorsicht .. das Ding macht auf Dauer krank im Kopf
Code: Alles auswählen
; Comtois 28/03/06
; PB4.0 Beta 7
;
; Updated/Formated by Fluid Byte
; PB V4.30F - March.24,2009
EnableExplicit
Declare CreateSphere(M,P)
Declare UpdateMesh()
#_SIZEVERT = 36
#_SIZETRIS = 6
#FULLSCREEN = 0
Structure VECTOR
X.f
Y.f
Z.f
EndStructure
Structure VERTEX
X.f
Y.f
Z.f
NX.f
NY.f
NZ.f
Color.l
U.f
V.f
EndStructure
Structure TRIANGLE
V1.w
V2.w
V3.w
EndStructure
Macro CALC_NORMALS
*PtrV\NX = *PtrV\X
*PtrV\NY = *PtrV\Y
*PtrV\NZ = *PtrV\Z
EndMacro
Global *VBuffer, *IBuffer
Global Meridian = 50, Parallele = 50, PasLength = 4, Length
Define EventID, i, NbSommet, CameraMode, Angle.f, Pas.f = 0.5
InitEngine3D() : InitSprite() : InitKeyboard()
Add3DArchive(GetTemporaryDirectory(),#PB_3DArchive_FileSystem)
Add3DArchive(#PB_Compiler_Home + "Examples\Sources\Data\",#PB_3DArchive_FileSystem)
If #FULLSCREEN
OpenScreen(800,600,32,"Sphere 3D")
Else
OpenWindow(0,0,0,800,600,"Sphere 3D",#PB_Window_SystemMenu | 1)
OpenWindowedScreen(WindowID(0),0,0,800,600,0,0,0)
EndIf
;-Texture
CreateImage(0,128,128)
StartDrawing(ImageOutput(0))
For i = 0 To 127 Step 4
Box(0,i,ImageWidth(0),2,RGB(255,255,255))
Box(0,i + 2,ImageWidth(0),2,RGB(0,0,155))
Next i
StopDrawing()
SaveImage(0,GetTemporaryDirectory() + "temp.bmp") : FreeImage(0)
;-Material
CreateMaterial(0,LoadTexture(0,"temp.bmp"))
RotateMaterial(0,0.1,#PB_Material_Animated)
;-Mesh
CreateSphere(Meridian,Parallele)
;-Entity
CreateEntity(0,MeshID(0),MaterialID(0))
ScaleEntity(0,60,60,60)
;-Camera
CreateCamera(0,0,0,100,100)
MoveCamera(0,0,0,-200)
CameraLookAt(0,EntityX(0),EntityY(0),EntityZ(0))
;-Light
AmbientColor(RGB(105, 105, 105))
CreateLight(0, RGB(255, 255, 55), EntityX(0) + 150, EntityY(0) , EntityZ(0))
CreateLight(1, RGB( 55, 255, 255), EntityX(0) - 150, EntityY(0) , EntityZ(0))
CreateLight(2, RGB( 55, 55, 255), EntityX(0) , EntityY(0) + 150, EntityZ(0))
CreateLight(3, RGB(255, 55, 255), EntityX(0) , EntityY(0) - 150, EntityZ(0))
; ----------------------------------------------------------------------------------------------------
; MAINLOOP
; ----------------------------------------------------------------------------------------------------
Repeat
If #FULLSCREEN = 0
Repeat
EventID = WindowEvent()
Select EventID
Case #PB_Event_CloseWindow : End
EndSelect
Until EventID = 0
EndIf
Angle + Pas
RotateEntity(0, Angle, Angle,Angle)
If PasLength > 0 : UpdateMesh() : EndIf
If ExamineKeyboard()
If KeyboardReleased(#PB_Key_F1)
CameraMode = 1 - CameraMode
CameraRenderMode(0, CameraMode)
EndIf
EndIf
RenderWorld()
FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape)
; ----------------------------------------------------------------------------------------------------
; FUNCTIONS
; ----------------------------------------------------------------------------------------------------
Procedure CreateSphere(M,P)
; M = Meridian
; P = Parallele
; The radius is 1. Front to remove it later, it's just for the demo.
If M < 3 Or P < 2 : ProcedureReturn 0 : EndIf
Protected Normale.VECTOR, NbSommet, i, j, Theta.f, cTheta.f, sTheta.f
Protected Alpha.f, cAlpha.f, sAlpha.f, *PtrV.VERTEX,*PtrV2.VERTEX, *PtrF.TRIANGLE, NbTriangle
NbSommet = 1 + ((m + 1) * p) + 2 * m -1
*VBuffer = AllocateMemory(#_SIZEVERT * Nbsommet)
For i = 0 To m
theta.f = i * #PI * 2.0 / m
ctheta.f = Cos(theta)
stheta.f = Sin(theta)
For j = 1 To p
alpha.f = j * #PI / (p + 1)
calpha.f = Cos(alpha)
salpha.f =Sin(alpha)
*PtrV.Vertex = *VBuffer + #_SIZEVERT * ((i * p) + (j - 1))
*PtrV\x = salpha * ctheta
*PtrV\z = salpha * stheta
*PtrV\y = calpha
*PtrV\u = Theta / (2.0 * #PI)
*PtrV\v = alpha / #PI
CALC_NORMALS
Next j
Next i
For i = 0 To m -1
theta.f = i / m
*PtrV.Vertex = *VBuffer + #_SIZEVERT * (((m + 1) * p)+i)
*PtrV\x = 0
*PtrV\y = -1
*PtrV\z = 0
*PtrV\u = Theta + 1/(m*2)
*PtrV\v = 1
CALC_NORMALS
Next i
For i = 0 To m -1
theta.f = i / m
*PtrV.Vertex = *VBuffer + #_SIZEVERT * (((m + 1) * p)+m+i)
;Pole nord
*PtrV\x = 0
*PtrV\y = 1
*PtrV\z = 0
*PtrV\u = Theta + 1/(m*2)
*PtrV\v = 0
CALC_NORMALS
Next i
; Les facettes
NbTriangle = 4 * M * P
*IBuffer = AllocateMemory(#_SIZETRIS * NbTriangle)
*PtrF = *IBuffer
For i = 0 To m - 1
For j = 1 To p - 1
*PtrF\V1=((i + 1) * p) + j
*PtrF\V2=((i + 1) * p) + (j - 1)
*PtrF\V3=(i * p) + (j - 1)
*PtrF + #_SIZETRIS
*PtrF\V3=((i + 1) * p) + j ;Recto
*PtrF\V2=((i + 1) * p) + (j - 1) ;Recto
*PtrF\V1=(i * p) + (j - 1) ;Recto
*PtrF + #_SIZETRIS
*PtrF\V1 = i * p + j
*PtrF\V2=((i + 1) * p) + j
*PtrF\V3=(i * p) + (j - 1)
*PtrF + #_SIZETRIS
*PtrF\V3=i * p + j ;Recto
*PtrF\V2=((i + 1) * p) + j ;Recto
*PtrF\V1 = (i * p) + (j - 1) ;Recto
*PtrF + #_SIZETRIS
Next j
*PtrF\V3=((m + 1) * p)+i
*PtrF\V2=i * p + (p - 1)
*PtrF\V1=(i + 1) * p + (p - 1)
*PtrF + #_SIZETRIS
*PtrF\V1 = ((m + 1) * p)+i ;Recto
*PtrF\V2 = i * p + (p - 1) ;Recto
*PtrF\V3 = (i + 1) * p + (p - 1) ;Recto
*PtrF + #_SIZETRIS
*PtrF\V3=(m + 1) * p +m+i
*PtrF\V2=(i + 1) * p
*PtrF\V1 = i * p
*PtrF + #_SIZETRIS
*PtrF\V1 = ((m + 1) * p) +m+i ;Recto
*PtrF\V2=(i + 1) * p ;Recto
*PtrF\V3=i * p ;Recto
*PtrF + #_SIZETRIS
Next i
If CreateMesh(0,100)
Protected Flag = #PB_Mesh_Vertex | #PB_Mesh_Normal | #PB_Mesh_UVCoordinate | #PB_Mesh_Color
SetMeshData(0,Flag,*VBuffer,NbSommet)
SetMeshData(0,#PB_Mesh_Face,*IBuffer,NbTriangle)
ProcedureReturn 1
EndIf
ProcedureReturn 0
EndProcedure
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Procedure UpdateMesh()
Protected NbTriangle = 4 * Meridian * Parallele
Length + PasLength
If Length >= NbTriangle
PasLength = 0
Length = Nbtriangle
EndIf
SetMeshData(0,#PB_Mesh_Face,*IBuffer,Length)
EndProcedure
pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
-
super_castle
- Beiträge: 557
- Registriert: 29.11.2005 15:05
Re: Grundlagen zur 3D-Programmierung
Hmmm..., sieht gut aus.
Kann man die Grafik nicht irgendwie direkt auftragen ohen den Umweg speichern/laden?
Ekrlär mir das oben einmal .
Gruss
Kann man die Grafik nicht irgendwie direkt auftragen ohen den Umweg speichern/laden?
Code: Alles auswählen
Protected Flag = #PB_Mesh_Vertex | #PB_Mesh_Normal | #PB_Mesh_UVCoordinate | #PB_Mesh_Color
SetMeshData(0,Flag,*VBuffer,NbSommet)
SetMeshData(0,#PB_Mesh_Face,*IBuffer,NbTriangle)
Gruss
Re: Grundlagen zur 3D-Programmierung
wie erklären ? Steht doch da
setmeshdata ist zur Übergabe von Daten an das Mesh
und was da übergeben wird steht im Code
das zweite setmeshdata kann eventuell raus . auskommentieren ändert da nicht allzuviel am Ergebnis
ist nicht mein code ..der ist aus dem englishen forum , wie oben angegeben
setmeshdata ist zur Übergabe von Daten an das Mesh
und was da übergeben wird steht im Code
das zweite setmeshdata kann eventuell raus . auskommentieren ändert da nicht allzuviel am Ergebnis
ist nicht mein code ..der ist aus dem englishen forum , wie oben angegeben
pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Re: Grundlagen zur 3D-Programmierung
Damit der Code bei mir läuft(PB 4.00), musste ich das machen, falls ich dich richtig verstanden habe.super_castle hat geschrieben:Kann man die Grafik nicht irgendwie direkt auftragen ohen den Umweg speichern/laden?
Der TextureOutput()-Befehl mit dem das möglich ist wurde aber in einer der nachfolgenden PB-Versionen entfernt.
http://www.purebasic.fr/english/viewtop ... 23#p260623
Code: Alles auswählen
;-Texture
CreateTexture(0,128,128)
StartDrawing(TextureOutput(0))
For i = 0 To 127 Step 4
Box(0,i,TextureWidth(0),2,RGB(255,255,255))
Box(0,i + 2,TextureWidth(0),2,RGB(0,0,155))
Next i
StopDrawing()
;SaveImage(0,GetTemporaryDirectory() + "temp.bmp") : FreeImage(0)
;-Material
CreateMaterial(0,TextureID(0))PB 4.00 | Windows XP Home SP3
-
super_castle
- Beiträge: 557
- Registriert: 29.11.2005 15:05
Re: Grundlagen zur 3D-Programmierung
Oh...,man..., welche Schnappsnase kam denn auf diese krumme Idee, diesen elementaren Befehl zu entfernen.
Na, dann. Hoffentlich lassen die uns noch einpaar 3D-Befehle übrig...
Gruss
Na, dann. Hoffentlich lassen die uns noch einpaar 3D-Befehle übrig...
Gruss
Re: Grundlagen zur 3D-Programmierung
Es fehlt eigentlich nicht wirklich was (außer vieleicht sowas wie Catchtexture())
und elementar ist das ganze auch kaum, da man mit pb direkt wohl eher ganz selten
3D-Modelle direkt basteln wird. und wenn doch dann geht's so wie oben.
und elementar ist das ganze auch kaum, da man mit pb direkt wohl eher ganz selten
3D-Modelle direkt basteln wird. und wenn doch dann geht's so wie oben.
pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
-
super_castle
- Beiträge: 557
- Registriert: 29.11.2005 15:05
Re: Grundlagen zur 3D-Programmierung
Hmmm..., Purebasic ist keine Spielconsole.da man mit pb direkt wohl eher ganz selten
3D-Modelle direkt basteln wird. und wenn doch dann geht's so wie oben.
Wer mit 3D in Purebasic etwas macht, der möchte auch selbständig Modelle erstellen mit Purebasic, ansonsten kann man sich die X_Box kaufen.
Einen solchen Befehl rauszunehmen halte ich für Unsinn, weil er elementar ja schon Funktionsfähig eingebaut war.
Gruss
Re: Grundlagen zur 3D-Programmierung
Danke erst einmal für das Beispiel, ich hatte in der Zwischenzeit noch etwas anderes gefunden.
Ein Beispiel mit drei rotirenden Quadraten.
Ich hatte vor dies Beispiel abzuwandeln um einen rotierenden Würfel zu erhalten. Leider klappt das noch nicht. Mein Problem ist fehendes Verständnis für die Angabe der Vertexkoordinaten, denke ich.
Am liebsten würde ich auch Eckpunkten einen Farbwert zuweisen, um mir Farbverläufe zu erzeugen, wie in den Beispeilen hier.
Hier ist noch mein aktueller Experimentiercode:
Ein Beispiel mit drei rotirenden Quadraten.
Ich hatte vor dies Beispiel abzuwandeln um einen rotierenden Würfel zu erhalten. Leider klappt das noch nicht. Mein Problem ist fehendes Verständnis für die Angabe der Vertexkoordinaten, denke ich.
Am liebsten würde ich auch Eckpunkten einen Farbwert zuweisen, um mir Farbverläufe zu erzeugen, wie in den Beispeilen hier.
Hier ist noch mein aktueller Experimentiercode:
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("data", #PB_3DArchive_FileSystem)
LoadTexture(0,"clouds.jpg")
CreateMaterial(0, TextureID(0))
; Viereck 1
;CreateMesh(1,30)
;SetMeshData(1,#PB_Mesh_Vertex ,?Ecken , 4) ; 4 Ecken
;SetMeshData(1,#PB_Mesh_Face ,?Viereck_1 , 2) ; 2 Dreicke
;SetMeshData(1,#PB_Mesh_UVCoordinate ,?TexturKoordinaten, 4)
;CreateEntity(1, MeshID(1), MaterialID(0))
CreateMesh(2,30)
SetMeshData(2,#PB_Mesh_Vertex ,?Ecken , 8) ; n Ecken
SetMeshData(2,#PB_Mesh_Face ,?Objekt_1 , 4) ; n Dreiecke
SetMeshData(2,#PB_Mesh_UVCoordinate ,?TexturKoordinaten, 8)
CreateEntity(2, MeshID(2), MaterialID(0))
; Viereck 2
;CreateMesh(2,30)
;SetMeshData(2,#PB_Mesh_Vertex ,?Ecken , 4) ; 4 Ecken
;SetMeshData(2,#PB_Mesh_Face ,?Viereck_2 , 2) ; 2 Dreiecke
;SetMeshData(2,#PB_Mesh_UVCoordinate ,?TexturKoordinaten, 4)
;CreateEntity(2, MeshID(2), MaterialID(0))
; Viereck 3
;CreateMesh(3,30)
;SetMeshData(3,#PB_Mesh_Vertex ,?Ecken , 4) ; 4 Ecken
;SetMeshData(3,#PB_Mesh_Face ,?Viereck_3 , 4) ; 4 Dreiecke (Vorder- und Rueckseite)
;SetMeshData(3,#PB_Mesh_UVCoordinate ,?TexturKoordinaten, 4)
;CreateEntity(3, MeshID(3), MaterialID(0))
;MoveEntity(1,-3,0,0)
;MoveEntity(3, 3,0,0)
CreateCamera(0, 0, 0, 100, 100)
CameraLocate(0,0,0,10)
Repeat
ClearScreen(RGB(0,0,0) )
ExamineKeyboard()
Select WindowEvent()
Case #PB_Event_CloseWindow
Quit = #True
EndSelect
rot+1
If rot>=360 : rot=0 : EndIf
;RotateEntity(1, rot, rot, 0)
RotateEntity(2, rot, 0, rot)
;RotateEntity(3, rot, rot, 0)
RenderWorld()
FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape) Or Quit
Else
MessageRequester("Error", "Cant init DirectX 3D Engine",0)
EndIf
End
DataSection
Ecken:
Data.f 0, 0, 0 ; Ecke 0 3-----2 7-----6
Data.f 2, 0, 0 ; Ecke 1 | . | /| /|
Data.f 2, 2, 0 ; Ecke 2 | | 3-+---2 |
Data.f 0, 2, 0 ; Ecke 3 0-----1 | 4---+-5
Data.f 0, 0, 2 ; Ecke 4 7-----6 |/ |/
Data.f 2, 0, 2 ; Ecke 5 | . | 0-----1
Data.f 2, 2, 2 ; Ecke 6 | |
Data.f 0, 2, 2 ; Ecke 7 4-----5
TexturKoordinaten:
Data.f 0.0, 0.0 ; Vertex 0
Data.f 2.0, 0.0 ; Vertex 1
Data.f 2.0, 2.0 ; Vertex 2
Data.f 0.0, 2.0 ; Vertex 3
Data.f 0.0, 0.0 ; Vertex 4
Data.f 2.0, 0.0 ; Vertex 5
Data.f 2.0, 2.0 ; Vertex 6
Data.f 0.0, 2.0 ; Vertex 7
Objekt_1:
Data.w 0, 1, 2 ; Dreieck 1 besteht aus den Ecken 0, 1 und 2 // Vorderseite
Data.w 2, 3, 0 ; Dreieck 2 besteht aus den Ecken 2, 3 und 0
Data.w 4, 5, 6 ; Dreieck 1 besteht aus den Ecken 4, 5 und 6 // Rückseite
Data.w 4, 7, 6 ; Dreieck 2 besteht aus den Ecken 6, 7 und 4
Data.w 0, 4, 1 ; Dreieck 1 besteht aus den Ecken 0, 1 und 5 // Unterseite
Data.w 4, 5, 1 ; Dreieck 2 besteht aus den Ecken 0, 4 und 5
Data.w 7, 3, 2 ; Dreieck 1 besteht aus den Ecken 3, 2 und 6 // Oberseite
Data.w 7, 6, 2 ; Dreieck 2 besteht aus den Ecken 3, 7 und 6
Data.w 3, 0, 4 ; Dreieck 1 besteht aus den Ecken 0, 1 und 5 // Links
Data.w 3, 7, 4 ; Dreieck 2 besteht aus den Ecken 0, 4 und 5
Data.w 1, 2, 6 ; Dreieck 1 besteht aus den Ecken 3, 2 und 6 // Rechts
Data.w 1, 5, 6 ; Dreieck 2 besteht aus den Ecken 3, 7 und 6
Viereck_1:
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
Viereck_2:
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
Viereck_3:
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
; IDE Options = PureBasic v4.02 (Windows - x86)
; Folding = -
; DisableDebugger
- mpz
- Beiträge: 505
- Registriert: 14.06.2005 15:53
- Computerausstattung: Win 11 Pro, 48 GB Ram, Intel I7 CPU und RX4070 Grafikkarte, PB (4/5) 6.12LT
- Wohnort: Berlin, Tempelhof
Re: Grundlagen zur 3D-Programmierung
Hi scoty,
Du must hier eigene UV Koordinaten für die Vertexe Deines Würfels erstellen. Wenn Du eine Seite des Würfels mit 4 Vertexe hast beginnt die UV Koodinate mit 0,0 - 0,1 - 1,0 - 1,1. Auf dieser Fläche wird die Textur "geklebt". Man kann aber auch tricksen indem man einer Seite 1/6 der Textur über UV Koordinaten übergibst (0,0 - 0,0.33 - 0,0.5 -0.33,0.5) und damit eine Textur, die in 6 Teilen unterteilt wird, einfcah auf den Würfel klebst. Ein fertiges Beispiel mit einem 6 seitigen Würfel und einer selbst erstellten PB Image Datei findest Du bei meiner 3D Engine mit dem Beispiel: MP_Texturkoordinaten_Änderung_6_Seiten.pb. Es ist sicher möglich dieses Beispiel sinnhaft auch für Ogre umzuändern. Die Vertex Argumente sind im 3D Bereich quasi immer gleich ..
MP3D Engine
http://forums.purebasic.com/german/view ... 10&t=21483

mfg.
Michael
Du must hier eigene UV Koordinaten für die Vertexe Deines Würfels erstellen. Wenn Du eine Seite des Würfels mit 4 Vertexe hast beginnt die UV Koodinate mit 0,0 - 0,1 - 1,0 - 1,1. Auf dieser Fläche wird die Textur "geklebt". Man kann aber auch tricksen indem man einer Seite 1/6 der Textur über UV Koordinaten übergibst (0,0 - 0,0.33 - 0,0.5 -0.33,0.5) und damit eine Textur, die in 6 Teilen unterteilt wird, einfcah auf den Würfel klebst. Ein fertiges Beispiel mit einem 6 seitigen Würfel und einer selbst erstellten PB Image Datei findest Du bei meiner 3D Engine mit dem Beispiel: MP_Texturkoordinaten_Änderung_6_Seiten.pb. Es ist sicher möglich dieses Beispiel sinnhaft auch für Ogre umzuändern. Die Vertex Argumente sind im 3D Bereich quasi immer gleich ..
MP3D Engine
http://forums.purebasic.com/german/view ... 10&t=21483

mfg.
Michael
Working on
- LibSGD - MP3D Engine - 