您好我在android上使用OpenGL ES 2.0
。我创建了一个形状,但它比屏幕大。如何设置缩放尺寸,以便OpenGL ES
版本2
中的所有形状都可以显示在屏幕上?
答案 0 :(得分:0)
在任何情况下,形状都不会比屏幕大。您的案例中的屏幕是一个物理设备,旨在为您呈现视觉内容。另一方面,在您的情况下,形状是一组指令,可用于在屏幕上以可视方式呈现内容。
因此,该陈述的有趣部分实际上是如何在视觉上呈现该形状。您未能提供有关如何“创建”您的形状或其形状的任何信息,但在大多数情况下,我们所讨论的是定义为3D矢量(在其他数据旁边)的点,从中创建并在屏幕上绘制曲面。如果你的形状不适合你的屏幕,那么你应该检查你如何在屏幕上显示这些数据,并可能缩放你的形状。
在openGL中,所有内容都已标准化,因此您的屏幕坐标位于[-1.0, 1.0]
范围内,这意味着屏幕左侧的值为-1.0
,右1.0
,底部{{1} }和顶部-1.0
。您可能无法更改,但您需要缩放/转换所有点,顶点以满足您的需求。为了在ES2中这样做,我们通常在顶点着色器中使用矩阵,该矩阵着色器旨在在GPU上执行此类操作。
要使用矩阵我相信您可以搜索一下,以便在顶点着色器中插入一个制服并将其与您的代码连接。然后你应该看一下用什么工具来操作矩阵。您很可能会找到一种工具,这种工具可以很好地呈现正交或平截头投影中的对象。在某些情况下,通过在矩阵上使用translate方法可以帮助您移动对象。
要使用矩阵解决您的问题(从屏幕上绘制形状),您有多种方法:
1.0
矩阵并设置足够大的边框参数,例如ortho
,应使形状看起来小100倍left = -100.0, right = 100.0...
矩阵缩小形状大小scale
矩阵与某些视野一起使用,并将其与frustum
矩阵相结合,将形状移开这实际上取决于使用的场景,但选择最有意义的内容(在您的情况下,您再次未能提供任何信息)。
答案 1 :(得分:0)
这项工作(以适应OpenGL ES屏幕的边缘)是着色器的职责。您手动编码着色器文本和顶点代码。 你应该有这样的东西:
public static final String vs_Text =
"uniform mat4 uMVPMatrix;" +
"attribute vec4 vPosition;" +
"attribute vec4 a_Color;" +
"attribute vec2 a_texCoord;" +
"varying vec4 v_Color;" +
"varying vec2 v_texCoord;" +
"void main() {" +
" gl_Position = uMVPMatrix * vPosition;" +
" v_texCoord = a_texCoord;" +
" v_Color = a_Color;" +
"}";
public static final String fs_Text =
"precision mediump float;" +
"varying vec4 v_Color;" +
"varying vec2 v_texCoord;" +
"uniform sampler2D s_texture;" +
"void main() {" +
" gl_FragColor = texture2D( s_texture, v_texCoord ) * v_Color;" +
" gl_FragColor.rgb *= v_Color.a;" +
"}";
请注意这是一般代码,您可能会更改某些部分。 有关详细信息,请click here。