1x1视口上的颜色选取宽线在OpenGL中不起作用

时间:2016-10-06 21:56:45

标签: opengl

通过颜色挑选,我在从Geforce切换到Radeon卡后遇到了一个奇怪的问题。

线宽为6.问题是:如果线与视口的x轴或y轴平行,则其行为就好像只有1像素宽。如果线条成一定角度,它就可以正常工作。因此,例如,如果线从(10,12)运行到(110,12)它不起作用(平行于x轴),但如果它从(10,12)运行到(110,13)它工作正常。

正常渲染始终正常。

不同之处在于,对于颜色选择,我只渲染1x1视口。如果我渲染一个完整的视口进行拾取,一切正常。所以我的猜测是剪辑不能正确处理这些角落情况。

将根据请求发布代码,但考虑到错误情况的具体情况,我怀疑它是否会有用。有没有人遇到这样的问题?

2 个答案:

答案 0 :(得分:2)

  

不同之处在于,对于颜色选择,我只渲染1x1视口。

顶点被裁剪为在视口内。因此,如果一条线部分位于视口中,则顶点将被剪切为完全位于视口内。

如果该行完全在视口外,则OpenGL规范声明该行被丢弃。该行的宽度被考虑在内。

NVIDIA的实施一直以来都是快速而宽松的。 AMD更严格,但显然它有时适合你。但是根据规范,除非该行实际位于视口内部,否则它根本不起作用。

答案 1 :(得分:0)

4.5规范说:

  

13.5原始剪辑

     

[...]如果图元是一个线段,那么如果它完全位于剪辑体内,则剪切不对它做任何事情,如果它完全位于体积之外,则将其丢弃。

     

如果线段的一部分位于体积中且部分位于外部,则剪切线段并为一个或两个顶点计算新的顶点坐标。剪切的线段端点位于原始线段和剪辑体积的边界上。

     

此剪辑为每个剪切的顶点生成一个值0≤t≤1。如果   剪切顶点的坐标为P,原始顶点的坐标为P 1和P 2,则t由

给出
                          P = t∙P₁ + (1 - t)∙P₂.
     

t的值用于剪切顶点着色器输出,如第13.5.1节中所述。