Tutorial Melayu

Menukar saiz tetingkap OpenGL

Introduction

user

Fairuz

System Engineer (Texas Instruments France), Masters in Electronics , Embedded System Engineering,


LATEST POSTS

Nota: git alias yang biasa digunakan 05th December, 2013

Nota: Android .gitignore 23rd February, 2013

OpenGL

Menukar saiz tetingkap OpenGL

Posted on .
This entry is part 2 of 2 in the series OpenGL

Untuk proses menukar saiz tetingkap, kita hanya perlu mendaftar satu lagi callback yang kali ini akan saya namakan reshape.

void reshape(int width, int height){
		
}

Di dalam main, kita hanya perlu mendaftar callback ini seperti mana kita telah lakukan untuk fungsi papar.

glutReshapeFunc(reshape);

Di dalam fungsi reshape, benda pertama yang perlu dilakukan adalah memberitahu OpenGL saiz viewport (dalam 2D plane yang hendak di”render”) yang baru.

glViewport(0, 0, (GLsizei)width, (GLsizei)height);

Kemudian kita akan tukar mod kepada matriks projection. Untuk mengetahui jenis-jenis matriks seperti matriks gerakan, pusingan, viewmodel atau projection, saya cadangkan anda untuk mendalami dahulu asas matematik dalam grafik 3D.

glMatrixMode(GL_PROJECTION); // Tukar kepada projection matrix

Kita sekarang sudah berada dalam mod yang betul, jadi seterusnya kita akan reset matriks ini supaya tidak akan ada efek-efek artifak terpapar di tetingkap glut.

glLoadIdentity();

Seterusnya, langkah penting, adalah untuk memberitahu OpenGL tentang field of view (sudut pandangan), aspect ratio, dan juga had dekat dan had jauh. Contoh arahan di bawah, saya memilih sudut pandangan sebanyak 60 darjah, bermakna kita mempunyai 30 darjah ke kanan dan 30 darjah ke kiri.

gluPerspective(60, (GLfloat)width / (GLfloat)height, 1.0, 100.0);   

Perkara terakhir yang kita akan lakukan adalah menukar kembali mod kepada GL_MODELVIEW.

glMatrixMode(GL_MODELVIEW);

Jika anda lihat, tiada apa-apa perbezaan yang boleh dilihat antara hasil tetingkap artikel yang lepas dan artikel kali ini. Perbezaan hanya boleh dilihat selepas kita memasukkan object ke dalam dunia 3D ini.

main.cpp

#include 
#include 

void papar(void){
	glClearColor(1.0f, 0.0f, 0.0f, 1.0f); // Tukar background kepada warna merah
	glClear(GL_COLOR_BUFFER_BIT); // Kosongkan buffer warna
	glLoadIdentity(); // 
 
	glFlush(); // Hantar buffer ke tetingkap
}

void reshape (int width, int height) {
	glViewport(0, 0, (GLsizei)width, (GLsizei)height); 
	glMatrixMode(GL_PROJECTION); 
	glLoadIdentity(); 
	gluPerspective(60, (GLfloat)width / (GLfloat)height, 1.0, 100.0); 
	glMatrixMode(GL_MODELVIEW); 
}
 
int main(int argc, char** argv)
{
	glutInit(&argc, argv);
 
	glutInitDisplayMode (GLUT_SINGLE);
 
	glutInitWindowSize (500, 500); 
	glutInitWindowPosition (100, 100);
	glutCreateWindow ("Tetingkap pertama saya");
 
	glutDisplayFunc(papar); 
        glutReshapeFunc(reshape);

	glutMainLoop(); 
	return 0; 
}
Series Navigation<< Tetingkap OpenGL
profile

Fairuz

http://www.tutorialmelayu.com

System Engineer (Texas Instruments France), Masters in Electronics , Embedded System Engineering,

There are no comments.

Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

View Comments (0) ...
Navigation