Was mach ich falsch. Eigentlich müsste ja ein zufälliges Muster zu erwarten sein. Mein Objekt kommt in einer zufälligen Farbe, es ist einfarbig. Somit kommt beim Shader etwas an.
Registriert: Mi Aug 14, 2013 21:17 Beiträge: 588
Programmiersprache: C++
Das Vertexattribut vertexUV hast du auch mit Input versorgt (glVertexAttribPointer)?
Kleine Anmerkung zum Fragmentshader: outColor deklariert man soweit ich das kenne immer als vec4. Ich will nicht ausschließen, dass das auch anders geht, aber es lohnt sich vielleicht, das zu überprüfen.
Edit: Was du in Zeile 5 in Pascal machst, sieht falsch aus. Der Wert von textureID wird sowieso von glGenTextures wieder überschrieben. Nicht Texturen mit Texturkoordinaten verwechseln!
_________________ So aktivierst du Syntaxhighlighting im Forum: [code=pascal ][/code], [code=cpp ][/code], [code=java ][/code] oder [code=glsl ][/code] (ohne die Leerzeichen)
wen tx und ty z.B. 3 ist, dann kommt eine Textur, aber da ich jetzt die Daten mit $FF fülle, müsste das Objekt einfarbig kommen. Wen aber tx und ty zu gross ist, dann kommt eine Schutzverletzung. Irgendwas ist immer noch falsch.
In Zeile 45 lässt du die Adresse eines Array übergeben. Ich weiß nicht wie es in Delphi genau funktioniert, aber in den meisten C Sprachen mit Zeigern hätte man dann einen Doppelpointer. Also ein Zeiger auf den Zeiger, der das erste Element des Arrays markiert.
Zitat:
one for triangle and one for quad
Ich weiß nicht, ob Quad in dem Sinn gemeint ist, aber als Hinweis: In OpenGL 3 wurden Quads gestrichen. Nativ unterstützt OpenGL keine Quads mehr. Du musst also an Stelle eines Quads zwei Dreiecke erzeugen. Mit Indices ist das kein großer Nachteil.
Registriert: Mi Aug 14, 2013 21:17 Beiträge: 588
Programmiersprache: C++
In Zeile 33 tust du so, als wenn du 3D-Vektoren als Texturkoordinaten hättest. Ersetze die 3 mal mit einer 2.
_________________ So aktivierst du Syntaxhighlighting im Forum: [code=pascal ][/code], [code=cpp ][/code], [code=java ][/code] oder [code=glsl ][/code] (ohne die Leerzeichen)
Registriert: Sa Aug 18, 2007 18:47 Beiträge: 694 Wohnort: Köln
Programmiersprache: Java
Du solltest dir mal über die Benennung/Verwendung der Variablen Gedanken machen. Es mag ja platzsparend sein textureID für 2 verschiedene Zwecke zu verwenden, aber es ist keineswegs übersichtlich.
Soweit ich mich an Delphi erinnere ist es keine gute Idee 2-dimensionale Arrays für Texturdaten zu nutzen. Nimm einfach ein einfaches Array und indiziere es mit
Code:
t[x+height*y]
.
Soweit ich weiss, muss man auch nicht
Code:
glEnableVertexAttribArray(xxx);
beim zusammenbauen des VAOs/VBOs benutzen. Geht auch ohne.
Wenn man seine Shader relativ konform hält kann man sich auch das Holen der AttribLocation mittels
Registriert: Mi Aug 14, 2013 21:17 Beiträge: 588
Programmiersprache: C++
damadmax hat geschrieben:
Soweit ich weiss, muss man auch nicht
Code:
glEnableVertexAttribArray(xxx);
beim zusammenbauen des VAOs/VBOs benutzen. Geht auch ohne.
Dass es (bei dir) ohne geht, heißt ja nicht, dass es korrekt ist. Das hier
https://www.opengl.org/sdk/docs/man/xhtml/glVertexAttribPointer.xml hat geschrieben:
Each generic vertex attribute array is initially disabled and isn't accessed when glDrawElements, [...] is called.
verstehe ich jedenfalls so, dass glEnableVertexAttribArray keinesfalls unnötig ist - wenn es das wäre hätte man es wahrscheinlich auch aus neueren OpenGL-Versionen gestrichen.
_________________ So aktivierst du Syntaxhighlighting im Forum: [code=pascal ][/code], [code=cpp ][/code], [code=java ][/code] oder [code=glsl ][/code] (ohne die Leerzeichen)
Registriert: Sa Aug 18, 2007 18:47 Beiträge: 694 Wohnort: Köln
Programmiersprache: Java
Wer lesen kann ist klar im Vorteil.... Im Wiki steht (leicht zu überlesen, zumindest bei mir), dass ein VAO auch die Einstellungen der VertexAttribArrays speichert. Da ich das beim ersten mal überlesen hatte bzw. nichts im 2. Absatz darunter darüber gelesen hatte (da ist nur die Rede von "alles, was ihr mit glVertexAttribPointer einstellen könnt.") habe ich meine VBO Klasse danach gebaut und eben beim Rendern die Attribs aktiviert. Vielleicht überlege ich mir mal ob/wie man das im Wiki Artikel etwas deutlich machen kann.
_________________ Es werde Licht. glEnable(GL_LIGHTING); Und es ward Licht.
Zitat aus einem Java Buch: "C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do it blows your whole leg off"
Registriert: Mi Aug 14, 2013 21:17 Beiträge: 588
Programmiersprache: C++
Bevor hier Missverständnisse entstehen: Ein Vertex Array Object merkt sich nur Sachen, die Vertices betreffen. Texturen gehören nicht dazu (falls du das im letzten Post feststellen wolltest). Texturkoordinaten natürlich schon.
_________________ So aktivierst du Syntaxhighlighting im Forum: [code=pascal ][/code], [code=cpp ][/code], [code=java ][/code] oder [code=glsl ][/code] (ohne die Leerzeichen)
Bevor hier Missverständnisse entstehen: Ein Vertex Array Object merkt sich nur Sachen, die Vertices betreffen. Texturen gehören nicht dazu (falls du das im letzten Post feststellen wolltest). Texturkoordinaten natürlich schon.
Wen man für jedes Objekt eine eigene Textur will, muss man den ganzen Code-Block in RenderScene verschieben, dort wo auch glDrawArrays(....) steht ?
Oder gibt es eine elegantere Lösung, so wie mit den Vertex ?
Registriert: Mi Aug 14, 2013 21:17 Beiträge: 588
Programmiersprache: C++
Initialisieren brauchst du die Textur nur einmal. Code dafür hast du ja schon gepostet. Danach rufst du beim Rendern nur noch
Code:
glBindTexture(GL_TEXTURE_2D, textureID);
auf.
_________________ So aktivierst du Syntaxhighlighting im Forum: [code=pascal ][/code], [code=cpp ][/code], [code=java ][/code] oder [code=glsl ][/code] (ohne die Leerzeichen)
Mitglieder in diesem Forum: 0 Mitglieder und 103 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.