2011-03-03 120 views
0

我为我的Android应用获取的OpenGL ES 2.0渲染上下文是纵向模式(480x800),但我想渲染横向模式(800x480)。旋转Android OpenGL ES 2.0视口

如何旋转OpenGL视口,最好不要修改发送给着色器的矩阵?

我有一堆着色器,一些使用标识矩阵(如字体渲染器)。所以看起来我需要在几个地方向矩阵添加旋转组件。是否有办法以某种方式全局旋转视口?

我可以以某种方式从Android请求景观渲染上下文吗?

有没有这个问题的架构模式?

回答

2

通过添加<activity android:screenOrientation="landscape" ...解决了问题。这使得OpenGL使用横向方向。

0

我做两件事情在我的应用程序。首先,将此行修改为您的清单文件:

<activity android:name=".YourActivity" android:label="@string/app_name" android:configChanges="keyboardHidden|orientation"> 

它阻止它重新初始化旋转的所有内容。 其次,在你的GLSurfaceView.Renderer派生类中重写此功能:

public void onSurfaceChanged(GL10 gl10, int width, int height) 
{ 
    gl10.viewport(0, 0, width, height); 

    //setup your matrices here 
} 

这将设置你的视口,但你必须在有更新您的矩阵也考虑到新的屏幕几何形状。你不是真的有一个额外的旋转旋转添加到您的矩阵,只需重新建立在“onSurfaceChanged”方法的投影矩阵。

HTH。

+0

谢谢,我要做的第一件两件事情了。我没有单一的投影矩阵,因为我使用着色器,所以我不能做你的第三个建议。 – Meh 2011-03-04 00:40:05

+0

你可以有一个单独的投影矩阵,但 - 这是给你的。我推荐它,因为它对于在着色器计算中保持世界空间和后投影空间数学是非常有用的。 – Luther 2011-03-04 09:03:11

+0

@luther你离开“旋转矩阵上”的关键因素。我觉得这http://stackoverflow.com/questions/33773770/use-rotatem-of-matrix-to-rotate-matrix-from-surfacetexture-but-corrupt-the-vid可能会有帮助。 – enthusiasticgeek 2016-04-18 04:18:53