Estoy haciendo un pequeño experimento con OpenGL ES en Nexus One. Tengo un problema con la resolución de pantalla completa. Parece que nunca puedo obtener la resolución real completa de Nexus One, que es 480 * 800. Estoy utilizando una proyección ortogonal y sólo quiero dibujar un triángulo sencillo con vistas identificación del modelo de matriz:Nunca llegué a 480 * 800 cuando uso proyección ortogonal 2D en OpenGL-ES
@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);
}
Las coordenadas del triángulo son:
float[] coords = {
// X, Y, Z
0.0f, 0.0f, 0,
200.0f, 200.0f, 0,
100.0f, 0.0f, 0,
};
Y consigo el resultado a continuación:
alt text http://www.anddev.org/files/device_184.png
Este resultado es el mismo en el emulador (480 * 800 res) y Nexus 1. Obviamente no he tenido la resolución completa (debido a que el el vértice superior del triángulo ya está cerca del borde derecho, si el ancho es real 480, debe estar a la izquierda del ancho medio). Otra rareza es que en sizeChanged (estoy usando GLSurfaceView, este es el método de anulación en el renderizador requerido por GLSurfaceView), siempre obtengo width = 480 y height = 800 independientemente de si inicio la aplicación en modo de pantalla completa. Estaba esperando que con la barra de título de la aplicación y la barra de estado, el tamaño pasado a sizeChanged debería ser más pequeño ¿no? Quiero decir, si el tamaño pasado a este método no es el tamaño real que obtengo, ¿cómo puedo configurar una ventana gráfica correcta?
También hice una implementación rápida usando GLUT en Windows con la misma configuración y dibujé exactamente el mismo triángulo. Obtengo el resultado a continuación, que es el resultado esperado. ¿Alguien puede ayudarme a descubrir cómo obtener el mismo resultado en el teléfono?
alt text http://www.anddev.org/files/glut_on_win_137.png
que ya han puesto
<supports-screens
android:largeScreens="true"
android:normalScreens="true"
android:smallScreens="true"
android:anyDensity="true"/>
etiqueta en AndroidManifest.xml. En particular, encontré que parece que solo android: anyDensity = "true" | "false" importa, ya que esto cambia el resultado procesado. Otros no cambian el resultado en absoluto. También mi proyecto está en SDK 1.6, que se recomienda para desarrollar aplicaciones que admitan pantallas de teléfonos más grandes.
La pregunta original se le pide también aquí: http://www.anddev.org/viewtopic.php?p=34832#34832