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
。