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:
#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.
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)
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!"
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...:
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!"
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.
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!"
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:
void draw()
{
//hier ein paar zeilen code, um ein 3Eck mit VBO zu erzeugen.
}
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!"
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:
glGenBuffersARB
glBindBufferARB
// und erst dann den ClientState aktivieren. Ich vermute er unterscheidet an dieser Stellen
// zwischen VA und VBO. Und wenn kein Buffer gebunden ist, dann ist es für ihn ein VA.
glEnableClientState
glVertexPointer
glDrawArrays
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]
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:
Mesh::Mesh()
{
... //hier nur inizialisierungen und so weiter
m_pVertices[0].x = 0.0f;
m_pVertices[0].y = 0.0f;
m_pVertices[0].z = -2.0f;
m_pTexCoords[0].u = 0.0f;
m_pTexCoords[0].v = 0.0f;
m_pVertices[1].x = 2.0f;
m_pVertices[1].y = 0.0f;
m_pVertices[1].z = -2.0f;
m_pTexCoords[1].u = 1.0f;
m_pTexCoords[1].v = 0.0f;
m_pVertices[2].x = 2.0f;
m_pVertices[2].y = 2.0f;
m_pVertices[2].z = -2.0f;
m_pTexCoords[2].u = 1.0f;
m_pTexCoords[2].v = 1.0f;
}
void Mesh::BuildVBOs()
{
// Generate And Bind The Vertex Buffer
Glext::getInstance().glGenBuffersARB( 1, &m_nVBOVertices ); // Get A Valid Name
Glext::getInstance().glBindBufferARB( GL_ARRAY_BUFFER_ARB, m_nVBOVertices ); // Bind The Buffer
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!"
Mitglieder in diesem Forum: 0 Mitglieder und 10 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.