[OpenGL] GL_POINTS werden an der falschen Stelle gerendert

Für Fragen zu Grafik APIs wie DirectX und OpenGL sowie Shaderprogrammierung.
Antworten
Matthias Gubisch
Establishment
Beiträge: 505
Registriert: 01.03.2009, 19:09

[OpenGL] GL_POINTS werden an der falschen Stelle gerendert

Beitrag von Matthias Gubisch »

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?
Bevor man den Kopf schüttelt, sollte man sich vergewissern einen zu haben
Benutzeravatar
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

Beitrag von kimmi »

Wie wäre es mit etwas Code :).

Gruß Kimmi
Matthias Gubisch
Establishment
Beiträge: 505
Registriert: 01.03.2009, 19:09

Re: [OpenGL] GL_POINTS werden an der falschen Stelle gerende

Beitrag von Matthias Gubisch »

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
Matthias Gubisch
Establishment
Beiträge: 505
Registriert: 01.03.2009, 19:09

Re: [OpenGL] GL_POINTS werden an der falschen Stelle gerende

Beitrag von Matthias Gubisch »

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.

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;
}
Den Pixel Shader spar ich mir da die Minimalversion nichts anderes macht als Color als Ausgabefarbe zu sezten.

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 );

Ich hoff mal ich hab nix wichtiges vergessen zu zeigen, ansonsten sagt einfach bescheid
Bevor man den Kopf schüttelt, sollte man sich vergewissern einen zu haben
Benutzeravatar
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

Beitrag von dot »

Und du hast auch ein VAO und einen passenden Index Buffer gebunden? Wo rufst du glVertexAttribPointer() auf?
Matthias Gubisch
Establishment
Beiträge: 505
Registriert: 01.03.2009, 19:09

Re: [OpenGL] GL_POINTS werden an der falschen Stelle gerende

Beitrag von Matthias Gubisch »

VAO und Index buffer werden gebunden, hab ich grad nochmal überprüft

glVertexAttribPointer() wird zwischen dem binden der beiden buffer und glProgramUniformMatrix4fvEXT aufgerufen
Bevor man den Kopf schüttelt, sollte man sich vergewissern einen zu haben
Benutzeravatar
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

Beitrag von dot »

Matthias Gubisch hat geschrieben:glVertexAttribPointer() wird zwischen dem binden der beiden buffer und glProgramUniformMatrix4fvEXT aufgerufen
Und wie? Lass dir nicht immer alles aus der Nase ziehen, poste doch gleich einfach den relevanten Code dazu... ;)
Matthias Gubisch
Establishment
Beiträge: 505
Registriert: 01.03.2009, 19:09

Re: [OpenGL] GL_POINTS werden an der falschen Stelle gerende

Beitrag von Matthias Gubisch »

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);

viel mehr mach ich eigentlich nicht
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
Matthias Gubisch
Establishment
Beiträge: 505
Registriert: 01.03.2009, 19:09

Re: [OpenGL] GL_POINTS werden an der falschen Stelle gerende

Beitrag von Matthias Gubisch »

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...
Bevor man den Kopf schüttelt, sollte man sich vergewissern einen zu haben
Antworten