3D Programmierung

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Benutzeravatar
unix
Beiträge: 361
Registriert: 15.02.2005 19:25
Wohnort: Zwischen Coburg und Bamberg :-)
Kontaktdaten:

3D Programmierung

Beitrag von unix »

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
Benutzeravatar
Green Snake
Beiträge: 1394
Registriert: 22.02.2005 19:08

Beitrag von Green Snake »

hallo

na, bist du dem auch verfallen? willkommen im klub, ich auch :lol:
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 :lol:
-.-"
Benutzeravatar
unix
Beiträge: 361
Registriert: 15.02.2005 19:25
Wohnort: Zwischen Coburg und Bamberg :-)
Kontaktdaten:

Beitrag von unix »

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
Hier steht normalerweise die Putzfrau drin,
die hat aber Urlaub.
MfG : Unix
Benutzeravatar
Green Snake
Beiträge: 1394
Registriert: 22.02.2005 19:08

Beitrag von Green Snake »

setbalbal ist glaube ich um meshes nur mit code zu erstellen.
is aber schwer.
ich würde trotzdem gerne wissen, wie man mesh erstellen kann.
am liebsten würde ich sie von *.egal was in *.mesh konventieren

anmerkung

90°C körpertemratur, da ich keine mesh erstellen kann :lol:
-.-"
Benutzeravatar
Batze
Beiträge: 1492
Registriert: 03.06.2005 21:58
Wohnort: Berlin
Kontaktdaten:

Beitrag von Batze »

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. :allright:
Benutzeravatar
nicolaus
Moderator
Beiträge: 1175
Registriert: 11.09.2004 13:09
Kontaktdaten:

Beitrag von nicolaus »

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.
Benutzeravatar
Batze
Beiträge: 1492
Registriert: 03.06.2005 21:58
Wohnort: Berlin
Kontaktdaten:

Beitrag von Batze »

Ich schreib hier Trotzdem mal ein Beispiel für ein PB- hin.
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.
Benutzeravatar
nicolaus
Moderator
Beiträge: 1175
Registriert: 11.09.2004 13:09
Kontaktdaten:

Beitrag von nicolaus »

@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
Benutzeravatar
Green Snake
Beiträge: 1394
Registriert: 22.02.2005 19:08

Beitrag von Green Snake »

muss sagen...gutes beispiel :allright:
-.-"
Benutzeravatar
nicolaus
Moderator
Beiträge: 1175
Registriert: 11.09.2004 13:09
Kontaktdaten:

Beitrag von nicolaus »

Green Snake hat geschrieben:muss sagen...gutes beispiel :allright:
sollte vieleicht direkt als beispiel in PB mit aufgenommen werden (André ?)!
Antworten