Copyright © Ari Kuswanto
Design by Dzignine
Minggu, 14 Februari 2010

Visual Studio dan OpenGL

OpenGL adalah open standard yang spesifikasi-nya dirumuskan oleh ARB. Mengingat susahnya melakukan perubahan fitur (agar menjadi standar) di OpenGL karena harus melalui ARB. Microsoft menciptakan DirectX (esp. D3D) sbg alternative dari OpenGL.

Saat OpenGL didesain, jaman itu cuman ada C. karena itu interface-nya juga pake C sampe skrg. Sementara interface DirectX lewat COM (bisa pake C, C++, VB, C#).

1 temen-temen harus download GLUT untuk windows library disini

2. Install GLUT pada direktori :

glut32.dll -> C:\Windows\System or C:\WinNT\System
glut32.lib -> C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib
glut32.h -> C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\gl

3. download freeImage untuk win32 disini

4. extrack FreeImage yang tadi sudah di download, temen2 akan lihat sebuah direktory yang
disebut Dist ( Distribution), file ini harus di install di lokasi berikut :

freeImage.dll -> C:\Windows\System atau C:\WinNT\System
freeImage.lib -> C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib

freeImage.h -> C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include

catatan :
jika ketika run aplikasi , kalian harus memasukam file glut32.dll dalam program. jika temen2 tidak
mempunyai file di dalam direktori yang sama dalam aplikasi di C:\Windows\System folder, maka akan terjadi
error dan program mungkin tidak bisa di jalankan.

membuat project OpenGL di Microsoft Visual Studio .Net

1. klik file -> new project
2. klik Visual C++ projects, klik win32 project di sebelah kanan kotak dialog,
ketikan nama project nya, seperti gambar berikut




3. klik Appication settings pilih console application. dan check empty project, klik finish




4. klik kanan pada testAppNet kemudian klik properties, kemudian cari all Configurations pada kotak configuration



5.klik input, lalu cek Additional Dependencies lalu brows file opengl32.lib, glu32.lib, glaux.lib glut32.lib dan freeImage.lib
seperti gambar berikut :



lalu klik OK

6. klik kanan pada Solution Explorer dan klik properties, select all configurations, klik C/C++, pilih Precompiled Headers, pilih
create/use precompiled header , select not using precompiled headers, lalu klik ok seperti gambar di bawah ini :



7. sekarang kita akan membuat file basic OpenGL / GLUT program, klik add, lalu add new item, klik Visual C++ lalu klik c++ File (.cpp)
lalu masukan code program berikut :

#include 

#include
#include

int a[3]={10,10,10}, b[3]={10,-10,10},
c[3]={-10,-10,10}, d[3]={-10,10,10},
e[3]={10,10,-10}, f[3]={10,-10,-10},
g[3]={-10,-10,-10}, h[3]={-10,10,-10};

float angle=1.0;

void drawcube(void)
{
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0, 1.0, 1.0);

glMatrixMode(GL_MODELVIEW);
glRotatef(angle, 0.0, 1.0, 0.0);
glBegin(GL_LINE_LOOP);
glVertex3iv(a);
glVertex3iv(b);
glVertex3iv(c);
glVertex3iv(d);
glEnd();
glBegin(GL_LINE_LOOP);
glVertex3iv(a);
glVertex3iv(e);
glVertex3iv(f);
glVertex3iv(b);
glEnd();
glBegin(GL_LINE_LOOP);
glVertex3iv(d);
glVertex3iv(h);
glVertex3iv(g);
glVertex3iv(c);
glEnd();
glBegin(GL_LINE_LOOP);
glVertex3iv(e);
glVertex3iv(f);
glVertex3iv(g);
glVertex3iv(h);
glEnd();

glFlush();
glutSwapBuffers();
}

void keyboard(unsigned char key, int x, int y)
{
switch (key)
{
case 0x1B:
case 'q':
case 'Q':
exit(0);
break;
}
}

void mouse(int btn, int state, int x, int y)
{
if (state == GLUT_DOWN)
{
if (btn == GLUT_LEFT_BUTTON)
angle = angle + 1.0f;
else if (btn == GLUT_RIGHT_BUTTON)
angle = angle - 1.0f;
else
angle = 0.0f;
}
}

int main(int argc, char **argv)
{
glutInit(&argc, argv);
glutInitWindowSize(500, 500);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);
glutCreateWindow("Glut rotate");
glutMouseFunc(mouse);
glutKeyboardFunc(keyboard);
glutDisplayFunc(drawcube);
glutIdleFunc(drawcube);

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-30.0, 30.0, -30.0, 30.0, -30.0, 30.0);
glRotatef(30.0, 1.0, 0.0, 0.0);
glMatrixMode(GL_MODELVIEW);
glClearColor(0.0, 0.0, 0.0, 0.0);

glutMainLoop();
return(0);
}

save file tersebut , kemudian klik debug lalu klik run without Debugging atau Ctrl + F5

8. sekarang kita akan membuat FreeImage program dengan cara klik add, add item, lalu klik Visual C++ lalu klik C++ File (.cpp)
masukan nama file LoadFromHandle.cpp kemudian masukan code berikut :

#include "FreeImage.h"


typedef struct {
int r, g, b;
} pixel;

pixel **read_img(char *name, int *width, int *height) {
FIBITMAP *image;
int i,j;
RGBQUAD aPixel;
pixel **data;

if((image = FreeImage_Load(FIF_TIFF, name, 0)) == NULL) {
perror("FreeImage_Load");
return NULL;
}

*width = FreeImage_GetWidth(image);
*height = FreeImage_GetHeight(image);

data = (pixel **)
malloc((*height)
*sizeof(pixel *));
for(i = 0 ; i < (*height) ; i++) { data[i] = (pixel *)malloc((*width)*sizeof(pixel)); for(j = 0 ; j < (*width) ; j++) { FreeImage_GetPixelColor(image, j, i, &aPixel); data[i][j].r = (aPixel.rgbRed); data[i][j].g = (aPixel.rgbGreen); data[i][j].b = (aPixel.rgbBlue); } } FreeImage_Unload(image); return data; } void write_img(char *name, pixel **data, int width, int height) { FIBITMAP *image; RGBQUAD aPixel; int i,j; image = FreeImage_Allocate(width, height, 24, 0, 0, 0); if(!image) { perror("FreeImage_Allocate"); return; } for(i = 0 ; i < j =" 0" rgbred =" data[i][j].r;" rgbgreen =" data[i][j].g;" rgbblue =" data[i][j].b;" data =" read_img(">
debug file tersebut, kemudian akan muncul console seperti berikut :



setelah itu atur pengaturan seperti gambar berikut :



selamat mencoba ... ^_^