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

Aktuelle Zeit: Do Jul 10, 2025 22:00

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



Ein neues Thema erstellen Auf das Thema antworten  [ 23 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: OpenGL 3
BeitragVerfasst: Do Apr 23, 2009 11:23 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Dez 03, 2008 12:01
Beiträge: 167
Wohnort: /country/germany
Programmiersprache: C++ / FreeBASIC
Hi,
ich hab mich mal ein bisschen über OpenGL 3 informiert. Da hab ich gelesen, das der immediate-mode (glBegin, glEnd) abgeschafft wurde, bisher hab ich aber meine Quads&Triangles so gezeichnet. Wie mach ich das bei OpenGL 3?
Ich hab auch gelesen, das der immediate-mode nur noch mit der compatibilty-extension funktioniert. Wird die automatisch aktiviert? Oder funktioniert meine Methode, weil ich noch die OpenGL 2 libs habe?
Und wo bekomme ich die libs für OpenGL 3(.1) her?
Und was wurde noch weggelassen? Muss man noch was beachten?

So, ich danke schonmal für Antworten.
Und bitte nicht hauen wenn ich irgendwelchen Unfug gesagt habe ;)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Apr 23, 2009 11:54 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Das ist Richtig. Wenn du OpenGL 3.0+ verwendest, dann existiert der Imediate Mode nicht mehr. Alle Farbberechungen der Oberflächen laufen dann auch über Shader. Allerdings musst du dazu auch OpenGL 3.0 verwenden. Aber das ist nicht einfach so automatisch der Fall. In 3.0 wurde eine neue Erweiterung eingeführt mit der man einen aufwärtskompatiblen Kontext erstellen kann. Nur dieser Kontext unterstützt wirklich OpenGL 3.0+. Ohne diesen Kontext arbeitest du weiterhin auf einem 2.0 Kontext und dann ändert sich für dich nichts. Wirklich neue Features kommen dann aber auch nicht hinzu.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Apr 23, 2009 18:05 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Dez 03, 2008 12:01
Beiträge: 167
Wohnort: /country/germany
Programmiersprache: C++ / FreeBASIC
Ok, danke.
Kannst du mir vielleicht sagen, wo ich ein Tutorial, oder etwas Ähnliches, finde, das erklärt wie ich diesen Kontext erstelle und wie ich dann zeichne? Ich hab selbst noch nichts gefunden.
Btw: Lohnt die Anschaffung des OpenGL RedBooks? Ist das überhaupt aktuell (OpenGL 3.0/1)?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Apr 23, 2009 18:30 
Offline
DGL Member
Benutzeravatar

Registriert: So Jun 04, 2006 12:54
Beiträge: 263
Durch XGL und WGL ist es notwendig entweder für jede Plattform einen eigenen Pfad zu schreiben oder eine Biliotek zu verwenden. Zur Zeit sieht es so aus als wenn wenigstends die SVN version von libSDL unterstützung mitbringt.

Nebenbei macht der Einsatz von OpenGL haupsächlich dann sinn wenn man wieder vom Scratch startet und konsequent deprecated markierte Techniken vermeidet. Dies bedeutet allerdings auch, das man sich einen eigenen Matrix stack bauen muss.

_________________
Lumina plattform unabhängige GLSL IDE


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Apr 23, 2009 20:11 
Offline
Forenkatze
Benutzeravatar

Registriert: Mi Okt 22, 2003 18:30
Beiträge: 1945
Wohnort: Närnberch
Programmiersprache: Scala, Java, C*
oc2k1, ich unterstell jetzt einfach mal, dass darkinsanity nicht sooo oft mit Matrix Stacks herumspielt. Wir sind hier immerhin im Einsteiger-Forum ^.^

_________________
"Für kein Tier wird so viel gearbeitet wie für die Katz'."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Apr 23, 2009 21:23 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Außerdem muss noch erwähnt werden, dass die Unterstützung für OGL3.0 erst bei neuen Karten verfügbar ist. Die meisten GraKas die man antreffen wird, können kein OGL3.0

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Apr 24, 2009 06:32 
Offline
DGL Member
Benutzeravatar

Registriert: Di Okt 03, 2006 14:07
Beiträge: 1277
Wohnort: Wien
Und ich muss auch meinen Senf dazugeben: ich habe vor ein paar Wochen im Linux (Ubunut) Source Code herumgestöbert, weil ich wissen wollte, wie sie diese tollen Desktop-Effekte machen. Im Besonderen habe ich mir das Plugin angesehen, welches das Fenster-Resize durchführt. Sie arbeiten mit OpenGL - was denn sonst - und ratet mal, wie sie die Vertices übergeben: mit glBegin/glEnd. Du bist also in guter Gesellschaft, darkinsanity. Ich tippe jetzt mal: so bald wird der alte Rendering Context nicht absterben.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Apr 24, 2009 10:13 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Zitat:
Da hab ich gelesen, das der immediate-mode (glBegin, glEnd) abgeschafft wurde, bisher hab ich aber meine Quads&Triangles so gezeichnet. Wie mach ich das bei OpenGL 3?

Zum Beispiel mit VertexBufferObjects. Diese kannst du auch mit OpenGL 1.4 schon nutzen, sind dort aber noch als Extension realisiert. Ich glaube ab OpenGL 2.0 oder 2.1 sind die fest integriert. Im Wiki gibt es ein Tutorial.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Apr 24, 2009 11:56 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Ab 1.5 sind VBOs fester Bestandteil des OpenGL Kerns. Also schon ein paar Jahre.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Apr 27, 2009 11:12 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Dez 03, 2008 12:01
Beiträge: 167
Wohnort: /country/germany
Programmiersprache: C++ / FreeBASIC
ok, ich hab mich mal an VBO´s versucht. Nur teilt mir der FreeBASIC-Compiler mit, das es die funktionen (glGenBuffers usw.) nicht gibt, ich muss die weiterhin wie Extensions benutzen. Liegt das jetzt an meinem Header (der sollte eigentlich mindestens OpenGL 2.1 unterstützen) oder ist das immer so?
@oc2k1: Matrix-Stack? Also so was wie glPushMatrix usw?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Apr 27, 2009 16:28 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Okt 04, 2006 15:42
Beiträge: 78
Wohnort: Bonn
Programmiersprache: Python, C++, Delphi
Wenn es die Funktionen "nicht gibt", dann liegt es an deinem Header.
-
Nicht nur glPushMatrix und co., sondern auch unscheinbare Sachen wie glRotatef, glTranslatef
fallen weg (wenn ich das richtig mitbekommen habe). Du musst die Matrizen selbst bearbeiten
und dann dem Vertex-Shader per uniform übergeben.

Dafür solltest du sinnigerweise optimierte Funktionen (z.B. mit SSE) nutzen - d.h. selbst schreiben
musst du den Kram letztendlich doch nicht. Ist nur flexibler und speckt den GL-Kern weiter ab.


Zuletzt geändert von waran am Mo Apr 27, 2009 16:30, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Apr 27, 2009 16:30 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2623
Wohnort: Berlin
Programmiersprache: Go, C/C++
Wenn du mit OpenGL3 anfängst, dann hast du neben den schon erwähnten vbo und fehlenden Matrix support noch mit GLSL1.4 zu kämpfen, da du nichts sehen wirst, solange du kein shader gebunden hast.
In OpenGL3 ist ein großteil der fixed function pipeline rausgeflogen, was auch erklärt, wieso man nun selber die Matrizen erstellen und verwalten muss und das das verarbeiten von vertice und shading durch ein shader gemacht werden muss.

Die glGenBuffers und anderen Befehle für VBO sollten mit 1.5 verfügbar sein, wenn du ein 2.x header hast, dann sollten noch funktionen ala glEnableVertexAttribArray, glGetAttribLocation und glVertexAttribPointer existieren. Letztere funktionen benötigst du z.B. in OpenGL3, da glVertexPointer, glNormalPointer und so weiter(deprecated seit OGL3.0) nicht mehr existieren. Der Header scheint veraltet zu sein, wenn glGenBuffers nicht drin ist.

Matrix-Stack, ab OpenGL3 gibt es diesen nicht mehr und es müssen die Modelview Matrix und Projectionview Matrix selber erstellt und verwaltet werden, was bedeutet man hat kein glTranslate, glRotate, glLoadIdentity, glLoadMatrix, glPushMatrix, glPopMatrix, gluPerspective, gluLookAt aber es gibt grund zur freude, glViewport gibt es noch xD (hat nichts mit den Matrizen zu tun sondern mit dem Fensterpuffer).

_________________
"Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren"
Benjamin Franklin

Projekte: https://github.com/tak2004


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Apr 28, 2009 11:44 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Dez 03, 2008 12:01
Beiträge: 167
Wohnort: /country/germany
Programmiersprache: C++ / FreeBASIC
So, da mein Programm einfach crasht wenn es ein VBO zeichnen soll, hab ich mir mal ein Tool gesucht, mit dem ich rausfinden kann was da schief läuft. Da hab ich auf opengl.org das Tool "GLIntercept" gefunden, welches mir folgendes mitteilt:

Zitat:
GL Intercept Log. Version : 0.5 Compile Date: Dec 3 2005 Run on: Mon Apr 27 20:29:25 2009

===================================================
GL ERROR - Function glBindBuffer generated error GL_INVALID_ENUM
GL ERROR - Function glBufferData generated error GL_INVALID_OPERATION
GL ERROR - Function glBindBuffer generated error GL_INVALID_ENUM
GL ERROR - Function glBufferData generated error GL_INVALID_OPERATION


Ich hab aber keine Ahnung, was ich falsch gemacht habe. Daher hier mal die wichtigsten Code-Teile (ich hoffe ihr habt nichts dagegen, dass ich hier FreeBASIC-code poste):

Code:
  1. #include once "GL/gl.bi"
  2. #include once "GL/glu.bi"
  3. #include once "GL/glext.bi"
  4.  
  5. #IF defined (__FB_LINUX__)
  6.     #INCLUDE ONCE "GL/glx.bi"
  7. #ELSEIF defined (__FB_WIN32__)
  8.     '#INCLUDE ONCE "windows.bi"
  9.     extern "windows" lib "gdi32"
  10.         type PROC as function () as integer
  11.         declare function wglGetProcAddress (byval as ZSTRING ptr) as PROC
  12.     end extern
  13. #ELSE
  14.     #ERROR "Unsupported Platform!"
  15. #ENDIF
  16.  
  17.  
  18. function YangGL_GetProcAddress (extensionname as STRING) as any ptr
  19.     #IF defined (__FB_LINUX__)
  20.         return glXGetProcAddressARB (extensionname)
  21.     #ELSEIF defined (__FB_WIN32__)
  22.         return wglGetProcAddress (extensionname)
  23.     #ENDIF
  24. end function
  25.  
  26.  
  27.  
  28.  
  29. 'Das mach ich, da mit meiner glext.bi wohl etwas nicht stimmt...
  30. dim shared glGenBuffers as PFNGLGENBUFFERSPROC
  31. dim shared glDeleteBuffers as PFNGLDELETEBUFFERSPROC
  32. dim shared glBindBuffer as PFNGLBINDBUFFERPROC
  33.  
  34. 'glBufferData scheint in der glext.bi falsch zu sein:
  35. type xPFNGLBUFFERDATAPROC as sub(byval as GLenum, byval as GLsizei, byval as GLvoid ptr, byval as GLenum)
  36. dim shared glBufferData as xPFNGLBUFFERDATAPROC
  37.  
  38. type Xenon_model
  39.     triangles as GLuint
  40.     tsize as GLsizei
  41.     quads as GLuint
  42.     qsize as GLsizei
  43. end type
  44.  
  45.  
  46. 'Die Init-Routine (Xenon_log schreibt eine logfile)
  47. sub Xenon_init
  48.     Xenon_log "Running Xenon 3D-Engine, compiled with " & __FB_SIGNATURE__ & " on " & __DATE__ & " " & __TIME__
  49.     glEnableClientState (GL_VERTEX_ARRAY)
  50.    
  51.     glGenBuffers = cast(PFNGLGENBUFFERSPROC, YangGL_GetProcAddress("glGenBuffers"))
  52.     glDeleteBuffers = cast(PFNGLDELETEBUFFERSPROC, YangGL_GetProcAddress("glDeleteBuffers"))
  53.     glBindBuffer = cast(PFNGLBINDBUFFERPROC, YangGL_GetProcAddress("glBindBuffer"))
  54.     glBufferData = cast(xPFNGLBUFFERDATAPROC, YangGL_GetProcAddress("glBufferData"))
  55.    
  56.     Xenon_log "glGenBuffers : " & YangGL_GetProcAddress("glGenBuffers")
  57.     Xenon_log "glDeleteBuffers : " & YangGL_GetProcAddress("glDeleteBuffers")
  58.     Xenon_log "glBindBuffer : " & YangGL_GetProcAddress("glBindBuffer")
  59.     Xenon_log "glBufferData : " & YangGL_GetProcAddress("glBufferData")
  60. end sub
  61.  
  62.  
  63. glGenBuffers (1, @Model.triangles)
  64. glGenBuffers (1, @Model.quads)
  65.  
  66. 'Funktioniert nicht
  67. glBindBuffer (1, Model.triangles)
  68.  
  69. 'Funktioniert auch nicht:
  70. glBindBuffer (1, cast(UINTEGER, @Model.quads))


Falls es etwas hilft hier auch mal das logfile:

Zitat:
20:29:27 - glGenBuffers : 6789808
20:29:27 - glDeleteBuffers : 6789904
20:29:27 - glBindBuffer : 6790000
20:29:27 - glBufferData : 6790096


So, könnt ihr mir da vielleicht weiterhelfen? Was mache ich nur falsch?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Apr 28, 2009 12:17 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2623
Wohnort: Berlin
Programmiersprache: Go, C/C++
Schau mal hier.
Du hast glBindBuffer (1, Model.triangles) statt glBindBuffer(GL_ARRAY_BUFFER,Model.triangles) verwendet.
Das erklärt beide Logeinträge "GL ERROR - Function glBindBuffer generated error GL_INVALID_ENUM".
Alles danach sind dann erstmal Folgefehler.

_________________
"Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren"
Benjamin Franklin

Projekte: https://github.com/tak2004


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Apr 28, 2009 12:24 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Okt 04, 2006 15:42
Beiträge: 78
Wohnort: Bonn
Programmiersprache: Python, C++, Delphi
GL_ARRAY_BUFFER hat den Wert 0x8892, für den Fall, dass du die Konstante nicht in deinem Header hast.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 23 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 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.011s | 15 Queries | GZIP : On ]