3D Programmierung
- unix
- Beiträge: 361
- Registriert: 15.02.2005 19:25
- Wohnort: Zwischen Coburg und Bamberg :-)
- Kontaktdaten:
3D Programmierung
Ich hab jetzt ma ne sau dumme Frage:
Wie kann man am besten 3D Programmierung in PB lernen.
da ich 0 Ahnung habe aber 100% Interesse hab, explodier ich gleich, da ich selbst beim Googlen nichts gutes gefunden habe das funktioniert.
Nun bitte ich als Kamarat und Kolege um HILFEE !!!
Danke!
MfG
Unix
Wie kann man am besten 3D Programmierung in PB lernen.
da ich 0 Ahnung habe aber 100% Interesse hab, explodier ich gleich, da ich selbst beim Googlen nichts gutes gefunden habe das funktioniert.
Nun bitte ich als Kamarat und Kolege um HILFEE !!!
Danke!
MfG
Unix
- Green Snake
- Beiträge: 1394
- Registriert: 22.02.2005 19:08
hallo
na, bist du dem auch verfallen? willkommen im klub, ich auch
ich kann dir nichthelfen, nur ein par tipps geben
1. es ist sch*** schwer. wenn du nicht 150% intresse hast, würde ich nicht anfangen.
2. tutorials oder sonst was gibts nicht.
die einzige hilfe ist die pb hilfe und pb beispiele.
du musst halt ein wenig probieren, was die einzelnen befehle bewirken.
das einzig was nicht gut ist ist die collision von meshes. ich finds relativ schwer
3. das problem mesh: ka wie man das erstellt, habe auch schon zig mal gefragt, geht halt einfach nich...bin wohl zu dof
na, bist du dem auch verfallen? willkommen im klub, ich auch
ich kann dir nichthelfen, nur ein par tipps geben
1. es ist sch*** schwer. wenn du nicht 150% intresse hast, würde ich nicht anfangen.
2. tutorials oder sonst was gibts nicht.
die einzige hilfe ist die pb hilfe und pb beispiele.
du musst halt ein wenig probieren, was die einzelnen befehle bewirken.
das einzig was nicht gut ist ist die collision von meshes. ich finds relativ schwer
3. das problem mesh: ka wie man das erstellt, habe auch schon zig mal gefragt, geht halt einfach nich...bin wohl zu dof
-.-"
- unix
- Beiträge: 361
- Registriert: 15.02.2005 19:25
- Wohnort: Zwischen Coburg und Bamberg :-)
- Kontaktdaten:
Ich hab 0 Ahnung was dieser Code bedeuten soll:
SetMeshData(0, 0, ?CubeVertices , 4)
SetMeshData(0, 1, ?CubeFacesIndexes , 2)
SetMeshData(0, 2, ?CubeTextureCoordinates, 4)
Ich mein is gibt doch genug Menschen die das machen und die Durchblicken es wird doch einer schaffen mir das zu erklären oder irgendwie zu helfen
Anmerkung1:
72°C Körpertemperatur
SetMeshData(0, 0, ?CubeVertices , 4)
SetMeshData(0, 1, ?CubeFacesIndexes , 2)
SetMeshData(0, 2, ?CubeTextureCoordinates, 4)
Ich mein is gibt doch genug Menschen die das machen und die Durchblicken es wird doch einer schaffen mir das zu erklären oder irgendwie zu helfen
Anmerkung1:
72°C Körpertemperatur
Hier steht normalerweise die Putzfrau drin,
die hat aber Urlaub.
MfG : Unix
die hat aber Urlaub.
MfG : Unix
- Green Snake
- Beiträge: 1394
- Registriert: 22.02.2005 19:08
Man kann Meshes für Purebasic mit Milkshape (Milkshape 3D) erstellen.
Such auf OGRE.net den Exporter nach .mesh und dann gehts.
Annimation funzt auch bringt aber nichts, da man sie nicht wieder stoppen bzw. ändern kann.
Am besten du wartest auf das nächste PB.
Edit: Ach ja Unix das schreib ich morgen, iss schon zu spät.
Such auf OGRE.net den Exporter nach .mesh und dann gehts.
Annimation funzt auch bringt aber nichts, da man sie nicht wieder stoppen bzw. ändern kann.
Am besten du wartest auf das nächste PB.
Edit: Ach ja Unix das schreib ich morgen, iss schon zu spät.
Also ich kann dir nur empfehlen OpenGL zu lernen und das dann in ner richtigen programmiersprache z.b. C++ da PB schon auf grund des nicht vorhandenen double da nur zu probs führt (merke ich selber gerade).
habe selber angefangen mich ein wenig in OpenGL ein zuarbeiten und wenn du dich wirklich in ruhe hinsetzt und viel liest da ist das garnich so schwer.
Ich werde jetzt meine OpenGL sachen in C++.
Der weitere vorteil ist das OpenGL plattformunabhänig ist und du es auf unix linux windows und was weis ich wo verwenden kannst und das allein sollte doch schon ansporn genug sein gleich OpenGL zu lernen würde ich sagen.
habe selber angefangen mich ein wenig in OpenGL ein zuarbeiten und wenn du dich wirklich in ruhe hinsetzt und viel liest da ist das garnich so schwer.
Ich werde jetzt meine OpenGL sachen in C++.
Der weitere vorteil ist das OpenGL plattformunabhänig ist und du es auf unix linux windows und was weis ich wo verwenden kannst und das allein sollte doch schon ansporn genug sein gleich OpenGL zu lernen würde ich sagen.
Ich schreib hier Trotzdem mal ein Beispiel für ein PB- hin.
Auch wenn du wirklich was anderes nehmen solltest!
Edit: Noch mal verbessert
Auch wenn du wirklich was anderes nehmen solltest!
Edit: Noch mal verbessert
Code: Alles auswählen
InitKeyboard()
InitEngine3D()
InitSprite()
InitMouse()
OpenWindow(0, 50, 50, 640, 480, #PB_Window_SystemMenu, "3D - Würfel")
OpenWindowedScreen(WindowID(0), 0, 0, 640, 480, 0, 0, 0)
Procedure RCol()
ProcedureReturn RGB(Random(240)+15, Random(235)+20, Random(235)+20)
EndProcedure
Procedure NewMaterial(N)
CreateTexture(N, 256, 256)
StartDrawing(TextureOutput(N))
Box( 0, 0, 128, 128, RCol())
Box( 0, 128, 128, 128, RCol())
Box(128, 0, 128, 128, RCol())
Box(128, 128, 128, 128, RCol())
StopDrawing()
CreateMaterial (0, TextureID(N))
ProcedureReturn MaterialID(0)
EndProcedure
;- 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 00,00,32 ;Point 2
Data.f 32,00,32 ;Point 3
Data.f 00,32,00 ;Point 4
Data.f 32,32,00 ;Point 5 P2 P3
Data.f 00,32,32 ;Point 6 *------------------*
Data.f 32,32,32 ;Point 7 / \ _________ D0 / |
T_01: ; P0 / D1 \ / D5|
Data.w 0, 1, 2 ;Dreieck 0 (oben) *------------------*\ |
Data.w 2, 1, 3 ;Dreieck 1 |\ P1| | |
Data.w 6, 5, 4 ;Dreieck 2 (unten) | \ D8 | | |
Data.w 7, 5, 6 ;Dreieck 3 | \ | | |
Data.w 7, 1, 5 ;Dreieck 4 (rechts) | \ | \ |
Data.w 3, 1, 7 ;Dreieck 5 | \ | | |
Data.w 0, 6, 4 ;Dreieck 6 (links) | \ | | |
Data.w 2, 6, 0 ;Dreieck 7 | D9 \ | \|
Data.w 5, 1, 0 ;Dreieck 8 (vorne) | \ | D4 * P7
Data.w 0, 4, 5 ;Dreieck 9 | \ | /
Data.w 2, 3, 7 ;Dreieck 10 (hinten) *------------------*/
Data.w 7, 6, 2 ;Dreieck 11 P4 P5
U_01:
Data.f 0.0, 0.0 ; Vertex 0
Data.f 0.0, 1.0 ; Vertex 1
Data.f 1.0, 0.0 ; Vertex 2
Data.f 1.0, 1.0 ; Vertex 3
Data.f 0.0, 0.0 ; Vertex 4
Data.f 0.0, 1.0 ; Vertex 5
Data.f 1.0, 0.0 ; Vertex 6
Data.f 1.0, 1.0 ; Vertex 7
EndDataSection
CreateMesh(0)
SetMeshData(0, #PB_Mesh_Vertices, ?V_01, 08)
SetMeshData(0, #PB_Mesh_Triangles, ?T_01, 12)
SetMeshData(0, #PB_Mesh_UVCoordinates, ?U_01, 08)
CreateEntity(0, MeshID(0), NewMaterial(0))
EntityLocate(0, 5, 0, 5)
;- Hauptschleife
Repeat
RenderWorld()
StartDrawing(ScreenOutput())
Locate(4, 3)
FrontColor(255,255,255) : BackColor(0,0,0)
DrawText("Position = " +Str(CameraX(0))+ " ; " +Str(CameraY(0))+ " ; " + Str(CameraZ(0)) + Space(10))
Locate(4, 460) : DrawText("Auf = Num8 | Ab = Num2 | Textur ändern = Eingabe | Drehen = Strg rechts")
StopDrawing()
FlipBuffers()
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
If KeyboardPushed(#PB_Key_Return) : N*-1+1 : EntityMaterial(0, NewMaterial(N)) : 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
RotateEntity(0, 0.1, 0.05, 0.1)
Until KeyboardPushed(#PB_Key_Escape) Or WindowEvent() = #PB_Event_CloseWindow
CloseScreen()
End
Zuletzt geändert von Batze am 22.06.2005 15:41, insgesamt 1-mal geändert.
@Batze
sehr schönes beispiel um zu lernen und verstehen wie das funktioniert.
was ich aber jetzt mal versucht habe ist die 100% systemauslastung weg zu bekommen in dem ich in die Repeatschleife nen delay(1) gesetzt habe hat aber nix geholfen.
So anspruchsvoll ist das beispiel aber nun auch nich das es gleich 100% system brauch und genau das habe ich z.b. bei OpenGL nich das mein system so belastet wird.
Las mich aber gern eines besseren belehren und vieleicht kannst du ja mal zeigen wie man die auslastung runter bekommt.
gruß nico
sehr schönes beispiel um zu lernen und verstehen wie das funktioniert.
was ich aber jetzt mal versucht habe ist die 100% systemauslastung weg zu bekommen in dem ich in die Repeatschleife nen delay(1) gesetzt habe hat aber nix geholfen.
So anspruchsvoll ist das beispiel aber nun auch nich das es gleich 100% system brauch und genau das habe ich z.b. bei OpenGL nich das mein system so belastet wird.
Las mich aber gern eines besseren belehren und vieleicht kannst du ja mal zeigen wie man die auslastung runter bekommt.
gruß nico