[OpenGL] GL_POINTS werden an der falschen Stelle gerendert
-
- Establishment
- Beiträge: 505
- Registriert: 01.03.2009, 19:09
[OpenGL] GL_POINTS werden an der falschen Stelle gerendert
Hallo Forum :)
Ich habe hier eine Vertexbuffer mit GL_POINTS als Primitive Type vorliegen.
Wenn ich mir im geDebugger den Buffer ansehe stehen da die gleichen Werte drinnen dich ich auf auf der CPU vor dem hochladen zur Grafikkarte zu sehen bekomme.
Problem nur, alle Punkte in dem Buffer werden immer an Position (0, 0, 0) gezeichnet.
Der benutzte Shader wird auch für Dreiecke und Linien bereits verwendet, dort funktioniert alles.
Ansonsten ist bis auf den unterschiedlichen PrimitiveType eigentlich alles gleich soweit ich das überblicke.
Muss ich für Punkte in OGL irgendwas spezielles beachten?
Ich habe hier eine Vertexbuffer mit GL_POINTS als Primitive Type vorliegen.
Wenn ich mir im geDebugger den Buffer ansehe stehen da die gleichen Werte drinnen dich ich auf auf der CPU vor dem hochladen zur Grafikkarte zu sehen bekomme.
Problem nur, alle Punkte in dem Buffer werden immer an Position (0, 0, 0) gezeichnet.
Der benutzte Shader wird auch für Dreiecke und Linien bereits verwendet, dort funktioniert alles.
Ansonsten ist bis auf den unterschiedlichen PrimitiveType eigentlich alles gleich soweit ich das überblicke.
Muss ich für Punkte in OGL irgendwas spezielles beachten?
Bevor man den Kopf schüttelt, sollte man sich vergewissern einen zu haben
- kimmi
- Moderator
- Beiträge: 1412
- Registriert: 26.02.2009, 09:42
- Echter Name: Kim Kulling
- Wohnort: Luebeck
- Kontaktdaten:
Re: [OpenGL] GL_POINTS werden an der falschen Stelle gerende
Wie wäre es mit etwas Code :).
Gruß Kimmi
Gruß Kimmi
-
- Establishment
- Beiträge: 505
- Registriert: 01.03.2009, 19:09
Re: [OpenGL] GL_POINTS werden an der falschen Stelle gerende
Kann ich morgen früh nachliefern, hab mir nur gedacht vielleicht gibts ja irgendwas prinzipelles das man beachten muss für Point Primitives.
Bevor man den Kopf schüttelt, sollte man sich vergewissern einen zu haben
-
- Establishment
- Beiträge: 505
- Registriert: 01.03.2009, 19:09
Re: [OpenGL] GL_POINTS werden an der falschen Stelle gerende
So dann hier nochmal ein klein wenig Code
Hier erstmal der VertexShader.
Die Koordinaten liegen bereits in Weltkoordinaten vor, weshalb Transformation nur aus View und Projektionsmatrix besteht.
Den Pixel Shader spar ich mir da die Minimalversion nichts anderes macht als Color als Ausgabefarbe zu sezten.
Gerendert wird folgendermaßen
Ich hoff mal ich hab nix wichtiges vergessen zu zeigen, ansonsten sagt einfach bescheid
Hier erstmal der VertexShader.
Die Koordinaten liegen bereits in Weltkoordinaten vor, weshalb Transformation nur aus View und Projektionsmatrix besteht.
Code: Alles auswählen
#version 420
layout(location = 0) in vec3 Position3;
uniform mat4 Transformation;
uniform vec4 color;
layout(location = 0)smooth out vec4 vertColor;
void main ()
{
gl_Position = Transformation * vec4(Position3, 1.0);
vertColor = color;
}
Gerendert wird folgendermaßen
Code: Alles auswählen
//buffer creation:
glBindBuffer(GL_ARRAY_BUFFER, m_VertexBufferId);
glBufferData(GL_ARRAY_BUFFER, size, data, GL_STATIC_DRAW);
//gleiches geschieht für den index buffer
//rendern
glProgramUniformMatrix4fvEXT(handle, glGetUniformLocation(handle, "Transformation"), 1, false, &(m_View * m_Projection).data[0][0]);
glDrawElements(glPrimitiveType, mesh->getNumIndices(), GL_UNSIGNED_INT, 0);
glPolygonMode( GL_FRONT_AND_BACK, GL_FILL );
Bevor man den Kopf schüttelt, sollte man sich vergewissern einen zu haben
- dot
- Establishment
- Beiträge: 1746
- Registriert: 06.03.2004, 18:10
- Echter Name: Michael Kenzel
- Kontaktdaten:
Re: [OpenGL] GL_POINTS werden an der falschen Stelle gerende
Und du hast auch ein VAO und einen passenden Index Buffer gebunden? Wo rufst du glVertexAttribPointer() auf?
-
- Establishment
- Beiträge: 505
- Registriert: 01.03.2009, 19:09
Re: [OpenGL] GL_POINTS werden an der falschen Stelle gerende
VAO und Index buffer werden gebunden, hab ich grad nochmal überprüft
glVertexAttribPointer() wird zwischen dem binden der beiden buffer und glProgramUniformMatrix4fvEXT aufgerufen
glVertexAttribPointer() wird zwischen dem binden der beiden buffer und glProgramUniformMatrix4fvEXT aufgerufen
Bevor man den Kopf schüttelt, sollte man sich vergewissern einen zu haben
- dot
- Establishment
- Beiträge: 1746
- Registriert: 06.03.2004, 18:10
- Echter Name: Michael Kenzel
- Kontaktdaten:
Re: [OpenGL] GL_POINTS werden an der falschen Stelle gerende
Und wie? Lass dir nicht immer alles aus der Nase ziehen, poste doch gleich einfach den relevanten Code dazu... ;)Matthias Gubisch hat geschrieben:glVertexAttribPointer() wird zwischen dem binden der beiden buffer und glProgramUniformMatrix4fvEXT aufgerufen
-
- Establishment
- Beiträge: 505
- Registriert: 01.03.2009, 19:09
Re: [OpenGL] GL_POINTS werden an der falschen Stelle gerende
Code: Alles auswählen
glBindBuffer(GL_ARRAY_BUFFER, m_VertexBufferId); //vertex buffer binden
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_IndexBufferId); //index buffer binden
//vertexAttibPointerSetzen
glVertexAttribPointer(0,3,GL_FLOAT, false, vertexSize, 0); //setze das 0te attribut, vertexSize = sizeof(float) * 3, kein offset im buffer
glEnableVertexAttribArray(0);
//setze shader constants (color)
...
glProgramUniformMatrix4fvEXT(handle, glGetUniformLocation(handle, "Transformation"), 1, false, &(m_View) * m_Projection).data[0][0]);
glDrawElements(glPrimitiveType, mesh->getNumIndices(), GL_UNSIGNED_INT, 0);
interessanterweise funktioniert es bei allen anderen primitive typen
Die Punkte werden ja auch gezeichnet, aber alle an der gleichen stellen nämlich bei 0 0 0 anstatt da wo sie landen sollen :(
Bin das ganze gerade nochmal mit dem Debugger durchgeagengen, wenn ma das shader setzen noch dazu nimmt ist das alles was während dem Frame an OGL calls aufgerufen wird.
Bevor man den Kopf schüttelt, sollte man sich vergewissern einen zu haben
-
- Establishment
- Beiträge: 505
- Registriert: 01.03.2009, 19:09
Re: [OpenGL] GL_POINTS werden an der falschen Stelle gerende
Beim Versuch ne kleine Beispiel Anwednung zu schreiben um den kompletten Code posten zu können bin ich jezt draufgekommen.
Es wurde beim Anlegen der Vertex Buffer versehentlich für jeden Punkt einer angelegt und auch benutzt, gschrieben wurden die Daten aber immer in den ersten VB wo sie auch hingehören...
Es wurde beim Anlegen der Vertex Buffer versehentlich für jeden Punkt einer angelegt und auch benutzt, gschrieben wurden die Daten aber immer in den ersten VB wo sie auch hingehören...
Bevor man den Kopf schüttelt, sollte man sich vergewissern einen zu haben