Selamat datang ke Wikipedia Bahasa Melayu!
Salam sejahtera A131174! Terima kasih kerana mendaftar di Wikipedia Bahasa Melayu!
Berikut merupakan beberapa pautan yang dapat anda layari jika masih baru di Wikipedia:

Lihat juga tutorial dan meja bantuan Wikipedia. Untuk menandatangani pesanan anda pada laman perbualan, seperti laman ini, letakkan ~~~~ (empat kali tanda gelombang) atau klik butang Tandatangan dan cap waktu pada laman penyuntingan.
Semoga anda menikmati kunjungan anda di Wikipedia Bahasa Melayu. Selamat menyumbang! ...Aurora... (b) 09:17, 28 Oktober 2011 (UTC)Balas

Mencipta Tekstur pada Segi Tiga sunting

Kod asal:


   #include <stdio.h>
   #include <stdlib.h>
   #if defined (__APPLE__) || defined (MACOSX)
   #include <GLUT/glut.h>
   #else
   #include <GL/glut.h>
   #endif
   GLubyte texture[] = {
   0x80, 0x80, 0x80, 0xff, 0xff, 0xff, 0x80, 0x80, 0x80, 0xff, 0xff, 0xff,
   0xff, 0xff, 0xff, 0x80, 0x80, 0x80, 0xff, 0xff, 0xff, 0x80, 0x80, 0x80,
   0x80, 0x80, 0x80, 0xff, 0xff, 0xff, 0x80, 0x80, 0x80, 0xff, 0xff, 0xff,
   0xff, 0xff, 0xff, 0x80, 0x80, 0x80, 0xff, 0xff, 0xff, 0x80, 0x80, 0x80,
   };
   void
   reshape(int width, int height)
   {
   glViewport(0, 0, width, height);
   glMatrixMode(GL_PROJECTION);
   glLoadIdentity();
   gluPerspective(60, 1.0, 0.1, 1000.0);
   glMatrixMode(GL_MODELVIEW);
   glLoadIdentity();
   gluLookAt(0, 0, 5, 0, 0, 0, 0, 1, 0);
   glEnable(GL_COLOR_MATERIAL);
   glEnable(GL_LIGHTING);
   glEnable(GL_LIGHT0);
   glEnable(GL_TEXTURE_2D);
   glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
   glTexImage2D(GL_TEXTURE_2D, 0, 3, 4, 4, 0, 
       GL_RGB, GL_UNSIGNED_BYTE, texture);
   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
   glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
   }
   void
   display(void)
   {
   glClear(GL_COLOR_BUFFER_BIT);
   glColor3ub(255, 255, 255);
   glBegin(GL_TRIANGLES);
   glNormal3f(0.0, 0.0, 1.0);
   glColor3ub(255, 0, 0);
   glTexCoord2f(0.5, 1.0);
   glVertex2f(0.0, 2.0);
   glColor3ub(0, 255, 0);
   glTexCoord2f(0.0, 0.0);
   glVertex2f(-2.0, -2.0);
   glColor3ub(0, 0, 255);
   glTexCoord2f(1.0, 0.0);
   glVertex2f(2.0, -2.0);
   glEnd();
   glFlush();
   }
   void
   keyboard(unsigned char key, int x, int y)
   {
   if (key == 27) {
       exit(0);
   }
   }
   int
   main(int argc, char** argv)
   {
   glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
   glutInitWindowPosition(50, 50);
   glutInitWindowSize(320, 320);
   glutInit(&argc, argv);
   glutCreateWindow("texture");
   glutDisplayFunc(display);
   glutReshapeFunc(reshape);
   glutKeyboardFunc(keyboard);
   glutMainLoop();
   return 0;
   }

HEADER sunting

Fail header yang perlu disertakan untuk kod standard C:

  1. include <stdio.h>
  2. include <stdlib.h>


glut.h adalah antara muka untuk GLUT(OpenGL Utiliti Toolkit), satu lagi perpustakaan utiliti yang menyediakan antara muka pengguna bebas platform.

  1. include <GLUT/glut.h>
  2. include <GL/glut.h>


Header ini digunakan untuk memudahkan pengguna yang menggunakan MAC OS supaya kod dapat disusun (compile).

  1. if defined (__APPLE__) || defined (MACOSX)
  2. else
  3. endif


TEKSTUR sunting

Menghasilkan tekstur:

   GLubyte texture[] = {
   0x80, 0x80, 0x80, 0xff, 0xff, 0xff, 0x80, 0x80, 0x80, 0xff, 0xff, 0xff,
   0xff, 0xff, 0xff, 0x80, 0x80, 0x80, 0xff, 0xff, 0xff, 0x80, 0x80, 0x80,
   0x80, 0x80, 0x80, 0xff, 0xff, 0xff, 0x80, 0x80, 0x80, 0xff, 0xff, 0xff,
   0xff, 0xff, 0xff, 0x80, 0x80, 0x80, 0xff, 0xff, 0xff, 0x80, 0x80, 0x80,
    };


MEMBENTUK sunting

Penyataan pengawalan (Initialize statement):

     void
     reshape(int width, int height)


Menjadikan viewport kepada segi empat tepat dengan lebar, w dan tinggi, h di mana penjuru kiri ialah (x,y) dalam window.

    glViewport(0, 0, width, height);


Memaparkan gambaran objek dalam 2-dimensi dalam OpenGL dan menetapkan parameter unjuran.

    glMatrixMode(GL_PROJECTION);


Memastikan setiap kali mod projection(projection mode) dimasukkan, matrik akan ditetapkan semula kepada matrik identiti(matrix identity) agar parameter pandangan baru tidak bergabung dengan matrik sebelumnya.

    glLoadIdentity();


Menentukan darjah sudut pandangan bagi unjuran perspektif simetrik.

    gluPerspective(60, 1.0, 0.1, 1000.0);


Untuk menetapkan mod untuk membina matrik transformasi geometrik: Matrik komposit diterjemahkan untuk mengubah diskripsi objek dalam koordinat dunia (world coordinate) kepada koordinat pandangan(viewing coordinate)

   glMatrixMode(GL_MODELVIEW);


Menetapkan matrik kepada identiti: Memastikan setiap kali mod projection(projection mode) dimasukkan, matrik akan ditetapkan semula kepada matrik identiti(matrix identity) agar parameter pandangan baru tidak bergabung dengan matrik sebelumnya.

   glLoadIdentity();


Menetapkan parameter pandangan 3-Dimensi: Parameter pandangan (viewing parameters) yang telah ditetapkan dengan fungsi digunakan untuk menghasilkan tranformasi-pandangan matrik(viewing-transformation matrix). Matrik ini adalah kombinasi daripada translasi dimana ianya mengubah titik pandangan asal(viewing origin) kepada titik dunia asal(world origin) dan putaran di mana sejajar dengan paksi pandangan(viewing axes) dan paksi dunia(world axes).

   gluLookAt(0, 0, 5, 0, 0, 0, 0, 1, 0);


Mengaktifkan fungsi warna di dalam perpustakaan OpenGL:

   glEnable(GL_COLOR_MATERIAL);

Mengaktifkan sistem pencahayaan dalam OpenGL:

   glEnable(GL_LIGHTING);
  

Mengaktifkan satu sumber pencahayaan secara lalai (default) :

   glEnable(GL_LIGHT0);


Untuk menetapkan tekstur:

   glEnable(GL_TEXTURE_2D);


Menetapkan mod penyimpanan pixel:

   glPixelStorei(GL_UNPACK_ALIGNMENT, 1);


Tekstur RGBA: Membentuk tekstur 2-dimensi:

   glTexImage2D(GL_TEXTURE_2D, 0, 3, 4, 4, 0, 
       GL_RGB, GL_UNSIGNED_BYTE, texture);


Pilih warna pilihan terdekat untuk tekstur: Digunakan apabila imej dilukis lebih kecil dari asal (Minification).

  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);

Digunakan apabila imej dilukis lebih besar dari imej asal(Magnification).

  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);


Fungsi ini digunakan untuk pengadunan warna:

   glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);

PAPARAN (DISPLAY) sunting

Penyataan pengawalan (Initialize statement):

   void
   display(void)
   {


Untuk mengosongkan display window: glClear akan merujuk kepada buffer yang telah ditetapkan untuk dikosongkan. Di dalam program ini,buffer yang akan dikosongkan adalah GL_COLOR_BUFFER_BIT. Fungsi ini juga menetapkan bahawa buffer ini bersedia untuk melakukan perubahan warna.

   glClear(GL_COLOR_BUFFER_BIT);


Mod RGB : Warna Putih:

   glColor3ub(255, 255, 255);

Memaparkan segi tiga penuh:

   glBegin(GL_TRIANGLES);
   

Menetapkan warna latar segi tiga kepada biru:

   glNormal3f(0.0, 0.0, 1.0);


Mod RGB: Warna Merah:

   glColor3ub(255, 0, 0);


Penentu warna tekstur kepada permukaan pixel:

   glTexCoord2f(0.5, 1.0);
  

Menetapkan koordinat bagi kedudukan bucu objek (bucu atas):

   glVertex2f(0.0, 2.0);
   

Mod RGB: Warna Hijau:

   glColor3ub(0, 255, 0);


Penentu warna tekstur kepada permukaan pixel:

   glTexCoord2f(0.0, 0.0);


Menetapkan koordinat bagi kedudukan bucu objek(bucu bawah sebelah kiri):

   glVertex2f(-2.0, -2.0);


Mod RGB: Warna Biru:

   glColor3ub(0, 0, 255);


Penentu warna tekstur kepada permukaan pixel:

   glTexCoord2f(1.0, 0.0);


Menetapkan koordinat bagi kedudukan bucu objek (bucu bawah sebelah kanan):

   glVertex2f(2.0, -2.0);


Beritahu OpenGL bahawa kita telah selesai mentakrifkan poligon:

   glEnd();

Memaksa pelaksanaan fungsi OpenGL dalam masa yang terhad:

  glFlush();
  }


Menamatkan program:

  void
  keyboard(unsigned char key, int x, int y)
  {
       if (key == 27) {
       exit(0);
     }
   }

Penyataan pengawalan(Initialize statement;di dalam GLUT, parameter diperlukan ):

   Int main(int argc, char** argv)


Menetapkan mod warna dalam RGB pada display window:

   glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);


Untuk menetap kedudukan display window:

   glutInitWindowPosition(50, 50);


Untuk menetapkan pixel display window ; lebar,w dan panjang,l:

   glutInitWindowSize(320, 320);


Penyataan pengawalan (Initialize statement);memanggil pelbagai kaedah (method) di atas:

   glutInit(&argc, argv);


Display window dicipta dengan tajuk yang dinyatakan iaitu “texture”.Tetingkap pada mulanya tidak memaparkan sebarang imej sehingga glutMainLoop () dimasukkan:

   glutCreateWindow("texture");


Fungsi ini digunakan untuk memaparkan apa yang terkandung di dalam display window:

   glutDisplayFunc(display);


Fungsi ini digunakan untuk membolehkan pengguna mengubah saiz atau kedudukan display window:


   glutReshapeFunc(reshape);
 

Fungsi ini digunakan untuk mengkhususkan sesuatu langkah apabila kekunci di tekan:

   glutKeyboardFunc(keyboard);


Memasuki GLUT processing loop. Fungsi yang telah berdaftar akan dipanggil apabila process tersebut mempengaruhi mereka.Fungsi ini hanya boleh dipanggil sekali sahaja dalam sesuatu program. Fungsi ini yang menyebabkan imej untuk dipaparkan di tetingkap. Statement ini harus diletakkan di akhir fungsi utama (main function).

   glutMainLoop();
 

Program ditamatkan.

   return 0;
   }