February 4, 2015
A. TUJUAN
- Memahami jenis-jenis primitive objects.
- Memahami dan dapat membuat objek primitif.
- Memahami penerapan Objek primitif menjadi bangun 2 dimensi dasar.
- Memahami dan dapat membuat fungsi untuk bangun 2 dimensi dasar.
B. JOBSHEET PRAKTIKUM
1. Jobsheet 1: Script Dasar
Source code:
glutInitWindowPosition(100,100);
glutInitWindowSize(320,240);
gluOrtho2D(-320.,320.,-240.,240.);
Penjelasan: merupakan script dasar dalam penggunaan program untuk mengatur
ukuran widows dan posisi windows
2. Jobsheet 2:
Source code:
#include <stdlib.h>
#include <glut.h>
void drawDot(void){
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_POINTS);
glVertex2i(-200, -100);
glVertex2i(200, 100);
glVertex2i(250, 150);
glEnd();
glFlush();
}
Output program:
#include <stdlib.h>
#include <glut.h>
void drawDot(void){
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_POINTS);
glVertex2i(18, 200);
glVertex2i(100, 100);
glVertex2i(200, 200);
glEnd();
glFlush();
}
Output program:
b.
#include <stdlib.h>
#include <glut.h>
void drawDot(void){
glPointSize(10);
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_POINTS);
glVertex2i(50, 0);
glVertex2i(50, 50);
glVertex2i(0, 0);
glEnd();
glFlush();
}
void main(int argc, char **argv){
glutCreateWindow("Pemrograman Grafis GLUT");
glutInitWindowPosition(100, 100);
glutInitWindowSize(640, 480);
gluOrtho2D(-320., 320., -240., 240.);
glutDisplayFunc(drawDot);
glutMainLoop();
}
Output program:
c.
#include <stdlib.h>
#include <glut.h>
void drawDot(void)
{
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_POINTS);
glVertex2i(50, 0);
glPointSize(10);
glVertex2i(50, 50);
glVertex2i(0, 0);
glEnd();
glFlush();
}
void main(int argc, char **argv){
glutCreateWindow("Pemrograman Grafis GLUT");
glutInitWindowPosition(100, 100);
glutInitWindowSize(400, 400);
gluOrtho2D(-320., 320., -240., 240.);
glutDisplayFunc(drawDot);
glutMainLoop();
}
Output program:
#include <stdlib.h>
#include <glut.h>
void drawLine(){
glLineWidth(35);
glBegin(GL_LINES);
glColor3f(1.,0.,0.);
glVertex2d(0.0,-0.8);
glVertex2d(9.9,8.9);
glEnd();
glFlush();
}
Output program:
#include <stdlib.h>
#include <glut.h>
void drawLine(){
glLineWidth(20);
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_LINES);
glVertex2d(18, 200);
glVertex2d(100, 100);
glVertex2d(200, 200);
glEnd();
glFlush();
}
void main(int argc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DEPTH | GLUT_SINGLE | GLUT_RGBA);
glutCreateWindow("Modul 2");
glutInitWindowPosition(100, 100);
glutInitWindowSize(640, 480);
gluOrtho2D(-320., 320., -240., 240.);
glutDisplayFunc(drawLine);
glutMainLoop();
}
Output program:
b.
#include <stdlib.h>
#include <glut.h>
void drawLine(){
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_LINES);
glVertex2d(18, 200);
glVertex2d(100, 100);
glLineWidth(20);
glVertex2d(200, 200);
glEnd();
glFlush();
}
void main(int argc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DEPTH | GLUT_SINGLE | GLUT_RGBA);
glutCreateWindow("Modul 2");
glutInitWindowPosition(100, 100);
glutInitWindowSize(640, 480);
gluOrtho2D(-320., 320., -240., 240.);
glutDisplayFunc(drawLine);
glutMainLoop();
}
Output program:
c.
source code:
#include <stdlib.h>
#include <glut.h>
void drawLine(){
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_LINES);
glVertex2d(18, 200);
glVertex2d(100, 100);
glVertex2d(200, 200);
glLineWidth(20);
glEnd();
glFlush();
}
void main(int argc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DEPTH | GLUT_SINGLE | GLUT_RGBA);
glutCreateWindow("Modul 2");
glutInitWindowPosition(100, 100);
glutInitWindowSize(640, 480);
gluOrtho2D(-320., 320., -240., 240.);
glutDisplayFunc(drawLine);
glutMainLoop();
Output progam:
Penjelasan:
Hampir sama dengan program yang menampilkan titik sebelumnya,GL point size
kita ubah letaknya pada script untuk menampilkan ukuran dan ketebalan garis
yang berbeda.
6. Jobsheet 6:
Source code:
#include <stdlib.h>
#include <glut.h>
void drawPoliline(void)
{
glBegin(GL_LINE_STRIP);
glVertex2d(18, 200);
glVertex2d(100, 100);
glVertex2d(200, 200);
glVertex2d(200, 200);
glEnd();
glFlush();
}
void main(int argc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DEPTH | GLUT_SINGLE | GLUT_RGBA);
glutInitWindowPosition(100, 100);
glutInitWindowSize(640, 480);
glutCreateWindow("Modul 2");
gluOrtho2D(-320., 320., -240., 240.);
glutDisplayFunc(drawPoliline);
glutMainLoop();
}
Output program:
Penjelasan:
Program ini menampilkan segitiga dengan sisi bagian atas ukuran garisnya tidak
terlalu besar,sehingga tampilan garisnya tipis.
7. Jobhseet 7:
Source code:
#include <stdlib.h>
#include <glut.h>
void drawSimetris(void)
{
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_LINE_LOOP);
glVertex2d(18, 200);
glVertex2d(100, 100);
glVertex2d(200, 200);
glVertex2d(200, 200);
glVertex2d(200, 200);
glEnd();
glFlush();
}
void main(int argc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DEPTH | GLUT_SINGLE | GLUT_RGBA);
glutInitWindowPosition(100, 100);
glutInitWindowSize(640, 480);
glutCreateWindow("Modul 2");
gluOrtho2D(-320., 320., -240., 240.);
glutDisplayFunc(drawSimetris);
glutMainLoop();
}
Output program:
Penjelasan:
Program ini menampilkan segitiga yang hampir sama dengan sebelumnya,namu
sisi bagian atasya terlihat.
8. Jobsheet 8:
Source code:
#include <stdlib.h>
#include <glut.h>
void drawSegiTiga(void)
{
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_TRIANGLES);
glVertex2d(18, 200);
glVertex2d(100, 100);
glVertex2d(200, 200);
glVertex2d(100, 50);
glVertex2d(50, 200);
glVertex2d(-50, -50);
glEnd();
glFlush();
}
void main(int argc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DEPTH | GLUT_SINGLE | GLUT_RGBA);
glutInitWindowPosition(100, 100);
glutInitWindowSize(640, 480);
glutCreateWindow("Modul 2");
gluOrtho2D(-320., 320., -240., 240.);
glutDisplayFunc(drawSegiTiga);
glutMainLoop();
}
Output program:
Penjelasan:
Program menampilkan dua segitiga yang terpisah,namun ada beberapa bagian
yang saling terhubung,hal ini terjadi karena
9. Jobsheet 9:
Source code:
#include <stdlib.h>
#include <glut.h>
void drawBangunBebas(void)
{
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_TRIANGLE_STRIP);
glVertex2d(100, 200);
glVertex2d(200, 100);
glVertex2d(250, 250);
glVertex2d(50, 50);
glVertex2d(50, 50);
glVertex2d(-50, -50);
glEnd();
glFlush();
}
void main(int argc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DEPTH | GLUT_SINGLE | GLUT_RGBA);
glutInitWindowPosition(100, 100);
glutInitWindowSize(640, 480);
glutCreateWindow("Modul 2");
gluOrtho2D(-320., 320., -240., 240.);
glutDisplayFunc(drawBangunBebas);
glutMainLoop();
}
Output program:
Penjelasan:
Program ini hampir sama dengan sebelumnya namun bentuknya bebas dengan
menggunakan prinsip segitiga.
#include <stdlib.h>
#include <glut.h>
void drawTriangleFan(void)
{
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_TRIANGLE_FAN);
glVertex2d(100, 200);
glVertex2d(200, 100);
glVertex2d(250, 250);
glVertex2d(50, 50);
glVertex2d(50, 50);
glVertex2d(-50, -50);
glEnd();
glFlush();
}
void main(int argc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DEPTH | GLUT_SINGLE | GLUT_RGBA);
glutInitWindowPosition(100, 100);
glutInitWindowSize(400, 400);
glutCreateWindow("Pemograman Grafis GLUT : Khafid");
gluOrtho2D(-320., 320., -240., 240.);
glutDisplayFunc(drawTriangleFan);
glutMainLoop();
}
Output program:
Penjelasan:
Program ini menggunakan triangle_fan yang titik koordinatnya berpusat.
#include <stdlib.h>
#include <glut.h>
void drawLine(void){
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_QUADS);
glVertex2d(100, 100);
glVertex2d(150, 100);
glVertex2d(150, 150);
glVertex2d(100, 150);
glVertex2d(190, 100);
glVertex2d(240, 100);
glVertex2d(240, 150);
glVertex2d(190, 150);
glEnd();
glFlush();
}
void main(int argc, char **argv){
glutCreateWindow("Modul 2");
glutInitWindowPosition(100, 100);
glutInitWindowSize(640, 480);
gluOrtho2D(-320., 320., -240., 240.);
glutDisplayFunc(drawLine);
glutMainLoop();
}
Output program:
Penjelasan:
Program menampilkan dua buah segi empat yang terpisah,untuk membuat segi
empat menggunakan GL_QUADS
#include <stdlib.h>
#include <glut.h>
void drawLine(void){
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_QUAD_STRIP);
glVertex2d(200, 50);
glVertex2d(200, 100);
glVertex2d(175, 200);
glVertex2d(175, 150);
glVertex2d(-50, 100);
glVertex2d(75, -100);
glEnd();
glFlush();
}
void main(int argc, char **argv){
glutCreateWindow("Modul 2");
glutInitWindowPosition(100, 100);
glutInitWindowSize(640, 480);
gluOrtho2D(-320., 320., -240., 240.);
glutDisplayFunc(drawLine);
glutMainLoop();
}
Output program:
Penjelasan:
Menampilkan objek bangun bebas dengan fungsi GL_QUADS_STRIP. Memliki 6
titik koordinat.
#include <stdlib.h>
#include <glut.h>
void drawLine(void){
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_POLYGON);
glVertex2d(50, 100);
glVertex2d(150, 50);
glVertex2d(250, 100);
glVertex2d(220, 150);
glVertex2d(250, 200);
glVertex2d(150, 150);
glVertex2d(50, 200);
glVertex2d(0, 150);
glEnd();
glFlush();
}
void main(int argc, char **argv){
glutCreateWindow("Modul 2");
glutInitWindowPosition(100, 100);
glutInitWindowSize(640, 480);
gluOrtho2D(-320., 320., -240., 240.);
glutDisplayFunc(drawLine);
glutMainLoop();
}
Output program:
Penjelasan:
Objek bebas kali ini menggunakan polygon
#include <stdlib.h>
#include <glut.h>
glEnd();
}
void renderScene(void){
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.,0.,0.);
segiEmpat(-200,200,100,100);
glColor3f(0.,1.,0.);
segiEmpat(100,200,150,150);
glColor3f(0., 0., 1.);
segiEmpat(0, 0, 50, 50);
glFlush();
}
Output program:
#include <stdlib.h>
#include <glut.h>
void segiEmpat(int posx, int posy, int w, int h){
glBegin(GL_QUADS);
glVertex2i(posx + w, posy);
glVertex2i(posx, posy);
glVertex2i(posx - (w), posy - h);
glVertex2i(posx + w, posy - h);
glEnd();
}
void renderScene(void) {
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1., 0., 0.);
segiEmpat(100, 80, 20, 60);
glColor3f(0., 1., 1.);
segiEmpat(-100, 90, 50, 70);
glColor3f(0., 0., 1.);
segiEmpat(0, -40, 100, 40);
glFlush();
}
void main(int argc, char **argv) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DEPTH | GLUT_SINGLE |GLUT_RGBA);
glutInitWindowPosition(100, 100);
glutInitWindowSize(640, 480);
glutCreateWindow("Modul 2");
gluOrtho2D(-320.0, 320.0, -240.0, 240.0);
glutDisplayFunc(renderScene);
glutMainLoop();
}
Output program:
Penjelasan: deklrasi koordinat untuk membuat titik yang jika dihubungkan akan
membentuk jajar genjang
#include <stdlib.h>
#include <glut.h>
void segiEmpat(int posx, int posy, int w, int h){
glBegin(GL_QUADS);
glVertex2i(posx, posy);
glVertex2i(posx + w, posy);
glVertex2i(posx + 2 * w, posy - h);
glVertex2i(posx - w, posy - h);
glEnd();
}
void renderScene(void) {
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(0., 0., 1.);
segiEmpat(40, 40, 70, 50);
glColor3f(0., 1., 0.);
segiEmpat(-90, -10, 20, 70);
glColor3f(1., 0., 0.);
segiEmpat(80, 120, 80, 40);
glFlush();
}
void main(int argc, char **argv) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DEPTH | GLUT_SINGLE | GLUT_RGBA);
glutInitWindowPosition(100, 100);
glutInitWindowSize(640, 480);
glutCreateWindow("Modul 2");
gluOrtho2D(-320.0, 320.0, -240.0, 240.0);
glutDisplayFunc(renderScene);
glutMainLoop();
}
Output program:
#include <stdlib.h>
#include <glut.h>
void segiEmpat(int posx, int posy, int w, int h){
glBegin(GL_QUADS);
glVertex2i(posx, posy);
glVertex2i(posx + w, posy);
glVertex2i(posx + (w / 2), posy - h);
glVertex2i(posx - (w / 2), posy - h);
glEnd();
}
void renderScene(void) {
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1., 0., 0.);
segiEmpat(10, 50, 100, 80);
glColor3f(0., 1., 0.);
segiEmpat(-20, -40, 40, 30);
glColor3f(0., 0., 1.);
segiEmpat(-90, -20, 50, 40);
glFlush();
}
void main(int argc, char **argv) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DEPTH | GLUT_SINGLE | GLUT_RGBA);
glutInitWindowPosition(100, 100);
glutInitWindowSize(640, 480);
glutCreateWindow("Modul 2");
gluOrtho2D(-320.0, 320.0, -240.0, 240.0);
glutDisplayFunc(renderScene);
glutMainLoop();
}
Output program:
C. TUGAS ASISTENSI
- Tugas Asistensi 1: Membuat objek belah ketupat
source code:
#include <stdlib.h>
#include <glut.h>
glEnd();
}
void renderScene(void){
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1,1,0); //warna kuning
segiEmpat(-180,200,90,90);
glColor3f(1,1,0); //warna kuning
segiEmpat(-180,20,-90,-90);
glColor3f(1,1,1); //putih
segiEmpat(180,-40,30,30);
glColor3f(1,1,1); //putih
segiEmpat(180,-100,-30,-30);
glFlush();
}
Output program:
Penjelasan:
Program ini menampilkan 3 belah ketupat yang memiliki ukuran,posisi serta
warna yang berbeda. Untuk membuat belah ketupat program ini menggunakan
QUADS untuk menghubungkan 4 titik agar saling terhubung.
- Tugas Asistensi 2:
Source code:
#include <stdlib.h>
#include <glut.h>
glEnd();
}
void renderScene(void){
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1,1,0); //kuning
segiEmpat(-180,100,90,90);
glColor3f(0,0,1); //biru
segiEmpat(0,100,60,60);
glColor3f(1,1,1); //putih
segiEmpat(90,100,30,30);
glFlush();
}
Output program:
Penjelasan:
Hampir sama dengan program sebelumnya,program kali ini menampilkan objek
2D segi empat yaitu layang-layang menggunakan QUADS juga agar 4 titik yang
dibuat dapat saling terhubung. Deklarasi tiap-tiap posisi titik adalah sebagai
berikut
glVertex2i(posx,posy);// posisi a
glVertex2i(posx+w,posy-h);// posisi b
glVertex2i(posx,posy-3*h);// posisi c
glVertex2i(posx-w,posy-h);// posisi d
- Tugas Asistensi 3:
Source code:
#include "stdlib.h"
#include "glut.h"
#include "math.h"
void back(){
glBegin(GL_QUADS);
glColor3f(1,1,1);
glVertex2d (-150,150);
glVertex2d(150,150);
glVertex2d(150,-150);
glVertex2d (-150,-150);
glEnd();
}
glEnd();
}
void Draw() {
glClear(GL_COLOR_BUFFER_BIT);
back();
glColor3f(1.0, 0.0, 0.0);
lingkaran(30,70,0,0);
glColor3f(1.0, 0.0, 1.0);
lingkaran(20,70,-40,-40);
glColor3f(0.0, 1.0, 0.0);
lingkaran(40,70,60,60);
glFlush();
}
Output program:
Penjelasan:
Program ini menampilkan 3 lingkaran yang memliki ukuran dan warna yang
berbeda. Untuk merubah backgroundnya menjadi putih menggunakan
glColor3f(1,1,1);
- Tugas Asistensi 4:
Source code:
#include <stdlib.h>
#include <glut.h>
glVertex2i(posx,posy-h);// posisi c
glVertex2i(posx-w,posy+h);// posisi d
glEnd();
}
void renderScene(void){
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1,1,0); //kuning
segiEmpat(-180,100,90,90);
glColor3f(1,1,0); //kuning
segiEmpat(-180,-50,-90,-90);
glColor3f(0,0,1); //biru
segiEmpat(0,170,60,60);
glColor3f(0,0,1); //biru
segiEmpat(0,80,-60,-60);
glColor3f(1,1,1); //putih
segiEmpat(180,100,30,30);
glColor3f(1,1,1); //putih
segiEmpat(180,70,-30,-30);
glFlush();
}
Output program:
Penjelasan:
glVertex2i(posx,posy);// posisi a
glVertex2i(posx+w,posy+h);// posisi b
glVertex2i(posx,posy-h);// posisi c
glVertex2i(posx-w,posy+h);// posisi d
D. KESIMPULAN
- Untuk membuat objek 2D pertama-tama harus menentukan terlebih dahulu posisi
dari tiap-tiap titik agar pada saat terhubung dapat benar-benar membentuk objek
yang diinginkan.
- Jika ingin membuat objek segi empat tambahkan glBegin(GL_QUADS); pada awal
program sebagai deklarasi.
- Primitif objek terdiri atas titik,garis,dan bangun 2D
- Primitif objek yang digunakan dalam pembuatan objek, - GL_POINTS,
GL_LINES,GL_LINE_LOOP,GL_LINE_STRIP,GL_TRIANGLES_STRIP,GL_
TRIANGLE_FAN,GL_QUADS,GL_QUADS_STRIP,GL_POLYGON
E. DAFTAR PUSTAKA
- Team Asisten Praktikum.2015.Modul 2.Universitas Negri Malang.Malang