Seite 1 von 2

ResizeWindow3D bricht ab

Verfasst: 11.09.2013 09:12
von wpshadow
Guten Morgen,

ich experimentiere gerade mit einem 3D - Fenster in einem OpenWindowedScreen herum.

Dabei versuche ich das Fenster an die aktuelle Desktop - Auflösung anzupassen (d.h. in meinem Fall 1900x1200), d.h. zu maximieren.

Grundlegend fangen wir das Event #PB_Event_MaximizeWindow ab und versuchen das 3D Fenster zu verändern. Dabei haben wir schon mehrere Versionen versucht, jedoch bekamen wir immer wieder die Fehlermeldung:

Das angegebene #Window3D wurde nicht initialisiert.

Leider sind wir uns beide nicht sicher, was genau damit gemeint ist, da die 3D Darstellung selbst ja erfolgt und erst abbricht, wenn wir

win3D = GetActiveWindow3D()
ResizeWindow3D(win3D, 0, 0, 1024, 768)


aufrufen. win3D ist inzwischen der letzte Versuch eine ganzen Reihe von Tests, die leider alle nicht funktioniert haben. Wir haben an dieser Stelle versucht die Auflösung einfach mal fix zu setzen, um zu sehen, ob sich evtl. was ändert, jedoch kam es niemals soweit. Auf das Event reagiert der Code jedoch richtig: mit einem END wird das Ganze sauber beendet.

Ich habe Unten den Code dran gehängt.

Hat irgendjemand eine Idee, was genau der Fehler sein könnte bzw. was wir falsch machen?

lg

W.


Code: Alles auswählen

#Window = 1
#MainWindow = 0

Declare UpdateEvents()
Declare Create3DStuff()
Declare InitEngineParts()


InitEngineParts()


If OpenWindow(#MainWindow, 0, 0, 800, 600, "Testefenster", #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MaximizeGadget)
  
  OpenWindowedScreen(WindowID(#MainWindow), 0, 0,800, 600, 0, 0, 0) 
  OpenWindow3D(#Window, 100, 100, 300, 100, "")
  
  
  Create3DStuff()
  
  
  Repeat ;Hauptschleife
    

    UpdateEvents()    
      
    ExamineKeyboard()  
    RenderWorld() 
    FlipBuffers()
    
  Until KeyboardPushed(#PB_Key_Escape) Or Quit = 1
  
  
  
  
EndIf






;---------------Funktionen!---------------------------------------------------

Procedure InitEngineParts()
  
  InitEngine3D()   
  InitSprite()
  InitKeyboard()
  InitMouse()
  
EndProcedure


Procedure Create3DStuff()
  
  CreateCamera(0, 0, 0, 100, 100)  ; Front camera
  MoveCamera(0,0,100,100, #PB_Absolute)   
  CameraLookAt(0,0,0,0)
  
  
  CreateCylinder(1,20,30) 
  CreateEntity(0, MeshID(1), #PB_Material_None) 
  MoveEntity(0,0,0,0)
  
  EntityRenderMode(0, #PB_Entity_DisplaySkeleton)
  CreateLight(0,RGB(0,255,0),0,100,0)
  
EndProcedure


Procedure UpdateEvents()
  
    Repeat ;Eventschleife

        Event = WindowEvent()
        win3D = GetActiveWindow3D()
        
        Select Event
          
          Case #PB_Event_CloseWindow
            Quit = 1
           
          Case #PB_Event_MaximizeWindow
            
            ResizeWindow3D(win3D, 0,  0,  1024, 768)
        EndSelect
        
        If Quit = 1 : End : EndIf  ; Quit the app immediately
      Until Event = 0 ;Ende Eventschleife 
      
EndProcedure

Re: ResizeWindow3D bricht ab

Verfasst: 11.09.2013 14:26
von bobobo
Da fehlt was entscheidendes.
Das Resizewindow scheitert weil es gar kein 3dWindow gibt.

Das 3DWindow braucht außer Größenangaben noch Hinweise, wie es was darzustellen hat.
Dazu solltet Ihr das 3dArchiv Data\GUI einbinden

Erweitert mal Euren Code um

Add3DArchive("Data/GUI", #PB_3DArchive_FileSystem)

hinter InitEngineParts()

dann speichert Ihr den Code in Verzeichnis
Euer Purebasicordner \examples\3d\mein3dtest.pb
und lasst ihn von dort laufen.


Ob ein Resizen des HauptFensters überhaupt Sinn macht sei mal dahingestellt...

Re: ResizeWindow3D bricht ab

Verfasst: 11.09.2013 19:15
von Schranz0r
Hi,

ich bin der zweite im Bunde. :D
Verstehe nicht was Add3DArchive("Data/GUI", #PB_3DArchive_FileSystem) bringen soll.
Der Fehler mit dem #Window3D ist zwar weg und es schmiert nicht mehr ab, dennoch versteh ich den Hintergrund dafür nicht.
Bin ich gezwungen die Gui zu benutzen?
Kann man das nicht auch ohne diese 3D-GUI lösen?

Danke für deine Hilfe. :praise:

Re: ResizeWindow3D bricht ab

Verfasst: 12.09.2013 09:36
von Chimorin
Das, was ihr da eingebunden habt, ist die 3D-GUI, genannt CEGUI. Läuft ungefähr genauso wie mit der Engine3D.dll, wenn du die nicht hast, weiß dein Programm nicht, was es machen soll, bzw. wie eure Fenster auszusehen haben (Schrift, Design der Fenster).
Je nachdem, wo euer GUI-Zeug gespeichert ist, müsst ihr den Pfad eben anpassen (Der Ordner muss auch nicht GUI heißen, wenn ihr in so nicht haben wollt).

Re: ResizeWindow3D bricht ab

Verfasst: 12.09.2013 11:17
von wpshadow
Hi,
danke für die schnellen Antworten.

Wenn wir jetzt nur eine reine 3D - Darstellung machen wollen, jedoch ohne die 3D - Gui, wie genau wäre dann das richtige Vorgehen? Ich vermute, dass wir uns in dem Fall dann vollkommen verrannt haben, oder?

lg

W.

Re: ResizeWindow3D bricht ab

Verfasst: 12.09.2013 11:23
von N_Gnom
OpenWindow
Open(Windowed)Screen

ach und InitEngine3D nich vergessen...das jetzt nur für das Fenster und um die interne Engine3D zu initialisieren.
Ansonsten ist die Hilfe in PB auf jeden Fall zu empfehlen....

Re: ResizeWindow3D bricht ab

Verfasst: 12.09.2013 11:49
von bobobo
und die mitgelieferten Demos

(und natürlich das Forum (auch das englishe) :) )

Verrannt hat sich niemand.
Abfragen für ein Programm im WindowedScreen kann man z.B. über ein normales Fenster erledigen.
Erst im Fullscreen kann man auch an ein 3dD-Gui denken, falls einem gar nichts anderes dazu einfällt.

Re: ResizeWindow3D bricht ab

Verfasst: 12.09.2013 12:11
von wpshadow
Klasse, das geht dann doch einfacher als gedacht.

Dann machen wir uns heute mal sofort dran und korrigieren, was das Zeug hält. :mrgreen:

Von der 3D-Gui werden wir uns wohl vorerst mal fern halten und uns erst einmal allgemein einarbeiten!

Danke euch! :allright:

Re: ResizeWindow3D bricht ab

Verfasst: 12.09.2013 13:04
von Chimorin
Die CEGUI ist auf den ersten Blick auch toll, dennoch fehlen einige Sachen (Ganz zu schweigen von einem Messagerequester, den man selber basteln muss :shock: ).

Re: ResizeWindow3D bricht ab

Verfasst: 12.09.2013 13:54
von wpshadow
Ok, der Tip ist auch gut! Zum Thema GUI werden wir uns sowieso noch was überlegen müssen... :?

Wobei wir davon momentan noch weit weg sind *lol*