Hi erstma bin neu zu euch gekommen und muss euch gleich mit Fragen löchern !
Also im Rahmen einer Abschlussarbeit habe ich die Aufgabe bekommen ein OpenGL Renderer zu schreiben (ja wer lässt sich solche Namen einfallen). Das soll also wohl eher heißen nen einfachen Editor zum schön aussehen, nur nun habe ich das Problem das ich nicht so richtig durch die Initial-Prozeduren von OpenGL durchsteige und nicht so recht weiß wie ich den Renderbereich(schwarz) auf einen bestimmen Bereich von sagen wir mal 400x400 begrenzen kann in einem Delphiformular von 800x600!
Speziell an die Editorschreiberlinge geht die Frage:
Wie kann man solch eine 4 Fenster Ansicht realisieren
Du erstellst deinen Renderkontext nicht direkt im Formular, sondern in einer untergeordneten Komponente (welche ist prinzipiell egal, von TWinControl sollte sie halt abgeleitet sein, da du ein "echtes" Fensterhandle brauchst). Ein Panel eignet sich ausgezeichnet, das kannt du dann positionieren wie du's brauchst.
Alternativ kannst du auch über die Win32 API ein eigenes Fenster erstellen und dieses dann als Kindfenster woanders einfügen (in Carad mache ich das z.B. so, da ich hier meine eigene Ereignisbehandlungsroutine für das 3D Fenster implementiere).
Auch wenn du eine TriView einbaust, würde ich dir stark empfehlen, diese in einem Renderkontext (also einem Fenster) mittels glViewPort zu realisieren, da der Wechsel des Renderkontexts doch ziemlich zeitaufwändig ist, außerdem werden von älteren Grafikkarten (ATI Rage und Konsorten) mehrere Kontexte eventuell gar nicht oder nur fehlerhaft unterstützt, und grad bei Schul- oder Arbeitsrechnern wird ja nicht gerade die neueste Hardware verbaut - und mit Treiberupdates schauts auch eher dürftig aus.
Da kannst du dann noch so argumentieren, dass es "prinzipiell" nicht deine Schuld ist - ein Absturz schaut immer blöd aus.
Danke für die schnelle antwort aber leider ist es für mich noch nicht so einfach das so schnell umzusetzen ! Ich will jetzt nicht das mir hier irgendjemand mein Programm schreibt, aber ich wäre sehr dankbar wenn du mir eventuell aufzeigen könntest (mit Code-Snipseln) wie das geht , da in meiner Initial-Prozedur die Renderbereich-Größe über
Form1.myDC:=GetDC(Handle);
aufgerufen wird und das mit Panel ja nicht möglich ist !
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Du kannst ganz einfach doch auch statt des normalen Fensterhandles das Handle deines Panels übergeben. Du erstellst also z.B. vier Panel auf ner Form und generierst dann 4 Gerätekontexte und 4 Renderkontexte :
Code:
DC1 := GetDC(Panel1.Handle);
RC1 := CreateRenderingContext(DC1,...);
DC2 := GetDC(Panel2.Handle);
RC2 := CreateRenderingContext(DC2,...);
...
Das ist eigentlich die einfachste und auch bequemste Lösung, allerdings ist das permanente Wechseln zwischen den vier Renderkontexten recht langsam.
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Dadurch, dass der aktive RC Thread abhängig ist könnte man da schon fast sagen, dass es sich lohnen würde 4 Threads zu erstellen. Die jeweils ein Mal wglMakeCurrent aufzurufen und dann immer fröhlich drauf los zu rendern. Allerdings sind die einzelnen Renderbereiche dann nicht mehr synchron. Das müsstest du dann durch TiimeBased Movement lösen.
PS: Hatte das selber mal ausprobiert und funzt ohne Probleme. (Also das Ohne Probleme meine ich nur dann wenn man Threads erst einmal vernünftig zum Laufen bekommen hat.
Danke an alle erstma !! Nun werde ich soweit mir das möglich ist über meine beschränkten Delphi-Kentnisse weiter arbeiten !!
Sollten weitere Fragen enstehen, hoffe ich wieder auf eure Kentnisse zurück greifen zu können ...
Mitglieder in diesem Forum: 0 Mitglieder und 8 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.