Seite 1 von 1

Copie vom 3d-Fenster

Verfasst: 19.07.2009 17:16
von super_castle
hallo, ich habe im Windowscreen ein 3d-Fenster, wodrin ich einen 3d-Körper drehe.
Dieses Fenster möchte ich copieren und daneben anzeigen, der 3d-Körper sollte auch also in diesem Fenster die Bewegung zeigen.

Wie geht so etwas?

mfg

Code: Alles auswählen

#CameraSpeed=10
#EntitySpeed=4

#Camera=0

Dim entity(5, 1)
Dim Node(5)

Define.f KeyX,KeyY,MouseX,MouseY

  InitEngine3D()

  Add3DArchive("Data\", #PB_3DArchive_FileSystem)
 
  InitSprite()
  InitKeyboard()
  InitMouse()
 
  hWnd = OpenWindow(0,0,0,800,600,"Nodes",#PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered)
  OpenWindowedScreen(hWnd,220,10,500,400,0,0,0)

    EnableWorldPhysics(#True)
    EnableWorldCollisions(#True)
     
    CreateMaterial(0, LoadTexture(0, "gruen.jpg"))
    CreateMaterial(1, LoadTexture(1, "hintergr.jpg"))
    CreateMaterial(2, LoadTexture(2, "gelb.jpg"))
   
    Restore NumericalData
    Read.l Vert
    Read.l Tria
    Read.l Max
 
    CreateMesh(0, vert)
   
    SetMeshData(0, #PB_Mesh_Vertex | #PB_Mesh_Normal | #PB_Mesh_Color  | #PB_Mesh_UVCoordinate, ?Vertice, Vert);3)
    SetMeshData(0, #PB_Mesh_Face, ?Triangle, Tria); 1)
   
    CreateMesh(1, vert)
   
    SetMeshData(1, #PB_Mesh_Vertex | #PB_Mesh_Normal | #PB_Mesh_Color  | #PB_Mesh_UVCoordinate, ?Vertice, Vert);3)
    SetMeshData(1, #PB_Mesh_Face, ?Triangle, Tria); 1)
   
    CreateMesh(2, vert)
   
    SetMeshData(2, #PB_Mesh_Vertex | #PB_Mesh_Normal | #PB_Mesh_Color  | #PB_Mesh_UVCoordinate, ?Vertice, Vert);3)
    SetMeshData(2, #PB_Mesh_Face, ?Triangle, Tria); 1)
   
    CreateCamera(#Camera,0,0,100,100)
    CameraLocate(#Camera,0,200,300)
    CameraLookAt(#Camera,0,0,0)

    CreateLight(0,RGB(255,255,255),0,500,0)
    AmbientColor(RGB(200,200,200))
 
   
       Floor=CreateEntity(#PB_Any,MeshID(0),MaterialID(1),0,-45,0)
       ScaleEntity(Floor,300,10,300)
       EntityPhysicBody(Floor,#PB_Entity_StaticBody)
   
       For x=-2 To 2 Step 2
        For z=-2 To 2 Step 2
          Block=CreateEntity(#PB_Any,MeshID(0),MaterialID(0),x*80,0,z*80)
          ScaleEntity(block,30,30,30)
          EntityPhysicBody(Block,#PB_Entity_StaticBody)
        Next
       Next
     
      Node(0) = CreateNode(#PB_Any,0,0,0)
      Entity(0, 0) = CreateEntity(#PB_Any,MeshID(2),MaterialID(2))
      Entity(0, 1) = CreateEntity(#PB_Any,MeshID(2),MaterialID(2)) ; Bounding Box
     
      HideEntity(Entity(0, 1), 1)
     
      ScaleEntity(Entity(0, 0),10,5,10)   
     
      EntityLocate(Entity(0, 1), 50,0,0)
      EntityPhysicBody(Entity(0, 1),#PB_Entity_BoxBody, #PB_Entity_AbsoluteBodyMove)
      SetEntityMass(Entity(0, 1),10)
      ScaleEntity(Entity(0, 1),0.5, 0.25, 0.5)
     
      AttachNodeObject(Node(0),EntityID(Entity(0, 0)),#PB_Node_Entity)
     
      WorldDebug(#PB_World_DebugBody)
     
      Repeat
     
        ExamineKeyboard()
         
        Active=0
         
        If KeyboardPushed(#PB_Key_PageUp)
          Speed=-#CameraSpeed
        ElseIf KeyboardPushed(#PB_Key_PageDown)
          Speed=#CameraSpeed
        Else
          Speed=0
        EndIf
       
        If KeyboardPushed(#PB_Key_Left)
          Turn_X+1
          RotateNode(Node(0),0,Turn_x,0,#PB_Absolute)
        ElseIf KeyboardPushed(#PB_Key_Right)
          Turn_X-1
          RotateNode(Node(0),0,Turn_x,0,#PB_Absolute)
        EndIf
       
        If KeyboardPushed(#PB_Key_X)
          Move_X=-#EntitySpeed
          Active=1
        ElseIf  KeyboardPushed(#PB_Key_C)
          Move_X=#EntitySpeed
          Active=1
        EndIf
                 
        If  KeyboardPushed(#PB_Key_A)
            Move_Y=#EntitySpeed
            Active=2
        ElseIf  KeyboardPushed(#PB_Key_Z)
            Move_Y=-#EntitySpeed
            Active=2
        EndIf
       
        If KeyboardPushed(#PB_Key_Up)
            Move_Z=#EntitySpeed
            Active=3
        ElseIf KeyboardPushed(#PB_Key_Down)
            Move_Z=-#EntitySpeed
            Active=3   
        EndIf
       
        If Turn_X>360
          Turn_X-360
        ElseIf Turn_X<0
          Turn_X+360
        EndIf
       
        Deg_X=Turn_X+90
        If Deg_X>360
          Deg_X-360
        ElseIf Deg_X<0
          Deg_X+360
        EndIf
                           
       Select Active
          Case 1
            deg.f=(#PI/180)*Turn_X
             MoveEntity(Entity(0,1),Sin(deg)*Move_X * 10.0,0,Cos(deg)*Move_X * 10.0)
          Case 2
             MoveEntity(Entity(0,1),0,Move_Y,0)
          Case 3
            deg.f=(#PI/180)*Deg_X
            MoveEntity(Entity(0,1),Sin(deg)*Move_Z * 10.0,0,Cos(deg)*Move_Z * 10.0)
           Default
            MoveEntity(Entity(0,1),0,0,0)
       EndSelect
     
      If ExamineMouse()
        MouseX=-(MouseDeltaX()/30)*#CameraSpeed/2
        MouseY=-(MouseDeltaY()/30)*#CameraSpeed/2
      EndIf
     
      RotateCamera(0,MouseY/2,MouseX/2,RollZ,#PB_Relative)
      MoveCamera(0,0,0,Speed)
     
      NodeLocate(Node(0), EntityX(Entity(0, 1)), EntityY(Entity(0, 1)), EntityZ(Entity(0, 1)))
         
      RenderWorld()
      FlipBuffers()
    Until KeyboardPushed(#PB_Key_Escape) Or Quit=1
 
End

DataSection
   StringSect:
      Data.s ""

   NumericalData:
   Data.l 24,12,2

   Vertice:  ;x,y,z,nx,ny,nz,col,u,v = Vertex + Normal + Col + UV Koordinaten
   Data.f 1,1,1,0.57735,0.57735,0.57735,0,0,0
   Data.f 1,-1,1,0.57735,-0.57735,0.57735,0,0,0
   Data.f -1,-1,1,-0.57735,-0.57735,0.57735,0,0,0
   Data.f -1,1,1,-0.57735,0.57735,0.57735,0,0,0
   Data.f 1,1,-1,0.57735,0.57735,-0.57735,0,0,0
   Data.f -1,1,-1,-0.57735,0.57735,-0.57735,0,0,0
   Data.f -1,-1,-1,-0.57735,-0.57735,-0.57735,0,0,0
   Data.f 1,-1,-1,0.57735,-0.57735,-0.57735,0,0,0
   Data.f 1,1,1,0.57735,0.57735,0.57735,0,0,0
   Data.f 1,1,-1,0.57735,0.57735,-0.57735,0,0,0
   Data.f 1,-1,-1,0.57735,-0.57735,-0.57735,0,0,0
   Data.f 1,-1,1,0.57735,-0.57735,0.57735,0,0,0
   Data.f 1,-1,1,0.57735,-0.57735,0.57735,0,0,0
   Data.f 1,-1,-1,0.57735,-0.57735,-0.57735,0,0,0
   Data.f -1,-1,-1,-0.57735,-0.57735,-0.57735,0,0,0
   Data.f -1,-1,1,-0.57735,-0.57735,0.57735,0,0,0
   Data.f -1,-1,1,-0.57735,-0.57735,0.57735,0,0,0
   Data.f -1,-1,-1,-0.57735,-0.57735,-0.57735,0,0,0
   Data.f -1,1,-1,-0.57735,0.57735,-0.57735,0,0,0
   Data.f -1,1,1,-0.57735,0.57735,0.57735,0,0,0
   Data.f 1,1,-1,0.57735,0.57735,-0.57735,0,0,0
   Data.f 1,1,1,0.57735,0.57735,0.57735,0,0,0
   Data.f -1,1,1,-0.57735,0.57735,0.57735,0,0,0
   Data.f -1,1,-1,-0.57735,0.57735,-0.57735,0,0,0

   Triangle: ; Vertice x,y,z verbinden/Create Triangle
   Data.w 2,0,3
   Data.w 1,0,2
   Data.w 6,4,7
   Data.w 5,4,6
   Data.w 10,8,11
   Data.w 9,8,10
   Data.w 14,12,15
   Data.w 13,12,14
   Data.w 18,16,19
   Data.w 17,16,18
   Data.w 22,20,23
   Data.w 21,20,22
EndDataSection 

Verfasst: 19.07.2009 19:39
von Vermilion
Kleiner Hinweis: es heißt Kopie und kopieren.

Verfasst: 19.07.2009 21:14
von super_castle
Ich war jetzt 6 Wochen in Frankreich, daher kommt das. Als Pensionär kann man sich das noch erlauben, ich meine grössere Reisen machen nach Frankreich. Man nimmt in dieser Zeit die französische Schreibweise an.

Übrigens bald geht es wieder für 4 Wochen nach Italien, was sagst du dazu?

Helf mir jetzt lieber die Frage zu beantworten, oder kannst du nur belehren.

Es gibt solche Menschen, die sitzen nur vor dem Computer weil sie kein Geld zum Verreisen haben und "Googlen" so durch die Gegend mit einer Flasche Bier in der Hand und einer Hartz-IV-Bescheinigung.

Nahe Celle, ist wohl so ein verlassenes Kuhkaff oder.

Verfasst: 19.07.2009 21:21
von Kiffi
super_castle hat geschrieben:Es gibt solche Menschen, die sitzen nur vor dem Computer weil sie kein Geld zum verreisen haben und "Googlen" so durch die Gegend mit einer Flasche Bier in der Hand und einer Hartz-IV-Bescheinigung.

Nahe Celle, ist wohl so ein verlassenes Kuhkaff oder.
ah, da isser wieder, unser super_castle! Hab mich gefragt, wie lange es
dieses Mal dauert, bis Du wieder hier Leute beleidigst.

Verfasst: 19.07.2009 21:22
von TomS
super_castle hat geschrieben:Ich war jetzt 6 Wochen in Frankreich, daher kommt das. Als Pensionär kann man sich das noch erlauben, ich meine grössere Reisen machen nach Frankreich. Man nimmt in dieser französische Schreibweise an.

Übrigens bald geht es wieder für 4 Wochen nach Italien, was sagst du dazu?

Helf mir jetzt lieber die Frage zu beantworten, oder kannst du nur belehren.
Es gibt solche Menschen, die sitzen nur vor dem Computer weil sie kein Geld zum verreisen haben und "Googlen" so durch die Gegend mit einer Flasche Bier in der Hand und einer Hartz-IV-Bescheinigung.

Nahe Celle, ist wohl so ein verlassenes Kuhkaff oder.
Geändert hast du's trotzdem nicht. Wenn dein Problem gelöst wird und es sucht in ein paar Monaten jemand nach der Lösung, wie soll der diesen Thread hier finden?

Warum man hier jetzt jemanden zusammen scheißen muss, weil er dich auf einen Rechtschreibfehler aufmerksam macht, weiß ich beim besten Willen nicht. :roll:

Verfasst: 19.07.2009 21:54
von Vera

Verfasst: 19.07.2009 22:35
von Vermilion
Es gibt solche Menschen, die sitzen nur vor dem Computer weil sie kein Geld zum Verreisen haben und "Googlen" so durch die Gegend mit einer Flasche Bier in der Hand und einer Hartz-IV-Bescheinigung.

Nahe Celle, ist wohl so ein verlassenes Kuhkaff oder.
Uiuiui :mrgreen:

Erinnerst du dich noch an eine gewisse freie Zeit, ab und zu, als man noch in die Schule ging? "Ferien"? So kann man das bei mir nennen. Naja, die letzten. Ab 1. August bzw. den Montag darauf geht es mit einer Ausbildung los... Nur um das klarzustellen.

Celle hat mehr als 80.000 Einwohner, Wathlingen ist auch nicht gerade ein drei Seelen Dorf mit mehr als 7.000 Einwohnern... Und naja, der Bevölkerungsherd Hannover ist nur 37km entfernt.

Es war nur ein Hinweis, wie's richtig geschrieben wird. Stell dich nicht so an. Schreib es doch weiter so. Hätte bloß auch sein können, dass du es nicht wusstest und vielleicht einer Verbesserung der eigenen Rechtschreibung nicht allzu abgeneigt bist.

Verfasst: 21.07.2009 12:22
von mpz
Hi,

Zu Deiner Frage. Unter Windows und DX 9 wird die unterteilte Fensterdarstellung über Viewports gemacht. D.h es wird ein Bereich angegeben, ein Koordinatensystem dafür erzeugt und alle Objekte in diesem Bereich gerendert. Unterschiedliche Vieports benötigen daher z.B. unterschiedliche Koordinatensysteme und eigene Renderroutinen. Mir ist allerdings keine Möglichkeit bekannt das mit Ogre in Purebasic zu realisieren...

Die Anwendung eines Viewports findest Du z.B. bei meinem Texturshaderprogramm. Hier wurde die 3D Darstellung auf einem Bereich des Windows verkleinert.
http://www.purebasic.fr/english/viewtop ... 05&start=7

P.S. Ich würde mich über eine freundliche Umgangweise im Forum freuen da ich selber prinzipiell mit anderen hier so umgehe. Meine Negativerlebnisse waren nicht sehr schön und ich finde es einfach völlig unnötig und frustrierend...

Gruß Michael

Verfasst: 21.07.2009 20:26
von super_castle
jup, danke für den hinweiss.

gibt es etwas neues mit deinem mps_3d_tool.
könnte es auch mehrere körperteile aus einer x-datei herausfiltern, die dann als pb-datei erstellt werden?

funktioniert bei mir wunderbar für die erstellung vom mesh.

mfg

Verfasst: 21.07.2009 22:15
von mpz
Hi Super_castle,

im Moment bastle ich an meiner MP3D Engine rum und versuche gerade das laden von animierten Directx Meshs zu integrieren. Ich habe daher das MP 3D Tool nicht gross weiterentwickelt. Einzelne Abschnitte eines Meshs zu selektierten und zu speichern ist sehr aufwendig, das kann man einfacher mit einem 3D Modeller realisieren.

Was noch in das MP 3D Tool rein soll ist ein Rundmodeler wo man eine Kurve malt und ein Mesh Rundmodell (z.B. Vasenform) entsteht. Auch procedurale Meshs sind noch ein Thema und das Speichern als Ogre Mesh XML Format...

Gruß Michael