如何混合多样本软件渲染的样本

时间:2017-11-09 17:06:59

标签: c++ graphics rendering rasterizing multisampling

请原谅任何不正确的术语,我会尽力解释。

我想知道渲染技术--gpu / cpu等如何混合/合并多重采样渲染生成的样本? (大概是多次通过。) 要明确 - 我不是要求DirectX / OpenGL示例,我问它实际上是如何工作的。

背景:我已经编写了一个二维多边形绘图功能 - 在C / C ++中 - 它基于通用模型或将每个水平扫描线分成多个样本' (在我的情况下为4)然后使用它来估计覆盖范围。我将这些点夹在4个垂直位置,给我一个4x4网格的样本'每像素。

我目前每个像素生成一个位掩码掩码' samples'被覆盖,也是一个' alpha'如何覆盖这个像素从0到256.这与单个多边形完美配合,所有边都很好地抗锯齿。当绘制像饼图这样的东西时会产生问题,第一块被完美地绘制,但是与它共享边缘的第二块将绘制那些边缘像素。

例如:Multisample Grid Picture在此图片中,我的渲染器将绘制橙色部分,底部中间像素将被此橙色多边形覆盖50%,因此将为50%橙色和50%背景颜色(比如说例如黑色)。然后将绘制绿色多边形并覆盖底部中间像素50% - 因此它将50%绿色与现有的50%橙色和50%黑色混合,使我们50%绿色和25%橙色和25%黑色 - 但实际上黑色背景颜色永远不会进入它,因为像素被完全覆盖,而不是任何一个多边形。

此页面描述了该过程,并说 "在这种情况下,OpenGL将使用覆盖率百分比将前景多边形中的样本与帧缓冲区中已有的颜色混合。例如,对于上图中下方中心的像素,OpenGL将在绿色多边形中执行两个样本,将这些样本平均在一起,然后将得到的颜色50%与该像素的帧缓冲区中已有的颜色混合。 #34; 但没有描述该过程的实际运作方式:https://www2.lawrence.edu/fast/GREGGJ/CMSC420/chapter16/Chapter_16.html

我没有发布源代码,因为它是一个相当大的项目,除了将主循环拆分为回调函数之外,我没有做过与大多数简单多边形渲染器特别不同的事情。

我不能切换到4xwidth和4xheight的渲染缓冲区,因为它不仅仅用于多边形绘制。我很高兴接受所有人加入了#39;多边形在函数运行时是已知的 - 例如,用户需要传递所有饼图多边形,而不是一次传递一个,因为这似乎是一个公平的要求。

任何指导都将不胜感激。

0 个答案:

没有答案