C# OpenGLES奇异坐标

C# OpenGLES奇异坐标,c#,opengl-es,C#,Opengl Es,我正在尝试渲染基本三角形,我正在设置视口,如下所示: GL.Viewport(0, 0, (uint)Width, (uint)Height); Im使用顶点着色器: precision highp float; attribute highp vec2 a_pos; attribute vec3 a_col; varying vec3 v_col; void main() { v_col=a_col; gl_Position = vec4(a_pos,0,0); } 和

我正在尝试渲染基本三角形,我正在设置视口,如下所示:

GL.Viewport(0, 0, (uint)Width, (uint)Height);
Im使用顶点着色器:

precision highp float;
attribute highp vec2 a_pos;
attribute vec3 a_col;

varying  vec3 v_col;
void main()
{
    v_col=a_col;
    gl_Position = vec4(a_pos,0,0);
}
和片段着色器:

varying highp vec3 v_col;
void main()
{
    gl_FragColor  = vec4(v_col,0);
}
但是当我试着用简单的坐标画图时

0,0,0
0,1,0
1,0,0
屏幕的整个右上部分被填满

我必须使用极坐标范围在屏幕上获得三角形:

0,0,0
0,0.00000000000000000005f,0
0.00000000000000000005f,0,0
我不知道为什么。Im使用C#所以浮点应该是32位的,就像opengl es使用的一样。 视口设置正确

根据我的理解,我在规范化设备坐标系中指定坐标,该坐标系在两个轴上的跨度为-1到1。我不知道这为什么会这么长

好的,我知道了

当我将gl_位置的最后一个坐标指定为0时,我犯了一个错误。 将坐标更改为后,作为opengl内部剪裁过程的一部分,坐标将除以最后一个值,以帮助进行透视变换

 gl_Position = vec4(a_pos,0.0,1.0);

一切按计划进行

请注意,如果您使用严格执行该标准的GLSL编译器(某些供应商执行,其他供应商不执行),则此着色器代码将不会使用ES 2.0进行编译。整数常量不会自动转换为浮点。因此,无论您当前在哪里使用
0
,都必须使用
0.0
,并且
1.0
而不是
1