我正在使用Nexus One上的OpenGL ES进行一些实验.有关全屏分辨率的问题.好像我永远无法获得Nexus One的真正全分辨率,即480*800.我正在使用正交投影,只想绘制一个带有身份模型视图矩阵的简单三角形:
@Override
public void sizeChanged(GL10 gl, int width, int height) {
/*
* Set our projection matrix. This doesn't have to be done
* each time we draw, but usually a new projection needs to
* be set when the viewport is resized.
*/
gl.glViewport( 0, 0, width, height);
gl.glMatrixMode(GL10.GL_PROJECTION);
gl.glLoadIdentity();
GLU.gluOrtho2D(gl, 0, width, 0, height);
}
Run Code Online (Sandbox Code Playgroud)
三角形的坐标是:
float[] coords = {
// X, Y, Z
0.0f, 0.0f, 0,
200.0f, 200.0f, 0,
100.0f, 0.0f, 0,
};
Run Code Online (Sandbox Code Playgroud)
我得到以下结果:
alt text http://www.anddev.org/files/device_184.png
这个结果在仿真器(480*800 res)和Nexus 1上是相同的.显然我没有得到全分辨率(因为三角形的顶部顶点已经接近右边缘,如果宽度是真实480,这应该是在半宽的左边).另一个奇怪的是,在sizeChanged(我正在使用GLSurfaceView,这是GLSurfaceView所需的渲染器中的覆盖方法),无论我是否以全屏模式启动应用程序,我总是得到width = 480和height = 800.我期待使用app标题栏和状态栏,传递给sizeChanged的大小应该更小吗?我的意思是如果传递给这个方法的大小不是我得到的实际大小,那么我该如何设置正确的视口?
我也使用相同的设置在Windows上使用GLUT快速实现并绘制完全相同的三角形.我得到下面的结果,这是预期的结果.任何人都可以帮我弄清楚如何在手机上获得相同的结果?
alt text http://www.anddev.org/files/glut_on_win_137.png
我已经把
<supports-screens
android:largeScreens="true"
android:normalScreens="true"
android:smallScreens="true"
android:anyDensity="true"/>
Run Code Online (Sandbox Code Playgroud)
AndroidManifest.xml中的标记.特别是,我发现它似乎只有android:anyDensity ="true"|"false"很重要,因为这会改变渲染结果.其他人根本不改变结果.我的项目也在SDK 1.6上,建议用于开发支持更大手机屏幕的应用程序.
最初的问题也在这里提出:http://www.anddev.org/viewtopic.php?p = 34832#34832
小智 0
我知道有一个 OpenGL 线程涵盖了 16.、2.0 等之间的差异,其中包含这些开发游戏等的详细信息,您将不得不在谷歌主页上搜索它,因为开发列表谷歌搜索很糟糕
我还会检查 bug 数据库,因为每个发现 OpenGl bug 的人都将工作 aorudns 放入错误报告中,包括我
在其他地方检查 Alien3d 项目的 bug 数据库,在 googlecode 其 3d android 游戏引擎也许他们遇到了它?
| 归档时间: |
|
| 查看次数: |
2080 次 |
| 最近记录: |