Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Fr Jul 18, 2025 11:14

Foren-Übersicht » Programmierung » OpenGL
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 

Was haltet ihr von meiner ersten Komponente?
Genial... hab ich schon immer gesucht! 0%  0%  [ 0 ]
Nicht schlecht 40%  40%  [ 2 ]
Brauchbar 40%  40%  [ 2 ]
Ich schreibe mir lieber selber was 20%  20%  [ 1 ]
... gib hier nicht so an, das kann schließlich jeder 0%  0%  [ 0 ]
Abstimmungen insgesamt : 5
Autor Nachricht
 Betreff des Beitrags: Neue OpenGL Komponnte "GLOutBox"
BeitragVerfasst: Fr Aug 29, 2003 20:05 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Aug 20, 2003 22:26
Beiträge: 38
Wohnort: Dresden (noch)
Hallo!

Ihr könnt euch ja bestimmt noch dran erinnern, dass ich neulich noch total blauäugig hier ankam.
Naja... das hat sich etwas geändert. Ich hab mal wirklich tutorials gewälzt und mich richtig in OpenGL reingearbeitet.
Da ich mich sowieso ganz gut mit der WindowsAPI und mit dem schreiben von Komponenten auskenne, hab ich es mir natürlich auch nicht nehmen lassen, mich gleich ans Werk zu machen und mir eine brauchbare OGL Basisklasse zu schreiben.
-Ich vertrau sowieso nie der Arbeit von anderen :wink:

Das ganze nennt sich nun GLOutBox und ich hoffe, dass vielleicht auch andere etwas davon haben. Für mich war es jedenfalls ein super Training.

Jetzt poste ich einfach nur noch ein paar Auszüge aus der Readme damit ihr eine Vorstellung habt, worum es geht...


TGLOutBox:
- initialisiert ein OpenGL interface auf einem Delphi Formular und bietet grundlegende Steuerfunktionen
- Kann zur Designzeit positioniert und konfiguriert werden
- Tut aber auch nur eben genau das, verzichtet auf Schnickschnack und alles was unnötig Ressoucen brauchen könnte
- Der Programmierer muss nichts weiter beachten und kann alle gängigen OpenGL Befehle nutzen
- Ist auch für mehrere parallele Instanzen auf einem Formular ausgelegt.


- Designzeit Properties:

- Align
- Anchors
- Ctl3D
- Enabled
- Visible

- GLClearingColor:TColor (setzt eine Delphi-Farbe in einen passenden glClearColor-Aufruf um)

- GLDrawColor:TColor (setzt eine Delphi-Farbe in einen passenden glColor-Aufruf um)

- GLDoubleBuffered:Boolean (reinitialisiert bei Änderung das Interface mit oder ohne DoubleBuffer)

- GLAntialiasing:Boolean (setzt automatisch GL_POINT_SMOOTH, GL_LINE_SMOOTH und GL_POLYGON_SMOOTH)

- GLColorDepth:byte (reinitialisiert bei Änderung das Interface mit der passenden Farbtiefe)

- GLZBuffer:byte (reinitialisiert bei Änderung das Interface mit dem passenden DepthBuffer [0 = kein DepthBuffer und GL_DEPTH_TEST deaktiviert] )

- GLStencilBuffer:byte (reinitialisiert bei Änderung das Interface mit dem passenden StencilBuffer [0 = kein StencilBuffer und GL_STENCIL_TEST deaktiviert])

- GLAccelerationMode:TAccelerationMode (read only... zeigt Hardware/Softwaremodus an)

- GLBufferSwapMode:TBufferSwapMode (zeigt momentan verwendete BufferSwap-Methode an und ändert sie wenn möglich)


- Methoden:
- Create(AOwner: TComponent) [Wegen der Compatibilität steht hier zwar TComponent, aber es muss ein TWinControl als Owner übergeben weden!]

- Activate (ruft gegebenen Falls wglMakeCurrent auf um den eigenen Rendering Context zu aktivieren)

- Deactivate (Ruft wglMakeCurrent(0,0) auf, wenn der eigene Rendering Context aktiv ist. Sollte nicht ohne Grund aufgerufen werden)

- Clear (Ruft glClear auf und löscht dynamisch alle gerade aktiven Puffer)

- Swap (Ruft lediglich SwapBuffers auf, also nur benutzen, wenn man weiß, was man tut)

- SafeSwap (Stellt sicher dass der RenderingContext aktiv ist, ruft anschließend glFinish und SwapBuffers auf)

- ReInitInterface (Stellt einige wichtige Optionen und den ViewPort wieder her [und bei der 2DOutBox die Matrix])

- BeginFormatChange (Schaltet die Automatische Reinitiierung aus, was Zeit spart, wenn man gleich mehrere PixelFormat Parameter ändern will)

- EndFormatChange (Schaltet die Automatische Reinitiierung wieder ein und führt diese bei Änderungen gleich aus)

- BackupMatrices (Speichert die momentanen Matrizen in den globalen Variablen "ModelViewMBackup", "ProjectionMBackup" und "TextureMBackup", so dass sie für jeden zur Verfügung stehen)

- RestoreMatrices (Ersetzt die momentanen Matrizen durch die oben genannten Variablen, egal welche instanz sie gespeichert hat)

- Events:

- OnMouseDown;
- OnMouseUp;
- OnMouseMove;
- OnMouseWheel;

- OnRender:procedure of object
-> (Ähnelt onPaint) Hier sollte man im einfachsten Fall seinen OpenGL Code einfügen und dann nur noch mit "Invalidate" arbeiten,
da hier garantiert wird, dass der eigene Rendering Context aktiv und das Painthandle offen ist und man sich in einem try-finally Aufruf befindet.
Auserdem werden hier automatisch glFinish und Swapbuffers nach dem Rendern aufgerufen.
Wer unbedingt will, kann auch außerhalb dieser Konstruktion ohne Probleme Rendern, wobei er aber selbst für das korrekte Aufrufen aller Funktionen verantwortlich ist.




TGL2DOutBox:
- Abgeleitet von TGLOutBox, wird jedoch als Standard ohne Z- und StencilBuffer erstellt.
- Außerdem erstellt diese Klasse automatisch eine Matrix, die es erlaubt, direkt Pixelkoordinaten per glVertex-Befehl anzugeben.
Dabei ist die linke, untere Ecke (0,0).
Die Z-Koordinate, die glVertex übergeben wird, muss immer 0 sein.
- In der Designzeit werden ClearColor und DrawColor direkt visuell dargestellt.



Ein Beispielprojekt liegt bei...

Viel Spaß beim Testen


Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.


Zuletzt geändert von Brainiac am Sa Aug 30, 2003 17:08, insgesamt 3-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Aug 30, 2003 13:55 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Aug 20, 2003 22:26
Beiträge: 38
Wohnort: Dresden (noch)
Hab inzwischen noch einen Fehler bei Backup/RestoreMatrices gefunden...
sorry.

Neue Version ist gleich up...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Aug 30, 2003 17:11 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Aug 20, 2003 22:26
Beiträge: 38
Wohnort: Dresden (noch)
So, dank einer kleinen Hilfe arbeitet die Erkennung der Hardwarebeschleunigung jetzt auch fehlerfrei...

Außerdem habe ich die Occulsion Detection jetzt manuell ohne OpenGL12 hinzugefügt.


Wäre übrigens auch nett, wenn hier mal jemand was hinschreiben würde... :roll:


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 14 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.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.007s | 15 Queries | GZIP : On ]