Tutorial Melayu

OpenGL: Bentuk primitif

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

OpenGL: Bentuk primitif

Posted on .

Dalam artikel ke-empat dalam siri OpenGL ini, kita akan melihat bagaimana untuk “melukis” bentuk-bentuk primitif seperti petak, poligon, dan segitiga.

Terdapat beberapa betuk primitif dalam OpenGL tetapi dalam artikel ini saya hanya akan menunjukkan cara untuk melukis bentuk petak.

Bentuk-bentuk primitif:

  • GL_LINES
  • GL_LINE_STRIP
  • GL_LINE_LOOP
  • GL_POINTS
  • GL_POLYGON
  • GL_QUADS
  • GL_QUAD_STRIP
  • GL_TRIANGLES
  • GL_TRIANGLE_FAN
  • GL_TRIANGLE_STRIP

Untuk menyenangkan pemahaman, kita akan membina satu fungsi baru yang akan kita namakan binaPrimitif()

void binaPrimitif(void){

}

Dan kita akan memanggil fungsi ini di dalam fungsi papar supaya setiap kali fungsi papar dipanggil untuk lukisan semula, fungsi binaPrimitif ini juga akan turut dipanggil.

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(); // 
	glTranslatef(0.0f, 0.0f, -5.0f);  // alihkan scene 5 unit pada paksi z
 	binaPrimitif();   // Bina bentuk primitif
	glFlush(); // Hantar buffer ke tetingkap
}

Ok, sekarang kita mempunyai fungsi untuk melukis bentuk primitif. Langkah seterusnya adalah untuk melukis bentuk primitif (dalam kes ini bentuk petak). Untuk melukis sesuatu bentuk geometri, kita akan menggunakan dua fungsi OpenGL iaitu glBegin dan glEnd.

void binaPrimitif(void){
	glBegin(GL_QUADS);
	glEnd();
}

Langkah seterusnya adalah untuk membekalkan data vertex untuk setiap bucu bentuk yang dilukis kepada OpenGL. Dalam kes bentuk petak, kita mempunyai empat bucu, jadi kita akan membina empat vertex.

void binaPrimitif(void){
	glBegin(GL_QUADS);
	glVertex3f(-1.0f, -1.0f, 0.0f);
	glVertex3f(-1.0f, 1.0f, 0.0f);
	glVertex3f(1.0f, 1.0f, 0.0f);
	glVertex3f(1.0f, -1.0f, 0.0f);
	glEnd();
}

Kompil kod ini, dan anda sepatutnya dapat melihat bentuk petak anda di dalam tetingkap OpenGL.

main.cpp

#include 
#include 

void binaPrimitif(void){
	glBegin(GL_QUADS);
	glVertex3f(-1.0f, -1.0f, 0.0f);
	glVertex3f(-1.0f, 1.0f, 0.0f);
	glVertex3f(1.0f, 1.0f, 0.0f);
	glVertex3f(1.0f, -1.0f, 0.0f);
	glEnd();
}

void tekanKekunci(unsigned char key, int x, int y) {
	switch (key) {
		case 27:  // Keluar dari program
			exit(0) ;
			break ;
		default:
			break ;
	}
}
 
void lepasKekunci(unsigned char key, int x, int y) {
 
}

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(); // 
	glTranslatef(0.0f, 0.0f, -5.0f);  // alihkan kamera menjauhi paksi z 
 	binaPrimitif();   // Bina bentuk primitif
	glFlush(); // Hantar buffer ke tetingkap
}

void reshape(int width, int height){
	glViewport(0, 0, (GLsizei)width, (GLsizei)height); // 
	glMatrixMode(GL_PROJECTION); // Tukar kepada projection matrix
	glLoadIdentity(); //   
	gluPerspective(60, (GLfloat)width / (GLfloat)height, 1.0, 100.0); // fov, aspect ratio, near and far plane 
	glMatrixMode(GL_MODELVIEW); // Tukar semula ke modelview matrix  	
}

int main(int argc, char** argv)
{
	glutInit(&argc, argv);

	glutInitDisplayMode (GLUT_SINGLE);

	glutInitWindowSize (500, 500); 
	glutInitWindowPosition (100, 100);
	glutCreateWindow ("Tetingkap pertama saya");

	// Now, we define callbacks and functions for various tasks.
	glutDisplayFunc(papar); 
	glutReshapeFunc(reshape);
        glutKeyboardFunc(tekanKekunci);
        glutKeyboardUpFunc(lepasKekunci);

	glutMainLoop(); // Start the main code
	return 0;   /* ANSI C requires main to return int. */
}

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