【问题标题】:Rotate Android OpenGL ES 2.0 viewport旋转 Android OpenGL ES 2.0 视口
【发布时间】:2011-03-03 22:27:13
【问题描述】:

我为我的 Android 应用程序获得的 OpenGL ES 2.0 渲染上下文处于纵向模式 (480x800),但我想以横向模式 (800x480) 进行渲染。

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

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

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

这个问题有什么架构模式吗?

【问题讨论】:

    标签: android opengl-es viewport opengl-es-2.0


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      <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。

      【讨论】:

      • 谢谢,我已经做了前两件事。我没有一个投影矩阵,因为我使用着色器,所以我不能做你的第三个建议。
      • 你可以有一个单独的投影矩阵——这取决于你。我推荐它,因为它对于在着色器计算中保持世界空间和投影后空间数学分开很有用。
      • @luther 您离开了“矩阵旋转”的关键方面。我认为stackoverflow.com/questions/33773770/… 可能会有所帮助。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多