Copie vom 3d-Fenster

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
super_castle
Beiträge: 557
Registriert: 29.11.2005 15:05

Copie vom 3d-Fenster

Beitrag 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 
Benutzeravatar
Vermilion
Beiträge: 1846
Registriert: 08.04.2006 16:00
Computerausstattung: Apple iMac (2010) & HP Notebook
Wohnort: Heidekreis

Beitrag von Vermilion »

Kleiner Hinweis: es heißt Kopie und kopieren.
Bild

Immer die neueste PureBasic Version. Auf allem Betriebssystemen. Ich bin ein OS-Nomad!
super_castle
Beiträge: 557
Registriert: 29.11.2005 15:05

Beitrag 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.
Zuletzt geändert von super_castle am 19.07.2009 21:21, insgesamt 1-mal geändert.
Benutzeravatar
Kiffi
Beiträge: 10715
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag 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.
a²+b²=mc²
Benutzeravatar
TomS
Beiträge: 1508
Registriert: 23.12.2005 12:41
Wohnort: München

Beitrag 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:
Benutzeravatar
Vera
Beiträge: 928
Registriert: 18.03.2009 14:47
Computerausstattung: Win XP SP2, Suse 11.1
Wohnort: Essen

Beitrag von Vera »

Benutzeravatar
Vermilion
Beiträge: 1846
Registriert: 08.04.2006 16:00
Computerausstattung: Apple iMac (2010) & HP Notebook
Wohnort: Heidekreis

Beitrag 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.
Bild

Immer die neueste PureBasic Version. Auf allem Betriebssystemen. Ich bin ein OS-Nomad!
Benutzeravatar
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

Beitrag 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
Working on :lol: - LibSGD - MP3D Engine - 8)
super_castle
Beiträge: 557
Registriert: 29.11.2005 15:05

Beitrag 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
Benutzeravatar
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

Beitrag 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
Working on :lol: - LibSGD - MP3D Engine - 8)
Antworten