关于opengl:在片段着色器中访问世界空间原始大小

Access world-space primitive size in fragment shader

对于我的片段着色器来说,了解它所属的图元的世界空间大小至关重要。它仅用于渲染矩形(=三角形对)。
自然,我可以在CPU上计算其宽度和高度并将其作为统一值传递,但是从长远来看,使用这样的着色器可能会感到不舒服-必须记住如何计算以及如何计算它或搜索文档。有没有"自动"方法来查找原始大小?
我有一个想法,就是使用一种传递几何着色器来执行此操作(因为这是我所知道的唯一可以访问整个图元的管道的一部分),但这是一个好主意吗?


Is there any"automated" way of finding primitive size?

不,因为"原始大小"的概念完全取决于您,即着色器的工作方式。就OpenGL而言,甚至没有世界空间之类的东西。只有剪辑空间和NDC空间,您的顶点着色器将获取一堆无形的数据(称为顶点属性),并将其丢弃到剪辑空间中。

由于顶点着色器是在每个顶点的基础上运行的,因此看不到其他顶点(除非您将它们作为具有位移索引的另一个顶点属性传递;否则,必须改变输出每个顶点都是扁平的,三角形的0 != vertex_ID % 3会跳过计算),唯一可行的着色器阶段要完全自动化,那就是使用几何体或tesselation着色器,进行准备性计算,将结果作为标量顶点属性发出。