Gambar saya 1280x800, dan ukuran layar saya 1280x800. Itu harus menggambar dengan sempurna. Saya membuat quad ukuran layar, dan mengatur tekstur agar sesuai dengan quad. Tapi sekarang ini menggambar tekstur persegi di sudut kiri atas layar saya yang keluar dari skala dan tidak cukup besar.
Saya tidak tahu mengapa itu tidak berhasil, saya sudah mencoba menulis ukuran tekstur yang lebih besar ketika menggambar dan sepertinya berhasil, tetapi saya tidak tahu mengapa itu tidak berhasil ketika menggambar pada sebuah 1280x800 quad.
Bagaimana cara membuat quad layar penuh?
Begini cara saya saat ini melakukannya:
Ini adalah OPENGL saya dan kode pengaturan tampilan:
DisplayMode displayMode = null;
DisplayMode[] modes = Display.getAvailableDisplayModes();
for (int i = 0; i < modes.length; i++) {
if (modes[i].getWidth() == World.SCREEN_WIDTH && modes[i].getHeight() == World.SCREEN_HEIGHT && modes[i].isFullscreenCapable()) {
displayMode = modes[i];
}
}
Display.setDisplayMode(displayMode);
Display.setFullscreen(false);
Display.create();
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, World.SCREEN_WIDTH, World.SCREEN_HEIGHT, 0, 1, -1);
glMatrixMode(GL_MODELVIEW);
glEnable(GL_TEXTURE_2D);
Ini adalah kode saya untuk menggambar quad bertekstur:
background = TextureLoader.getTexture("PNG", new FileInputStream(new File("res/menu/background.png")));
glBindTexture(GL_TEXTURE_2D, background.getTextureID());
glPushMatrix();
glBegin(GL_QUADS);
glTexCoord2f(0, 0);
glVertex2f(0, 0); // Upper left
glTexCoord2f(1, 0);
glVertex2f(World.SCREEN_WIDTH, 0); // Upper right
glTexCoord2f(1, 1);
glVertex2f(World.SCREEN_WIDTH, World.SCREEN_HEIGHT); // Lower right
glTexCoord2f(0, 1);
glVertex2f(0, World.SCREEN_HEIGHT); // Lower left
glEnd();
glPopMatrix();
Jawaban:
Kemungkinan penyebabnya adalah bahwa Anda mungkin tidak memiliki identitas dalam matriks modelview Anda ketika Anda datang untuk menggambar quad layar penuh. Ini bisa terjadi jika Anda menggambar hal lain sebelum quad.
Saya perhatikan dari kode pengaturan Anda bahwa Anda benar beralih ke mode matriks ke GL_MODELVIEW, tetapi kemudian Anda tidak membuat panggilan glLoadIdentity setelah melakukannya (ini OK karena seharusnya identitas awalnya, tapi itu kebiasaan yang baik untuk masuk).
Saat menggambar quad Anda, Anda memilikinya dikelilingi oleh panggilan glPushMatrix / glPopMatrix. Ini sendiri tidak cukup untuk membuat identitas matriks; dari spesifikasi :
(Penekanan saya.)
Dengan kata lain, jika matriks modelview sebelumnya bukan identitas, maka mengikuti panggilan glPushMatrix, matriks modelview baru juga tidak akan menjadi identitas.
Perbaikan paling sederhana adalah menambahkan glLoadIdentity setelah panggilan glPushMatrix Anda.
sumber