Wie kann ich variieren der Punktgröße in OpenGL glBegin(GL_POINTS)?
Gibt es eine Möglichkeit zum variieren der Punktgröße, wenn die Zeichnung viele Punkte? Ich weiß, es gibt die glPointSize(float), aber gibt es einen Weg, es zu tun in einer 'batch' oder array?
Ich würde gerne die Punkte haben verschiedenen Größen, basierend auf einem Attribut der Daten. Wie jeder Punkt mit x -, y -, z -, und ein size-Attribut. Ich bin mit der frame-buffer jetzt in java.
Könnte ich eventuell verwenden, ist der vertex Shader dafür?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie point-sprite: aktivieren Sie diese mit
glEnable(GL_VERTEX_PROGRAM_POINT_SIZE);
und dann können Siegl_PointSize
- Attribut in das vertex-Programm.Vertex-shader-Beispiel aus einem OpenGL-Diskussion-thread:
glVertexAttrib1f
oderglVertexAttribPointer
zu setzen. Vielleicht schauen Sie unter nehe.gamedev.net/data/articles/article.asp?article=21.Das war, was ich je getan habe,
Ich glaube, es ist mit glPointSize(GLfloat size)
Quelle:
Mit
GL_POINT_DISTANCE_ATTENUATION
(GL14?) Sie können die Koeffizienten für eine Funktion (ich denke, es ist quadratisch) für computing-Punkt-Größe von Z Entfernung.Erhöhen und verringern die Punktgröße betrifft mehr als ein pixel, aber Shader ausgeführt werden soll, die nur einmal pro pixel. Es wird scheitern, denn wenn die shader-Programm ausgeführt wurde, für einen bestimmten pixel, kann die änderung nur Auswirkungen auf die folgenden Pixel, aber nicht das Vorherige Pixel.
Shader-Programme ausgeführt werden, auf viele shader-Einheiten gleichzeitig und für viele Pixel in parallel, der es unmöglich macht, das zu tun, was Sie versuchen zu tun. Die Einschränkung wird sein, dass man kann die pixel-Größe mit einem shader-Programm, aber es wird halten, dessen Größe für alle Pixel-shader-Programm ausgeführt wird.
Könnten Sie versuchen, Sortieren Sie Ihre point-Daten nach Größe und Gruppe Punkte der gleichen Größe in ein array und ziehen Sie jede Reihe mit einem anderen Punkt Größe.
Oder Sie könnten versuchen, es zu tun mit einem Umweg nach dem ersten Rendern der verschiedenen Punkt-Größen in eine textur, und in einem zweiten Durchlauf Rendern die Pixel, die durch den Zugriff auf die textur-Daten und benutzen, um zu testen, ob ein pixel dargestellt werden soll (oder nicht).