我为我的 Android 应用程序获得的 OpenGL ES 2.0 渲染上下文处于纵向模式 (480x800),但我想以横向模式 (800x480) 进行渲染。
如何旋转 OpenGL 视口,最好不修改发送到着色器的矩阵?
我有一堆着色器,其中一些使用身份矩阵(如字体渲染器)。所以看起来我需要在几个地方向矩阵添加一个旋转组件。有没有办法以某种方式全局旋转视口?
我可以以某种方式从 Android 请求风景渲染上下文吗?
这个问题是否有任何架构模式?
我为我的 Android 应用程序获得的 OpenGL ES 2.0 渲染上下文处于纵向模式 (480x800),但我想以横向模式 (800x480) 进行渲染。
如何旋转 OpenGL 视口,最好不修改发送到着色器的矩阵?
我有一堆着色器,其中一些使用身份矩阵(如字体渲染器)。所以看起来我需要在几个地方向矩阵添加一个旋转组件。有没有办法以某种方式全局旋转视口?
我可以以某种方式从 Android 请求风景渲染上下文吗?
这个问题是否有任何架构模式?
通过添加解决了问题<activity android:screenOrientation="landscape" ...
。这使得 OpenGL 使用横向。
我在我的应用程序中做两件事。首先,将此行修改为您的清单文件:
<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。