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

Aktuelle Zeit: Fr Jul 11, 2025 04:56

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: OpenGL 1.5???
BeitragVerfasst: Mo Dez 22, 2003 01:07 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Okt 12, 2002 18:43
Beiträge: 10
Hey, ich versuche (mal wieder) mich näher mit OpenGL zu befassen, aber diesmal scheiterts bereits beim Zusammensuchen der richtigen pas Dateien :(
Hab mir die OpenGL15 Datei gezogen, ins Verzeichnis gepackt und anschließend im 2. Anfängertutorial opengl12 durch dglOpenGL (in der uses-liste) ersetzt!
Dann gibt es aber folgenden Fehler:
Zitat:
Operator aurf diesen Operanden nicht anwendbar

an der Stelle
Code:
  1.  
  2.   if not LoadOpenGL then
  3.     Halt(100)
  4.  

In der OpenGL Datei ist LoadOpenGL als Prozedur deklariert (meine ich), und damit kann das natürlich nicht mehr funktionieren... Was mach ich falsch???
thx für Hilfe, mfg
Robert

P.S.: Wieso braucht die Geometry.pas neuerdings noch die Unit VectorTypes?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Dez 22, 2003 11:32 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 13, 2002 12:18
Beiträge: 1063
Zu 1) die OpenGL DLLs werden in dglOpenGL mittels InitOpenGL geladen, danach wird mittels CreateRenderingContext ein OpenGL Renderkontext erstellt und mit ActivateRenderingContext aktiviert - Bei Lischke war das M.E. ebenso, LoadOpenGL und Konsorten dienten nur der Kompatibilität.

Zu 2) von der Geometry.pas schwirren so viele Versionen herum, dass es gar nicht mehr schön ist. Die Lehrreichste ist die Ursprüngliche, in der alles schön in Pascal codiert ist, sodass man Code leicht übernehmen kann, die Interessanteste hat fast alle Funktionen in Assembler codiert, und es gibt sogar eine mit 3D-Now Unterstützung.
Welche du jetzt hast, kann ich dir leider nicht sagen - würde dir aber ohnehin anraten, die Geometry.pas eher als Orientierung zu verwenden, und dir deine eigene Hilfsbibliothek mit mathematischen Routinen zusammenzustellen.
Irgendwann benötigst du ohnehin spezielle Sachen, die dort so nicht vorkommen - und dann ist es praktisch, seine fünfzig benötigten Routinen nicht in siebzehn Bibliotheken verteilt zu haben.

_________________
Viel Spaß beim Programmieren,
Mars
http://www.basegraph.com/


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Dez 22, 2003 11:47 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Okt 12, 2002 18:43
Beiträge: 10
Hm... Dann weiß ich zumindest, dass das alles nicht auswegslos ist ;)
Ich glaube, ich hab schon mal irgendwo gelesen, wie man mit diesen Funktionen umzugehen hatte... Aber ich finds nit wieder *heul* Welche Paramter erwarten diese Funktionen denn jetzt von mir???*nicht.durchblick*


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Dez 22, 2003 11:51 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Initialisierung :
Ich hab mir extra die Mühe gemacht und der dglOpenGL.pas ne readme.html beigelgt, in der drin steht wie diese initialisiert wird, also lohnt es sich immer in solche Dateien einen Blick zu werfen.

CreateRenderingContext :
Code:
  1. CreateRenderingContext(DC : HDC;Options : TRCOptions;ColorBits,ZBits,StencilBits,AccumBits,AuxBuffers : Integer;Layer : Integer)

Parametererklärung :
DC = Dein Gerätekontext auf dem du die OpenGL-Szene ausgeben willst
Options = Optionen für den RC (z.b. [opDoubleBuffered])
ColorBits = Farbtiefe
ZBits = Bits für den Tiefenpuffer
Stencilbits = Tiefe des Stempelpuffers
Accumbits = Anzahl der Akkumulationspuffers (auf den meisten Consumerkarten nicht vorhanden, also besser nicht nutzen)
Auxbuffers = Anzahl der Auxilliarybuffers (besser nicht verwenden, s.o.)
Layer = Eigentlich der Layer auf dem GL dargestellt werden soll, aber wird von kaum einer Consumerkarte unterstützt

Typischer Aufruf sieht dann so aus :
Code:
  1. CreateRenderingContext(DC, [opDoubleBuffered], 32, 24, 0, 0, 0, 0)

In OpenGL12.pas verlangt die Funktion noch ne Palette als letzten Parameter. Den haben wir in dglOpenGL.pas allerdings weggelassen, da heute kaum jemand in nem 256-Farbenmodus rendern will.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Zuletzt geändert von Sascha Willems am Mo Dez 22, 2003 11:55, insgesamt 2-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Dez 22, 2003 11:54 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 13, 2002 12:18
Beiträge: 1063
Also für ein Template das OpenGL12 verwendet, sollte es eigentlich genügen LoadOpenGL (das dort ja schon als "veraltet" markiert war) durch InitOpenGL zu ersetzen.

Ansonsten:
Code:
  1. type
  2.  TRCOptions = set of (opDoubleBuffered,opGDI,opStereo);
  3.  
  4. function CreateRenderingContext(DC : HDC;Options : TRCOptions;ColorBits,ZBits,StencilBits,AccumBits,AuxBuffers : Integer;Layer : Integer) : HGLRC;


was soll ich da jetzt noch viel erklären: DC muss halt ein gültiger Gerätekontext eines Fensters sein, den Rückgabewert kannst du dann für ActivateRenderingContext verwenden, damit die aufgerufenen OpenGL Operationen dann auch darin stattfinden (genaugenommen lädt ActivateRenderingContext auch einige Routinen dynamisch nach, die sich etwa bei unterschiedlichen Farbauflösungen ändern könnten). Layer kannst du ignorieren (weiß wirklich nicht, warum Lischke den eingebaut hat, meines Wissens unterstützt ohnehin keine Consumerkarte mehrere Layers...)

_________________
Viel Spaß beim Programmieren,
Mars
http://www.basegraph.com/


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Dez 22, 2003 14:37 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Okt 12, 2002 18:43
Beiträge: 10
Ich scheine wohl wirklich zu doof zu sein :( :
Ich habe also die im Readme beschriebene Prozedur MyGLInit in mein Programm übernommen:
Code:
  1. procedure MyGLInit;
  2. ...
  3. implementation
  4.  
  5. procedure MyGLInit;
  6. var
  7.    MyDC : HDC;
  8.    MyRC : HGLRC;
  9. begin
  10. InitOpenGL;
  11. MyDC := GetDC(mainform.Handle);
  12. MyRC := CreateRenderingContext(MyDC, [opDoubleBuffered], 32, 24, 0, 0, 0, 0) ;
  13. ActivateRenderingContext(MyDC, MyRC);
  14. end;

Dann hab ich im OnCreate Ereignis der Form nur noch stehen:
Code:
  1. procedure TMainForm.FormCreate(Sender: TObject);
  2. begin
  3. MyGLInit;
  4. end; (*FormCreate*)

Und wenn ich das jetzt starte, krieg ich wieder nix als Fehlermeldungen...
Hoffe ihr helft mir noch mal!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Dez 22, 2003 15:01 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Wie wärs denn wenn du uns die Fehlermeldungen die du bekommst mitteilst (Art und ggf. Wortlaut) ? Ansonsten können wir dir ja kaum helfen.

P.S. : DC und RC sollte man global deklarieren, da die ja noch an anderen Stellen gebraucht werden (z.B. Freigabe eben derer beim Programmende).

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 5 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 | 14 Queries | GZIP : On ]