Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios OpenGL ES 2.0四元渐变_Ios_Objective C_Opengl_Opengl Es - Fatal编程技术网

Ios OpenGL ES 2.0四元渐变

Ios OpenGL ES 2.0四元渐变,ios,objective-c,opengl,opengl-es,Ios,Objective C,Opengl,Opengl Es,如何使用OpenGL ES 2.0绘制四边形渐变 不幸的是,OpenGL ES 2.0本机不支持四边形。我很想给四个四边形顶点中的每一个都附加一个不同的颜色,这样OpenGL就可以在这四个点/颜色之间绘制一个漂亮的渐变。(就像3个顶点和一个三角形一样) 如何使用GL_三角形获得完全相同的外观?如果绘制一个三角形带,其顶点与四边形相同,则应获得与四边形相同的视觉输出 唯一的诀窍是需要对顶点重新排序。考虑这个形状… UL---UR | | | | | | LL---LR 也

如何使用OpenGL ES 2.0绘制四边形渐变

不幸的是,OpenGL ES 2.0本机不支持四边形。我很想给四个四边形顶点中的每一个都附加一个不同的颜色,这样OpenGL就可以在这四个点/颜色之间绘制一个漂亮的渐变。(就像3个顶点和一个三角形一样)


如何使用GL_三角形获得完全相同的外观?

如果绘制一个三角形带,其顶点与四边形相同,则应获得与四边形相同的视觉输出

唯一的诀窍是需要对顶点重新排序。考虑这个形状…

UL---UR
|     |
|     |
|     |
LL---LR
也许您已经对顶点进行了排序
LL、LR、UR、UL
。这将产生面的逆时针缠绕,从而形成整个形状。但是,它不适用于三角形条带,因为条带要求上一个三角形的最后两个顶点构成下一个三角形的一条边。这意味着这里的第二个和第三个顶点需要是对角线,但这里它们是边(
LR,UR
是四边形的右边)

如果你像这样重新排列你的顶点,
LR,UR,LL,UL
,那么当你被当作一个三角形带处理时,你会得到以下结果

UL---UR
|    /|
|  /  |
|/    |
LL---LR
然后OpenGL将其解释为两个三角形,其顶点为
LR、UR、LL
LL、UR、UL


通过对顶点重新排序,同样可以将给定的四边形条带转换为三角形条带

杰里科的回答涉及“从三角形生成四边形”部分,而德哈斯的评论暗示了梯度插值部分的解决方案。把他们聚在一起

将四边形作为tristrip发送(这比三角形好-不需要指定两次顶点,而且将VBO发送到GPU需要花费时间)。将纹理坐标添加到每个顶点:

UL: (0.0, 1.0)
UR: (1.0, 1.0)
LL: (0.0, 0.0)
LR: (1.0, 0,0)
然后,在片段着色器中,不使用纹理坐标(作为变量通过顶点着色器的顶点属性)来查找纹理,而是基于texcoord设置输出颜色:

varying vec2 texcoord;

main() {
    // simple black-white vertical gradient
    gl_FragColor = vec4(texcoord.y);
}

您想要的似乎是横跨矩形的双线性插值。纹理基本上提供了这种功能。但是,不能仅将颜色值作为顶点属性指定给每个顶点。你需要一种方法来访问顶点着色器中的所有4种颜色。你是说我可以在每个顶点上传递所有4种颜色?那么如何计算顶点着色器中的结果颜色呢?可能的重复不是重复,因为我不想每次都使用纹理,而且它没有回答我问的问题@derhass如果要在4个值之间插值,那么它们不能是顶点属性,因为一次最多只能有三个。您需要使用纹理,或者使用四种颜色的统一值,并使用纹理坐标在片段着色器中手动执行插值。使用2x2纹理基本上可以实现相同的插值,而无需在片段着色器中进行大量手动计算,而且速度可能更快。不管怎样,你面临的问题和另一个问题一样,所以是的,这是一个重复的问题。所以你说,如果我使用一个有4种不同颜色的三角形条带,当从UL到LR时,不会有硬边?它会无缝地融合UL和LR的颜色吗?我现在明白你的意思了,抱歉我误解了你的问题。然而,仍然有一个简单的解决方案:现在这听起来很有希望,谢谢!只剩下一个问题:我如何在四种颜色之间插值?我会将所有四种颜色传递给片段着色器,并基于texCoord在它们之间进行插值吗?或者可以直接在顶点着色器中计算并将其作为一个变量传递给片段着色器吗?还有另一个问题:绘制扭曲的矩形仍然有效吗?例如,当两个顶点重叠且四边形形成三角形时(梯度应看起来像角度梯度的切片)。