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

Aktuelle Zeit: Sa Jul 19, 2025 11:38

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



Ein neues Thema erstellen Auf das Thema antworten  [ 12 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Sa Jun 30, 2007 22:50 
Offline
DGL Member

Registriert: So Jan 23, 2005 13:21
Beiträge: 46
Wohnort: Vietnam
Servus (gleich letztes post von mir bitte lesen. danke)

Ich weiss, is vielleicht eine so dumme Frage, aber da ich VBOs jetzt verwenden will, da sie ja vie performenter (?) is. Ich find einfach nicht den Fehler, weil ich nicht viel getan habe. Habe das File glext.h runtergeladen und zum project hinzugefügt.

Code:
  1. #include <glext.h>


Also wo das ganz GL drinn is nur einen Ordner vorher, weil ich visual studio verwende... Sgma einfach so: richtig kopiert ;)

k, jetzt findet er aber den Befehl nicht... also das headerfile schon, aber den Befehl nicht, und ich weiss nicht warum. Hat vielleicht irgendjemand eine ahnung, woran das leigen kann? das headerfile vielleicht defeckt. Sonst kommt mir nichts in den sinn, aber hab ich doch von opengl.

hoffe, es kann mir jemande helfen, ich bin am ende mit meinem latein.

thx und lg rob

_________________
"As the enemy went to heaven,
we stayed in hell!"


Zuletzt geändert von ISAS am Sa Jul 07, 2007 19:04, insgesamt 2-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: RE
BeitragVerfasst: So Jul 01, 2007 13:54 
Offline
DGL Member

Registriert: So Jan 23, 2005 13:21
Beiträge: 46
Wohnort: Vietnam
Kann das sein, dass mir die library fehlt?
Es steht überall nur, dass man das Headerfile includieren muss, aber da sin ja nur die methodenköpfe definiert, aber code fehlt... stimmt das?

EDIT: Gibs irgendwo ein Tutorial, wie ich das glext einrichte, damit ich endlich VBOs verwenden kann? (verzweifle schon)

EDIT2: Mein code schaut folgendermassen jetzt aus:

Code:
  1. #include "std.h"
  2. #include "Opengl.h"
  3.  
  4. // VBO Extension Definitions, From glext.h
  5. #define GL_ARRAY_BUFFER_ARB 0x8892
  6. #define GL_STATIC_DRAW_ARB 0x88E4
  7. typedef void (APIENTRY * PFNGLBINDBUFFERARBPROC) (GLenum target, GLuint buffer);
  8. typedef void (APIENTRY * PFNGLDELETEBUFFERSARBPROC) (GLsizei n, const GLuint *buffers);
  9. typedef void (APIENTRY * PFNGLGENBUFFERSARBPROC) (GLsizei n, GLuint *buffers);
  10. typedef void (APIENTRY * PFNGLBUFFERDATAARBPROC) (GLenum target, int size, const GLvoid *data, GLenum usage);
  11.  
  12. // VBO Extension Function Pointers
  13. PFNGLGENBUFFERSARBPROC glGenBuffersARB = NULL;                  // VBO Name Generation Procedure
  14. PFNGLBINDBUFFERARBPROC glBindBufferARB = NULL;                  // VBO Bind Procedure
  15. PFNGLBUFFERDATAARBPROC glBufferDataARB = NULL;                  // VBO Data Loading Procedure
  16. PFNGLDELETEBUFFERSARBPROC glDeleteBuffersARB = NULL;            // VBO Deletion Procedure
  17.  
  18. int main(int argc, char* argv[])
  19. {
  20.     unsigned int test = 0;
  21.  
  22.     glGenBuffersARB = (PFNGLGENBUFFERSARBPROC) wglGetProcAddress("glGenBuffersARB");
  23.     glBindBufferARB = (PFNGLBINDBUFFERARBPROC) wglGetProcAddress("glBindBufferARB");
  24.     glBufferDataARB = (PFNGLBUFFERDATAARBPROC) wglGetProcAddress("glBufferDataARB");
  25.     glDeleteBuffersARB = (PFNGLDELETEBUFFERSARBPROC) wglGetProcAddress("glDeleteBuffersARB");
  26.  
  27.     glGenBuffersARB(1, &test);
  28.  
  29.     cout << "Starting Program" << endl;
  30.  
  31.     Opengl::getInstance().execute();
  32.  
  33.     cout << "Stopping Program" << endl;
  34.  
  35.     return 0;
  36. }


Und der Fehler komm bei glGenBuffersARB(1, &test);. Wenns intressiert, an der Graka kanns net liegn: ATI Mobility Radeon X1700 256MB max.512MB shared memory.
Fehler:
Zitat:
First-chance exception at 0x00000000 in Basic.exe: 0xC0000005: Access violation reading location 0x00000000.
Unhandled exception at 0x00000000 in Basic.exe: 0xC0000005: Access violation reading location 0x00000000.

_________________
"As the enemy went to heaven,
we stayed in hell!"


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jul 02, 2007 13:57 
Offline
DGL Member

Registriert: So Jan 23, 2005 13:21
Beiträge: 46
Wohnort: Vietnam
Und wieder bin ich weiter beim Fehlersuchn. Das Nehe-Tutorial45 mit VBOs funktioniert bei mir nämlich einwandfrei zum compiliern. Meine grafikkarte kann ja VBOs. Also, im Nehe Tut gibs eine methode, die überprüft, ob VBOs unterstützt werden. Dort gibt sie mir true zurück. In meinem Project false. Sehr strange. Ich habe dann die Methode, die die Unterstützung überprüft genauer unter die Lupe genommen und konnte die Zeile lokalisieren...:

Code:
  1. bool IsExtensionSupported( char* szTargetExtension )
  2. {
  3.    ...
  4.    pszExtensions = glGetString( GL_EXTENSIONS ); // const unsigned char
  5.    cout << pszExtensions << endl;
  6.    ...
  7. }


Die erste Zeile funktioniert noch (komischerweise). Bei der 2 wirft er jedoch eine Exception. pszExtensions scheint noch immer auf NULL zu zeigen.

Code:
  1. <cout << glGetString( GL_EXTENSIONS ) << enl;


Wirft mir auch eine exception (logischeriweise). Es öffnet sich in beiden Fällen das Assambler-code-file "strlen.asm" und zeigt auf

Zitat:
First-chance exception at 0x1022fb10 (msvcr80d.dll) in Basic.exe: 0xC0000005: Access violation reading location 0x00000000.
Unhandled exception at 0x1022fb10 (msvcr80d.dll) in Basic.exe: 0xC0000005: Access violation reading location 0x00000000.


Zitat:
main_loop:
mov eax,dword ptr [ecx] ; read 4 bytes //hierher


Hat vielleicht von euch jemand eine idee, warum das so ist? Der einzige untschied zwischen meinem Project und das von Nehe ist, dass ich eine Consolen-Application (und glut) verwende. Nehe nur ne Windows-application.[/code]

_________________
"As the enemy went to heaven,
we stayed in hell!"


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jul 02, 2007 14:05 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Hi. Auch wenn es etwas spät ist. Aber irgendwie hatte ich deinen hinzueditierten Code erst jetzt gesehen.

wglGetProcAddress dürfte nur funktionieren wenn du auch einem aktiven Renderkontext hast. Ansonsten kann er dir ja keine Funktionalität einen Kontextes zurück geben. Und wenn du eine Extension benutzt solltest du auch überprüfen ob, diese auch unterstützt wird. Das geht mit glGetString(GL_EXTENSIONS). Denn es kann immer mal passieren, dass auf einem System die Funktionalität nicht unterstützt wird.

Zu dem aktuellen Post. Ich denke das Problem ist das Gleiche. Ohne einen gültigen und aktivem Kontext kannst du auch keine Eigenschaften erfragen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jul 02, 2007 14:15 
Offline
DGL Member

Registriert: So Jan 23, 2005 13:21
Beiträge: 46
Wohnort: Vietnam
Hmm, danke. Bin grad vorher auch drauf gekommen, dass ich zuerst OpenGL inizialisieren muss. Vorher kann er ja nix zurückgebn (Hoffe, du hast das auch gemeint ;) ) Und ich hab mich schon grün und blau geärgert, warum das bei dem einen Prog geht und bei mir nicht.

_________________
"As the enemy went to heaven,
we stayed in hell!"


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jul 04, 2007 20:18 
Offline
DGL Member

Registriert: So Jan 23, 2005 13:21
Beiträge: 46
Wohnort: Vietnam
Es geht einfach net, die VBOs. Werke schon seit Tagen herum, aber es geht einfach nit. Immer Runtime errors...

kann mir einer mal das einfachste Vertex machen, was es überhaupt gibt?
Egal ob jetzt Delphi oder c++ code. Verstehe beides. Also, mit einfach meine ich dann sowas

Code:
  1. void draw()
  2. {
  3. //hier ein paar zeilen code, um ein 3Eck mit VBO zu erzeugen.
  4. }


Das wär super. Weil ich muss zwar sagen, dass das ganze mit Klassen und Objekten eigentlich keine Probleme macht. Aber irgendwie mach Opengl probleme. Einfach das einfachste hinschreiben, um ein 3Eck zu zeichnen. egal, wie schlecht oder unperformiert. Dass kann ich dann alles machen, aber wenns nichtmal geht, kann ich nichts verbessern...

danke im vorraus (hoffe das liest noch jemand, weil es eigentlich nicht mehr zum thema gehört. aber ein eigener thread wär zu schade drum)

_________________
"As the enemy went to heaven,
we stayed in hell!"


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jul 05, 2007 14:28 
Offline
DGL Member

Registriert: So Jan 23, 2005 13:21
Beiträge: 46
Wohnort: Vietnam
Code:
  1. void Mesh::draw()
  2. {
  3.     cout << "DRAW - begin!" << endl;
  4.  
  5.     static GLuint name = 0;
  6.     static GLuint count = 9;
  7.     static int points[] = {0.0f, 0.0f, -2.0f,
  8.                       1.0f, 0.0f, -2.0f,
  9.                       1.0f, 1.0f, -2.0f};
  10.  
  11.     glEnableClientState( GL_VERTEX_ARRAY );
  12.     glEnableClientState( GL_TEXTURE_COORD_ARRAY ); 
  13.  
  14.     Glext::getInstance().glGenBuffersARB( 1, &name );
  15.     Glext::getInstance().glBindBufferARB( GL_ARRAY_BUFFER_ARB, name );
  16.     Glext::getInstance().glBufferDataARB( GL_ARRAY_BUFFER_ARB, count*sizeof(float), &points, GL_STATIC_DRAW_ARB );
  17.  
  18.     Glext::getInstance().glBindBufferARB( GL_ARRAY_BUFFER_ARB, name );
  19.     glVertexPointer( 3, GL_FLOAT, 0, (char*) NULL );     //Unhandled exception at 0x690c3a1c in Basic.exe: 0xC0000005: Access violation reading location 0x00000000.
  20.  
  21.     glDrawArrays( GL_TRIANGLES, 0, 3);
  22.  
  23.     glDisableClientState( GL_VERTEX_ARRAY );
  24.     glDisableClientState( GL_TEXTURE_COORD_ARRAY );
  25.  
  26.     cout << "DRAW - end!" << endl;
  27. }


Warum diese exception? (Ich hoff, dass stimmt alles.

_________________
"As the enemy went to heaven,
we stayed in hell!"


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jul 05, 2007 14:48 
Offline
Ernährungsberater
Benutzeravatar

Registriert: Sa Jan 01, 2005 17:11
Beiträge: 2068
Programmiersprache: C++
Du wandelst NULL zu einem PChar um? Lass die Umwandlung da mal weg.

_________________
Steppity,steppity,step,step,step! :twisted:
❆ ❄ ❄ ❄ ❅ ❄ ❆ ❄ ❅ ❄ ❅ ❄ ❅ ❄ ❄
❄ ❄ ❄ ❅ ❄ ❄ ❄ ❅ ❄ ❄ ❆ ❄ ❄


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jul 05, 2007 15:03 
Offline
DGL Member

Registriert: So Jan 23, 2005 13:21
Beiträge: 46
Wohnort: Vietnam
Zitat:
glVertexPointer( 3, GL_FLOAT, 0, 0 );


Noch immer gleicher fehler...

_________________
"As the enemy went to heaven,
we stayed in hell!"


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jul 05, 2007 15:34 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Also die Kombination glVertexPointer und die AccessViolation an Adresse 0 klingt für mich sehr stark danach, dass er denkt es handelt sich um ein VertexArray (rein Clientseitiger Vorgänger vom VBO). Und dann wird er versuchen auf die Daten des NULL Pointers zuzugreifen. Bei VBOs handelt es sich dabei aber um ein Offset welches vollkommen zu recht NULL sein darf.

Mach mal folgendes.

Code:
  1. glGenBuffersARB
  2.  
  3. glBindBufferARB
  4.  
  5. // und erst dann den ClientState aktivieren. Ich vermute er unterscheidet an dieser Stellen
  6. // zwischen VA und VBO. Und wenn kein Buffer gebunden ist, dann ist es für ihn ein VA.
  7. glEnableClientState
  8.  
  9. glVertexPointer
  10.  
  11. glDrawArrays
  12.  
  13. glDisableClientState


Und du solltest nicht vergessen deinen Speicher wieder Frei zu geben. Sonst läuft er dir zu. Wobei du generell die VBOs nicht wärend des Renders erzeugen solltest. Allerhöchstens solltest du da die Daten verändern. Aber bei der Größe wohl vorerst alles nicht so tragisch. ;)

[edit] Ganz vergessen wird haben auch ein [/url=http://wiki.delphigl.com/index.php/Tutorial_Vertexbufferobject]VBO Tutorial[/url]


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jul 05, 2007 16:37 
Offline
DGL Member

Registriert: So Jan 23, 2005 13:21
Beiträge: 46
Wohnort: Vietnam
Habe das Problem gefundn. Naja, hab dann einfach doch nochmal das von nehe kopiert, weil da hats einigermassen gefunkt. Jetzt hab ich auch fast alles hinbekommen, was vorher nicht gefunkt hat. Habe aber trotzdem noch ein Problem. Irgendwie malt er die Dreiecke nicht richtig. Komme einfach nicht drauf, aber vielleicht seht ihr den Fehler:

Code:
  1. Mesh::Mesh()
  2. {
  3.     ... //hier nur inizialisierungen und so weiter
  4.     m_pVertices[0].x = 0.0f;
  5.     m_pVertices[0].y = 0.0f;
  6.     m_pVertices[0].z = -2.0f;
  7.     m_pTexCoords[0].u = 0.0f;
  8.     m_pTexCoords[0].v = 0.0f;
  9.  
  10.     m_pVertices[1].x = 2.0f;
  11.     m_pVertices[1].y = 0.0f;
  12.     m_pVertices[1].z = -2.0f;
  13.     m_pTexCoords[1].u = 1.0f;
  14.     m_pTexCoords[1].v = 0.0f;
  15.  
  16.     m_pVertices[2].x =  2.0f;
  17.     m_pVertices[2].y =  2.0f;
  18.     m_pVertices[2].z =  -2.0f;
  19.     m_pTexCoords[2].u = 1.0f;
  20.     m_pTexCoords[2].v = 1.0f;
  21. }
  22.  
  23. void Mesh::BuildVBOs()
  24. {
  25.     // Generate And Bind The Vertex Buffer
  26.     Glext::getInstance().glGenBuffersARB( 1, &m_nVBOVertices );                         // Get A Valid Name
  27.     Glext::getInstance().glBindBufferARB( GL_ARRAY_BUFFER_ARB, m_nVBOVertices );            // Bind The Buffer
  28.     // Load The Data
  29.     Glext::getInstance().glBufferDataARB( GL_ARRAY_BUFFER_ARB, m_nVertexCount*3*sizeof(float), m_pVertices, GL_STATIC_DRAW_ARB );
  30.  
  31.     // Generate And Bind The Texture Coordinate Buffer
  32.     Glext::getInstance().glGenBuffersARB( 1, &m_nVBOTexCoords );                            // Get A Valid Name
  33.     Glext::getInstance().glBindBufferARB( GL_ARRAY_BUFFER_ARB, m_nVBOTexCoords );       // Bind The Buffer
  34.     // Load The Data
  35.     Glext::getInstance().glBufferDataARB( GL_ARRAY_BUFFER_ARB, m_nVertexCount*2*sizeof(float), m_pTexCoords, GL_STATIC_DRAW_ARB );
  36. }
  37.  
  38. void Mesh::draw()
  39. {
  40.     if (isSet == false)
  41.     {
  42.         BuildVBOs();
  43.         isSet = true;
  44.     }
  45.  
  46.     glEnableClientState( GL_VERTEX_ARRAY );                     // Enable Vertex Arrays
  47.     glEnableClientState( GL_TEXTURE_COORD_ARRAY );              // Enable Texture Coord Arrays
  48.  
  49.     Glext::getInstance().glBindBufferARB( GL_ARRAY_BUFFER_ARB, m_nVBOVertices );
  50.     glVertexPointer( 3, GL_FLOAT, 0, (char *) NULL );       // Set The Vertex Pointer To The Vertex Buffer
  51.     Glext::getInstance().glBindBufferARB( GL_ARRAY_BUFFER_ARB, m_nVBOTexCoords );
  52.     glTexCoordPointer( 2, GL_FLOAT, 0, (char *) NULL );     // Set The TexCoord Pointer To The TexCoord Buffer
  53.  
  54.     // Render
  55.     glBindTexture(GL_TEXTURE_2D, Texture::getInstance().getTexture("data/pictures/grass1.png"));
  56.     glDrawArrays( GL_TRIANGLES, 0, m_nVertexCount );    // Draw All Of The Triangles At Once
  57.  
  58.     // Disable Pointers
  59.     glDisableClientState( GL_VERTEX_ARRAY );                    // Disable Vertex Arrays
  60.     glDisableClientState( GL_TEXTURE_COORD_ARRAY );             // Disable Texture Coord Arrays
  61. }


Nicht nur, dass die Textur nicht stimmt, das Dreieck schaut so aus: \| also Punkte sind oben links, oben rechts, unten rechts. und bei oben links geht das Dreieck nach vorne...
z ist aber überall gleich. sieht vielleicht jemand den fehler?

_________________
"As the enemy went to heaven,
we stayed in hell!"


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jul 08, 2007 12:07 
Offline
DGL Member

Registriert: So Jan 23, 2005 13:21
Beiträge: 46
Wohnort: Vietnam
Problem gelöst:

Vertex und TextureCoordinate müssen struct sein. Anscheinend kann der das sonst nicht richtig auslesen...

_________________
"As the enemy went to heaven,
we stayed in hell!"


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


Wer ist online?

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