Mer*_*rni 2 opengl viewport vulkan
我有viewport一半是screen size/framebuffer.
x,y,w,h = 0,0,512,512
我的scissor地区已经满了framebuffer
x,y,w,h = 0,0,0 1024,512
我viewport从左到右画了一条远在外面的线.我期待只在视口内绘制线条.我已经在三张不同的显卡上测试了这个,其中两张,我得到了我期待的结果.然而,在第三个线上,线被绘制viewport在scissor区域外,但在区域内.哪一个结果在这里是正确的?据我所知,线的两个顶点应移动到外部viewport位置.不应该在它之外画出来.
如果您10在本网站上阅读了陷阱:https:
//www.opengl.org/archives/resources/features/KilgardTechniques/oglpitfall/
他们正在讨论在外面绘图viewport,但这只是一些特殊情况,例如你有一条很粗的线,我的线宽是1
编辑:在KhronosGroup讨论后:从规范Vulkan 1.0.68:
如果线段的顶点中的任何一个位于剪辑体积之外,则可以剪切线段,为位于剪辑体积之外的每个顶点计算新的顶点坐标.剪切的线段端点位于原始线段和剪辑体积的边界上.
NVIDIA:
我们故意对维护2进行此更改,以允许无弹出点和线.点剪切行为是可查询的,但行剪切行为不是,但我相信行的"首选"行为是无弹出的.我们去年将NVIDIA驱动程序从严密裁剪更改为无弹出,甚至更改了CTS测试以允许这种新行为.所以这一切都按设计工作.
老答案:
视口定义了从标准化设备坐标到窗口坐标的转换.视口转换不会进行任何裁剪.
但是,裁剪确实发生在NDC空间之前,视锥体裁剪确保没有顶点落在视口之外.如果您使用正交投影,剪辑空间和NDC空间是相同的.所以外面的一切[-1,1]都会被削减.如果你没有做任何特殊情况,应该剪切opengl链接谈论顶点.
如果您的两个图形卡在视口内部而另一个在外部,则可能是驱动程序错误.如果您使用的是相当新的Vulkan,那很可能就是这种情况.
| 归档时间: |
|
| 查看次数: |
378 次 |
| 最近记录: |