我爲我的Android應用獲取的OpenGL ES 2.0渲染上下文是縱向模式(480x800),但我想渲染橫向模式(800x480)。旋轉Android OpenGL ES 2.0視口
如何旋轉OpenGL視口,最好不要修改發送給着色器的矩陣?
我有一堆着色器,一些使用標識矩陣(如字體渲染器)。所以看起來我需要在幾個地方向矩陣添加旋轉組件。是否有辦法以某種方式全局旋轉視口?
我可以以某種方式從Android請求景觀渲染上下文嗎?
有沒有這個問題的架構模式?
我爲我的Android應用獲取的OpenGL ES 2.0渲染上下文是縱向模式(480x800),但我想渲染橫向模式(800x480)。旋轉Android OpenGL ES 2.0視口
如何旋轉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。
謝謝,我要做的第一件兩件事情了。我沒有單一的投影矩陣,因爲我使用着色器,所以我不能做你的第三個建議。 – Meh 2011-03-04 00:40:05
你可以有一個單獨的投影矩陣,但 - 這是給你的。我推薦它,因爲它對於在着色器計算中保持世界空間和後投影空間數學是非常有用的。 – Luther 2011-03-04 09:03:11
@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