两种图形API(OpenGL和DirectX)都设计了明确定义的管道,其中几个阶段都可以编程。这些可编程阶段需要获取固定的最小数据量,并应在其上进行明确定义的操作范围,并输出一些已定义的最小输出,以便可以将数据正确地传递到下一个阶段。似乎这些流水线被设计为仅使用有限数量的几何数据类型,对于D3D和OGL而言,它们都是顶点数据和纹理坐标。
但是,如果我打算制作的应用程序在某种情况下不使用顶点(甚至是体素)来表示其几何数据,并且不完全进行变换或投影,栅格化或插值等操作,则API的局限性否则管道会使事情变得困难。
那么,是否有一种方法可以改变图形管道,从而使每个阶段对数据执行的功能以及每个阶段输出的数据类型都对我有利?如果没有,那么有没有办法我可以使用“原始” API函数来构建自己的管道?如果没有,请说明为什么不可能。
编辑:我的应用程序使用密度函数来表示几何。该函数在空间的每个点都有一个值。我将相机的视锥台分为3d网格,每个块可以投影为一个像素。在每个块上,我集成密度函数,并检查其值是否大于要求的值。如果是,则假定该块中存在某些东西,并且渲染与该块相对应的像素。因此,现在在渲染器中,我希望将函数(用字符串表示)传递给图形硬件,而不是传递顶点缓冲区中的顶点数据。这也意味着顶点着色器将没有顶点可以转换为同质的剪贴空间,并且片段着色器不会获取像素信息。取而代之的是,现在大多数查找和评估都针对每个像素进行。