Tôi đang thực hiện một thử nghiệm nhỏ với OpenGL ES trên Nexus One. Có vấn đề về độ phân giải toàn màn hình. Có vẻ như tôi không bao giờ có được độ phân giải đầy đủ thực sự của Nexus One, là 480 * 800. Tôi đang sử dụng một chiếu trực giao và chỉ muốn vẽ một hình tam giác đơn giản với mô hình sắc xem ma trận:Không bao giờ có đầy đủ 480 * 800 khi sử dụng phép chiếu trực giao 2D trong 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);
}
Các tọa độ cho tam giác là:
float[] coords = {
// X, Y, Z
0.0f, 0.0f, 0,
200.0f, 200.0f, 0,
100.0f, 0.0f, 0,
};
Và tôi nhận được kết quả dưới đây:
alt text http://www.anddev.org/files/device_184.png
Kết quả này tương tự trên trình mô phỏng (480 * 800 res) và Nexus 1. Rõ ràng là tôi không có độ phân giải đầy đủ (vì đỉnh trên của hình tam giác đã gần với cạnh phải, nếu chiều rộng là 480 thực, điều này nên ở bên trái của nửa chiều rộng). Một sự khác lạ là ở sizeChanged (Tôi đang sử dụng GLSurfaceView, đây là phương thức ghi đè trong trình kết xuất theo yêu cầu của GLSurfaceView), tôi luôn nhận được width = 480 và height = 800 cho dù tôi có bắt đầu ứng dụng ở chế độ toàn màn hình hay không. Tôi đã mong đợi rằng với thanh tiêu đề ứng dụng và thanh trạng thái, kích thước được chuyển đến sizeChanged phải nhỏ hơn phải không? Ý tôi là nếu kích thước được chuyển đến phương pháp này không phải là kích thước thực tôi nhận được, thì làm cách nào tôi có thể thiết lập chế độ xem chính xác?
Tôi cũng đã thực hiện nhanh chóng bằng cách sử dụng GLUT trên Windows với cùng một thiết lập và vẽ hình tam giác giống hệt nhau. Tôi nhận được kết quả dưới đây, đó là kết quả mong đợi. Bất cứ ai cũng có thể giúp tôi tìm ra cách để có được kết quả tương tự trên điện thoại?
alt text http://www.anddev.org/files/glut_on_win_137.png
Tôi đã đặt
<supports-screens
android:largeScreens="true"
android:normalScreens="true"
android:smallScreens="true"
android:anyDensity="true"/>
thẻ trong AndroidManifest.xml. Đặc biệt, tôi thấy rằng nó có vẻ như chỉ android: anyDensity = "true" | "false" vấn đề, vì điều này không thay đổi kết quả trả về. Những người khác không thay đổi kết quả. Ngoài ra dự án của tôi là trên SDK 1.6, được đề xuất cho việc phát triển các ứng dụng hỗ trợ màn hình điện thoại lớn hơn.
Các câu hỏi ban đầu cũng được yêu cầu ở đây: http://www.anddev.org/viewtopic.php?p=34832#34832