Erhöhung und die Punktgröße wirkt sich auf mehr als ein Pixel ab, aber Shadern sollen pro Pixel nur einmal ausgeführt werden. Es wird fehlschlagen, denn wenn das Shader-Programm einmal für ein bestimmtes Pixel ausgeführt wurde, kann sich die Änderung nur auf die folgenden Pixel auswirken, nicht aber auf die vorherigen Pixel.
Shader-Programme werden auf vielen Shader-Einheiten gleichzeitig und für viele Pixel parallel ausgeführt, was es unmöglich macht, das zu tun, was Sie versuchen zu tun. Die Einschränkung wird sein, dass man die Pixelgröße mit einem Shader-Programm einstellen kann, aber es behält seine Größe für alle Pixel, die das Shader-Programm ausführt.
Sie könnten versuchen, Ihre Punktdaten nach Größe zu sortieren und Punkte derselben Größe in einem Array zu gruppieren und jedes Array mit einer anderen Punktgröße zu zeichnen.
Oder Sie könnten versuchen, es mit einer Indirektion zu tun, wo Sie zuerst die verschiedenen Punktgrößen in eine Textur und in einem zweiten Durchlauf rendern die Pixel durch den Zugriff auf die Texturdaten und damit zu testen, ob ein Pixel gerendert werden soll (oder nicht).
Danke. Gibt es eine Möglichkeit, die Punktgröße mithilfe von Scheitelpunktattributen festzulegen, anstatt "gl_pointSize = gl_Normal.x" zu verwenden? – max
Ich denke, dass Sie Ihr eigenes float-Attribut zu diesem Shader hinzufügen und 'glVertexAttrib1f' oder' glVertexAttribPointer' verwenden können, um es zu setzen. Sie können sich http://nehe.gamedev.net/data/articles/article.asp?article=21 ansehen. – tibur
Ok. Vielen Dank. Sind Vertex-Attribute die Standardmethode, um zusätzliche Daten in einen Shader zu übertragen? – max