Oleh:
KELOMPOK 4
I MADE PRADNYANANDANA SUWITRA (1508605033)
ALFINA FEBRILIA ARANTIKA (1508605036)
NYOMAN IMA SATI MUSTIKA (1508605038)
I MADE YOGA PRIANTA (1508605055)
PENDAHULUAN
Pada laporan ini akan source code yang ditampilkan hanya source code yang menjadi poin
penting dalam membuat titik maupun garis. Karena pada OpenGL dan WebGL terdapat program
defaultnya. Berikut merupakan tampilan default pada OpenGL.
//#include <glut.h>
#include <windows.h>
#include <gl/gl.h>
//#include <glu.h>
//Function Declarations
LRESULT CALLBACK WndProc (HWND hWnd, UINT message,
WPARAM wParam, LPARAM lParam);
void EnableOpenGL (HWND hWnd, HDC *hDC, HGLRC *hRC);
void DisableOpenGL (HWND hWnd, HDC hDC, HGLRC hRC);
//WinMain
int WINAPI WinMain (HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int iCmdShow)
{
WNDCLASS wc;
HWND hWnd;
HDC hDC;
HGLRC hRC;
MSG msg;
BOOL bQuit = FALSE;
float theta = 0.0f;
/* shutdown OpenGL */
DisableOpenGL (hWnd, hDC, hRC);
return msg.wParam;
}
//Window Procedure
LRESULT CALLBACK WndProc (HWND hWnd, UINT message,
WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_CREATE:
return 0;
case WM_CLOSE:
PostQuitMessage (0);
return 0;
case WM_DESTROY:
return 0;
case WM_KEYDOWN:
switch (wParam)
{
case VK_ESCAPE:
PostQuitMessage(0);
return 0;
}
return 0;
default:
return DefWindowProc (hWnd, message, wParam, lParam);
}
}
//Enable OpenGL
void EnableOpenGL (HWND hWnd, HDC *hDC, HGLRC *hRC)
{
PIXELFORMATDESCRIPTOR pfd;
int iFormat;
//Disable OpenGL
void DisableOpenGL (HWND hWnd, HDC hDC, HGLRC hRC)
{
wglMakeCurrent (NULL, NULL);
wglDeleteContext (hRC);
ReleaseDC (hWnd, hDC);
}
/*================Creating a canvas=================*/
var canvas = document.getElementById('CanvasTitik');
gl = canvas.getContext('experimental-webgl');
/*=========================Shaders========================*/
PEMBAHASAN
else
{
//code start here
glClearColor (255, 255, 255, 0.0f);
glClear (GL_COLOR_BUFFER_BIT);
glViewport(0,0, 600, 400);
glPointSize(10.0);
glBegin (GL_POINTS);
//membuat 4 titik
glColor3f (255, 0, 0); glVertex2f (0.25, 0.25);
glColor3f (0, 255, 0); glVertex2f (0.25, 0.75);
glColor3f (0, 0, 255); glVertex2f (0.75, 0.25);
glColor3f (0, 0, 0); glVertex2f (0.75, 0.75);
glEnd ();
SwapBuffers (hDC);
glFlush();
}
Tampilan program
Penjelasan source code :
Dalam membuat titik kode utama yang dibuat adalah kode untuk menempatkan titik
pada bidang. Untuk menempatkan titik dapat dilakuak dengan sintaks glVertex2f(x,
y). x dan y adalah koordinat titik. Selain itu terdapat juga sintaks untuk mewarnai
titik yaitu glColor3f(a, b, c). a, b, c adalah kode warna RGB (Red, Green, dan Blue)
yang masing-masing bernilai antara 0-255. Untuk mengatur ukuran titik
ditambahkan sintaks glPointSize(). Selain warna titik, warna background juga dapat
diubah dengan melaukan perubahan pada nilai glClearColor().
<html>
<head>
<title>Tugas Grafkom</title>
</head>
<style>
canvas{
margin:1px;
float:left;
border:1px solid red;}
</style>
<body>
<h1>Membuat 4 Titik</h1>
<canvas width = "400" height = "400" id =
"CanvasTitik"></canvas>
<script type="text/javascript"
src="js/4titik.js"></script>
</body>
</html>
Tampilan javascript
var vertices =
[
-0.5,0.5,
0.5,-0.5,
0.5,-0.5,
0.5,0.5,
];
Tampilan program :
else
{
//code start here
float step;
float x1 = 0.4 , x2 = 0.6 , y1 = 0.8 , y2 = 0.9;
float deltaX = x2-x1;
float deltaY = y2-y1;
if(deltaX<0)
{
deltaX = deltaX*-1;//dikali -1 jika nilai dibawah nol maka
dia akan berada pada diagram minus
}
if(deltaY<0)
{
deltaY = deltaY*-1;
}
if(deltaX>=deltaY)
{
step = deltaX;
}
else
{
step = deltaY;
}
while(x1<=x2)
{
glVertex2f (x1, y1);
x1 = x1 + stepX;
y1 = y1 + stepY;
}
glEnd ();
SwapBuffers (hDC);
glFlush();
}
Tampilan program
<html>
<head>
<title>Tugas Grafkom</title>
</head>
<style>
canvas{
margin:1px;
float:left;
border:1px solid red;
}
</style>
<body>
<h1>Algoritma DDA</h1>
<canvas width = "400" height = "400" id =
"CanvasDDA"></canvas>
<script type="text/javascript" src="js/dda.js"></script>
</body>
</html>
Tampilan javascript
koordinat = [];
jum = 0;
function createVertex()
{
var x1 = -0.2 , y1 = -0.5;
var x2 = 0.5 , y2 =0.6;
var step;
var dx = x2-x1;
var dy = y2-y1;
if(dx<0)
{
dx = dx * -1;
}
if (dy<0)
{
dy = dy * -1;
}
tambahx = dx/(step*100);
tambahy = dy/(step*100);
while(x1<=x2)
{
koordinat.push(x1,y1);
Tampilan Program :
else
{
/* OpenGL animation code goes here */
glClearColor(0.0f,0.0f,0.0f,0.0f);
glClear (GL_COLOR_BUFFER_BIT);
glViewport(0,0,400,250);
glPointSize(5.0);
glBegin(GL_POINTS);
float duady=2*dy;
float duadydx=2*(dy-dx);
float p=(2*dy)-dx;
float xendpoint,x,y;
if(x1>x2)
{
x=x2;
y=y2;
xendpoint=x1;
}
else
{
x=x1;
y=y1;
xendpoint=x2;
}
glVertex2f(x,y);
while(x<xendpoint)
{
x=x+0.001;
if(p<0)
{
p=p+duady;
}
else
{
y=y+0.001;
p=p+duadydx;
}
glVertex2f(x,y);
}
glEnd();
SwapBuffers(hDC);
glFlush();
}
Tampilan program
<html>
<head>
<title>Tugas Grafkom</title>
</head>
<style>
canvas{
margin:1px;
float:left;
border:1px solid red;
}
</style>
<body>
<h1>Algoritma Bresenham</h1>
<canvas width = "400" height = "400" id =
"CanvasBresenham"></canvas>
<script type="text/javascript"
src="js/bresenham.js"></script>
</body>
</html>
Tampilan javascript
koordinat = [];
jum = 0;
function createVertex(){
var x1 = -0.6 , y1 = 0.6;
var x2 = 0.6 , y2 = 0;
var x;
//hitung dx dan dy
dx = Math.abs(x2-x1);
dy = Math.abs(y2-y1);
//hitung p
var p = (2*dy)-dx;
duady = 2 * dy;
duadydx = 2 * (dy - dx);
koordinat.push(x,y);
Tampilan Program :