Membuat Objek klik mouse dengan openGL

Posted on Updated on


Sekarang saya akan mempostingkan tentang openGL , kali ini saya menggunakan bahasa C++ yang sudah di konfigurasikan dengan openGl pastinya …(C++ visual Studio 6.0 ) dengan kode yang cukup sederhana dan tidak menggunakan source yang terlalu  banyak kita sudah bisa menjalankan program yang satu ini , hanya tinggal mengkonfigurasi saja dengan openGL standart . oke langsung saja kita bahas ne masalah …checkiddoootttt

silahkan copy dan pastekan di lembar kerja cpp  anda …

// Silahkan Di Coba..
//Tekan s Untuk Menghapus Titik Terakhir
//Tekan a Untuk Menghapus Titik Pertama
//Tekan x Untuk Exit
#include <stdlib.h>
#include <GL/glut.h>

#include <stdio.h>
#include <math.h>

#define MaxNumPts 5 //Jumlah Titik
float PointArray[MaxNumPts][2];
int NumPts = 0;

void myKeyboardFunc( unsigned char key, int x, int y );
void myMouseFunc( int button, int state, int x, int y );

void displayLines(void);
void removeFirstPoint();
void removeLastPoint();
void addNewPoint( float x, float y );

void initRendering();
void resizeWindow(int w, int h);

// Besar Windows Dalam Pixel
int WindowHeight;
int WindowWidth;

void myKeyboardFunc (unsigned char key, int x, int y)
{
switch (key) {
case 'a':
removeFirstPoint();
glutPostRedisplay();
break;
case 's':
removeLastPoint();
glutPostRedisplay();
break;
case 'x': //
exit(0);
break;
}
}

void removeFirstPoint() {
int i;
if ( NumPts>0 ) {
// Menghapus Titik Awal
NumPts--;
for ( i=0; i<NumPts; i++ ) {
PointArray[i][0] = PointArray[i+1][0];
PointArray[i][1] = PointArray[i+1][1];
}
}
}

// Menekan tombol Kiri menempatkan titik kontrol.
void myMouseFunc( int button, int state, int x, int y ) {
if ( button==GLUT_LEFT_BUTTON && state==GLUT_DOWN ) {
float xPos = ((float)x)/((float)(WindowWidth-1));
float yPos = ((float)y)/((float)(WindowHeight-1));

yPos = 1.0f-yPos; // Membalik nilai karena posisi y adalah dari baris atas.

addNewPoint( xPos, yPos );
glutPostRedisplay();
}
}

// Menambahkan titik baru ke akhir daftar.
// Hapus titik pertama dalam daftar jika terlalu banyak poin.
void removeLastPoint() {
if ( NumPts>0 ) {
NumPts--;
}
}

// Menambahkan titik baru ke akhir daftar.
// Hapus titik pertama dalam daftar jika poin terlalu banyak.
void addNewPoint( float x, float y ) {
if ( NumPts>=MaxNumPts ) {
removeFirstPoint();
}
PointArray[NumPts][0] = x;
PointArray[NumPts][1] = y;
NumPts++;
}

void displayLines(void)
{
int i;

glClear(GL_COLOR_BUFFER_BIT);

// Menggambar Segment Garis
glColor3f(0.0f, 1.0f, 0.0f); // Warna Hijau Untuk Garis
if ( NumPts>1 ) {
glBegin( GL_LINE_STRIP );
for ( i=0; i<NumPts; i++ ) {
glVertex2f( PointArray[i][0], PointArray[i][1] );
}
glEnd();
}

// Menggambar Titik.
glColor3f( 1.0f, 1.0f, 1.0f); // Warna Putih Untuk Titik
glBegin( GL_POINTS );
for ( i=0; i<NumPts; i++ ) {
glVertex2f( PointArray[i][0], PointArray[i][1] );
}
glEnd();

glFlush();
}

void initRendering() {
//Peroses Percetakan
glClearColor( 0.0f, 0.0f, 0.0f, 0.0f );//Warna Latar

glPointSize(10);// Membuat Besar Titik
glLineWidth(5);//Membuat Besat Garis

glEnable(GL_POINT_SMOOTH);
glEnable(GL_LINE_SMOOTH);
glHint(GL_POINT_SMOOTH_HINT, GL_NICEST); // Membuat Titik Bilat
glHint(GL_LINE_SMOOTH_HINT, GL_NICEST); // Membuat Garis
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
}

void resizeWindow(int w, int h)
{
WindowHeight = (h>1) ? h : 2;
WindowWidth = (w>1) ? w : 2;
glViewport(0, 0, (GLsizei) w, (GLsizei) h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0.0f, 1.0f, 0.0f, 1.0f); // Selalu Tampilkan [0,1]x[0,1].
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}

int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB );
glutInitWindowSize(600, 600);
glutInitWindowPosition(200, 100);
glutCreateWindow(argv[0]);
initRendering();

glutDisplayFunc(displayLines);
glutReshapeFunc(resizeWindow);
glutKeyboardFunc(myKeyboardFunc);
glutMouseFunc(myMouseFunc);
glutMainLoop();

return 0; // Selalu Jalankan Hingga Akhir
}

selamat mencoba semoga bermanfaat bagi pengunjung setia mazadie.wordpress.com

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s