@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);
}
三角形的坐标为:
float[] coords = {
// X, Y, Z
0.0f, 0.0f, 0,
200.0f, 200.0f, 0,
100.0f, 0.0f, 0,
};
我得到了以下结果:
alt text http://www.anddev.org/files/device_184.png
这个结果在模拟器(480*800分辨率)和Nexus 1上是相同的。显然,我没有得到完整的分辨率(因为三角形的顶点已经接近右侧边缘,如果宽度是真正的480,那么应该在半宽的左侧)。另一个奇怪之处在于,在sizeChanged中(我正在使用GLSurfaceView,在渲染器中覆盖此方法是由GLSurfaceView要求的),无论我是否以全屏模式启动应用程序,我始终获得宽度=480和高度=800。我原本期望通过应用程序标题栏和状态栏,传递给sizeChanged的大小应该更小,对吗?我的意思是,如果传递给此方法的大小不是我实际获得的真实大小,那么我如何设置正确的视口呢?
我还使用相同的设置在Windows上快速实现了一个使用GLUT的版本,并绘制了完全相同的三角形。我得到了预期的结果,任何人都可以帮助我找出如何在手机上获得相同的结果吗?
alt文本 http://www.anddev.org/files/glut_on_win_137.png
我已经放置了
<supports-screens
android:largeScreens="true"
android:normalScreens="true"
android:smallScreens="true"
android:anyDensity="true"/>
在AndroidManifest.xml中的
标记。特别是,我发现似乎只有android:anyDensity="true"| "false"才重要,因为它确实会改变呈现的结果。其他的不会改变结果。此外,我的项目基于SDK 1.6,这是开发支持更大手机屏幕的应用程序所推荐的版本。
同样的问题也在这里提出:http://www.anddev.org/viewtopic.php?p=34832#34832