2015-06-23 92 views
0

我试图渲染基本三角形,即时建立视象这样:使用OpenGL ES的怪坐标

GL.Viewport(0, 0, (uint)Width, (uint)Height); 

林顶点着色器:

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 

我不知道为什么。我使用C#所以浮动应该是32位像opengl es的用途。 视口设置正确。

从我的理解,我指定坐标在规范化的设备坐标系统,在两个轴上从-1到1。我不知道为什么这么紧张。

回答

0

好的,知道了。

当我将gl_Position中的最后一个坐标指定为0时,我犯了一个错误。 坐标由最后一个值划分了OpenGL内部裁减过程,以帮助透视变换的一部分,改变它后

gl_Position = vec4(a_pos,0.0,1.0); 

一切都按预期工作。

+0

请注意,如果使用严格执行标准的GLSL编译器(其中一些供应商执行,其他供应商不执行),则此着色器代码不会与ES 2.0一起编译。整数常量不会自动转换为浮点型。因此,无论您目前使用“0”还是“1.0”,而不是“1”,都必须使用“0.0”。 –