при условии, что некоторые OpenGL-ветераны могли FACEPALM :-) Теперьквадрат в OpenGL заполняет весь экран
Я работаю на tilebased игре (только 2D) на андроид с Open GL ES.
После нескольких дней введения себя в концепции основы opengl я до сих пор не знаю, как сохранить связь между объектом и размером экрана.
Конкретно: мой мобильный дисплей имеет разрешение 480x800 пикселей. Когда я указать простой квадрат со следующими его размерами, он заполняет весь экран (?):
объектные вершины:
float vertices[] = { -1.0f, -1.0f, 0.0f, // 0, Top Left
1.0f, -1.0f, 0.0f, // 1, Bottom Left
1.0f, 1.0f, 0.0f, // 2, Bottom Right
-1.0f, 1.0f, 0.0f // 3, Top Right
};
short[] indices = { 0, 1, 2, 2, 3, 0 };
onSurfaceCreated:
public void onSurfaceCreated(GL10 gl, EGLConfig arg1) {
gl.glMatrixMode(GL10.GL_PROJECTION);
gl.glLoadIdentity();
gl.glEnable(GL10.GL_BLEND);
gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);
gl.glShadeModel(GL10.GL_FLAT);
gl.glEnable(GL10.GL_TEXTURE_2D);
GLU.gluOrtho2D(gl, 0, Shared.dm.widthPixels, Shared.dm.heightPixels, 0);
onDrawFrame :
@Override
public void onDrawFrame(GL10 gl) {
gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
// Replace the current matrix with the identity matrix
gl.glLoadIdentity();
//Move this only
gl.glPushMatrix();
Log.d(Shared.LOGTAG, "X: " + offset.x + "Y: " + offset.y);
gl.glTranslatef(offset.x, offset.y, 0);
root.draw(gl);
gl.glPopMatrix();
}
Может ли кто-нибудь дать мне подсказку в правильном направлении? Я предполагаю, что это имеет какое-то отношение к матрицам?
Спасибо за подсказку/усилий, теперь есть небольшая площадь обнаружились :-) Хотя ответ Jay шатуны также весьма полезно , ваш намек переместил все матричные настройки в метод draw-in (в отличие от многих начинающих-уроков), и ваши комментарии коментариев очень помогли. –