modul perkuliahan komputer grafik -...

Download MODUL PERKULIAHAN KOMPUTER GRAFIK - …fasilkom.mercubuana.ac.id/wp-content/uploads/2017/10/Komputer... · Komputer Grafik berkaitan dengan semua aspek dalam pembuatan gambar di

If you can't read please download the document

Upload: lamminh

Post on 06-Feb-2018

229 views

Category:

Documents


1 download

TRANSCRIPT

  • MODUL PERKULIAHAN

    KOMPUTER

    GRAFIK

    Pertemuan ke-1 Sistem Koordinat

    Fakultas ProgramStudi TatapMuka KodeMK DisusunOleh IlmuKomputer TeknikInformatika 01 15011 TimDosen

    Abstract Kompetensi Ilmu computer saat ini sedang berkembang dengan sangat pesat. Kemajuan dalam bidang ilmu computer ditunjukkan dari berbagai aspek, seperti pada bidang penelitian. Penelitian ini berfokus pada tujuan dan manfaat mempelajari penelitian tersebut.

    Dalam pembahasan kali ini dalam pertemuan pertama matakuliah Komputer Grafik akan membahas tentang sistem koordinat.

  • 13 2 Komputer Grafik Pusat Bahan Ajar dan eLearning Tim Dosen http://www.mercubuana.ac.id

    Pendahuluan

    Komputer Grafik berkaitan dengan semua aspek dalam pembuatan gambar di

    komputer. Aspek aspek tersebut antara lain adalah aspek perangkat keras komputer

    (hardware), perangkat lunak (software), serta aplikasi-aplikasi. Sistem grafika

    sederhana terdiri dari peralatan masukan (input devices), prosesor, memori, frame

    buffer, dan peralatan luaran (output devices). Ilustrasi sistem grafika sederhana

    dapat dilihat pada Gambar 1.1. Salah satu peralatan luaran yang lama digunakan

    adalah tabung sinar katoda atau CRT (Cathode Ray Tube), yang dapat digunakan

    untuk menampilkan isi dari frame buffer.

    Gambar 1.1 Sistem grafis sederhana

    Sejarah pengembangan grafika komputer berawal dari era tahun 1950an. Pada saat

    itu komputer masih sangat sederhana. Teknologi grafika komputer saat itu baru

    mampu menampilkan tampilan grafis sederhana menggunakan A/D converter.

    Kemudian pada era 1960-1970, mulai dikenal apa yang disebut dengan gambar

    wireframe, yakni garis-garis pembentuk objek.

  • 13 3 Komputer Grafik Pusat Bahan Ajar dan eLearning Tim Dosen http://www.mercubuana.ac.id

    Belakangan, pengelolaan grafik menggunakan computer dapat dilakukan dengan

    menggunakan aplikasi dimana rancangan gambar dalam bentuk fungsi-fungsi yang

    telah membentuk visual telah tersedia. Pengelolaan grafik juga dapat menggunakan

    compiler pengelola grafis. Inipun terbagi menjadi 2 kategori, kategori pertama adalah

    pengelola grafis primitive yang berbasis console, dan kategori kedua adalah

    pengelola grafis wizard yang berbasis graphical user interface.

    Model pertama belakangan muncul dalam bentuk aplikasi pengelola grafis interaktif

    yang digagas oleh Ivan Sutherland dalam tesis PhD-nya di MIT. Interaktif disini

    berarti ada interaksi antara manusia dengan mesin. Lebih spesifik lagi, dalam

    sebuah perulangan (loop), mesin akan menampilkan sesuatu, manusia

    menggerakkan sebuah alat input (misalnya sebuah light pen), selanjutnya komputer

    menghasilkan tampilan baru berdasarkan masukan pengguna tadi. Sistem grafika

    dengan tujuan khusus awalnya dibangun dengan membebaskan komputer dengan

    tujuan umum dari proses pembaruan tampilan secara kontinyu. Hal ini dilakukan

    dengan menggunakan display processor yang memiliki arsitektur. Didalam display

    processor juga terdapat instruksi-instruksi untuk menampilkan bentuk-bentuk

    primitive seperti garis dan kurva pada CRT. Kelebihan utama dari display processor

    adalah bahwa instruksi-instruksi untuk membentuk sebuah gambar dapat disusun

    sekali di dalam host untuk kemudian dikirim ke display processor dan disimpan di

    memori display processor dalam bentuk sebuah display list. Selanjutnya display

    processor akan mengeksekusi berulangkali program yang terdapat pada display list

    dengan tingkat pemanggilan program yang cukup cepat untuk menghindari adanya

    delay, dengan tidak membebani host sehingga host dapat dibebani dengan tugas

    yang lain. Pada era 1970-1980, mulai dikenal standard dalam grafika komputer.

    Selain itu, raster graphics menjadi metode yang paling umum saat itu. Workstation

    dan personal computer (PC) juga menjadi platform yang umum untuk sebuah sistem

    grafika. Pada raster graphics, gambar dihasilkan oleh sebuah array (raster) dari

    elemen-elemen gambar (piksel) dalam frame buffer.

  • 13 4 Komputer Grafik Pusat Bahan Ajar dan eLearning Tim Dosen http://www.mercubuana.ac.id

    OpenGL

    OpenGL adalah API yang dikenalkan oleh SGI (Silicon Graphics Inc) kali pertama

    pada tahun 1980-an. Awalnya OpenGL diciptakan untuk mendukung proses

    rendering pada hanya digunakan untuk mendukung proses rendering yang dilakukan

    oleh komputer graphic produksi SGI. Namun akhirnya, OpenGL dijadikan standar

    oleh berbagai perusahaan software dan hardware.

    Selain itu, satu lagi yang menjadi kelebihan OpenGL adalah fleksibilitas. OpenGL

    dapat digunakan hampir pada semua operating system, mulai dari Windows, Linux,

    sampai Mac OS X. Salah satu contoh Game 3D yang menggunakan OpenGL

    sebagai API adalah Quake.

    Berikut adalah contoh program primitive dengan OpenGL berbasis console:

    #include

    #include

    #include

    main()

    {

    char s[5];

    int data[] = {10,12,15,20,8,5,18,25,20,10};

    int grDriver = DETECT, grMode, grErr;

    initgraph(&grDriver, &grMode, "C:\\bc5\\BGI");

    grErr = graphresult();

    if (grErr != grOk) {

    printf("BGI error: %s\n",

    grapherrormsg(grErr));

    return grErr;

  • 13 5 Komputer Grafik Pusat Bahan Ajar dan eLearning Tim Dosen http://www.mercubuana.ac.id

    }

    unsigned xMax = getmaxx();

    unsigned yMax = getmaxy();

    setfillstyle(SOLID_FILL, WHITE);

    bar(0, 0, xMax, yMax);

    setcolor(GREEN);

    ellipse(250, 80, 0, 360, 100, 30);

    setcolor(BLUE);

    settextstyle(SANS_SERIF_FONT, HORIZ_DIR, 2);

    outtextxy(180, 60, "Grafik batang");

    setcolor(RED);

    line(50, yMax-50, xMax-50, yMax-50);

    line(50, 50, 50, yMax-50);

    setcolor(BLACK);

    settextstyle(DEFAULT_FONT, VERT_DIR, 1);

    for (int i=0; i

  • 13 6 Komputer Grafik Pusat Bahan Ajar dan eLearning Tim Dosen http://www.mercubuana.ac.id

    DirectX

    Berbeda dengan OpenGL yang hanya digunakan sebagai interface graphics saja.

    DirectX merupakan sebuah paket terdiri dari Direct3D, Direct-Sound dan DirectPlay.

    Direct3D adalah API untuk graphic, Direct-Sound untuk suara dan DirectPlay untuk

    jaringan. DirectX dikembangkan oleh Microsoft. Saat ini keberadaan DirectX sudah

    sangat luas. Namun saat ini DirectX lebih diperuntukkan pada aplikasi Windows

    saja. Hal inilah yang sampai saat ini banyak disayangkan oleh para programer

    graphic. Selain itu, yang menjadi kelemahan bagi DirectX adalah Anda tidak selalu

    mendapatkan versi terbaru dari DirectX setiap Anda menginstal driver terbaru video

    card Anda. Untuk meng-update DirectX terbaru Anda harus menginstalnya secara

    tersendiri. Untungnya DirectX ini disediakan secara cuma-cuma oleh Microsoft pada

    situsnya, yaitu di http://www.microsoft.com/directx .

    Berikut ini adalah contoh program dengan DirectX berbasis Graphical User Interface

    (AppWizard). Meskipun programnya kelihatannya panjang, tetapi sebahagian besar

    adalah default. Yang ditulis hanyalah yang diblok (berwarna teks merah).

    // bkarakterView.cpp : implementation of the CBkarakterView class

    #include "stdafx.h"

    #include "bkarakter.h"

    #include "bkarakterDoc.h"

    #include "bkarakterView.h"

    #ifdef _DEBUG

    #define new DEBUG_NEW

    #undef THIS_FILE

  • 13 7 Komputer Grafik Pusat Bahan Ajar dan eLearning Tim Dosen http://www.mercubuana.ac.id

    static char THIS_FILE[] = __FILE__;

    #endif

    // CBkarakterView

    IMPLEMENT_DYNCREATE(CBkarakterView, CView)

    BEGIN_MESSAGE_MAP(CBkarakterView, CView)

    //{{AFX_MSG_MAP(CBkarakterView)

    // NOTE - the ClassWizard will add and remove mapping macros here.

    // DO NOT EDIT what you see in these blocks of generated code!

    //}}AFX_MSG_MAP

    // Standard printing commands

    ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)

    ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)

    ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)

    END_MESSAGE_MAP()

    /////////////////////////////////////////////////////////////////////////////

    // CBkarakterView construction/destruction

    CBkarakterView::CBkarakterView()

    {

    // TODO: add construction code here

    }

    CBkarakterView::~CBkarakterView()

  • 13 8 Komputer Grafik Pusat Bahan Ajar dan eLearning Tim Dosen http://www.mercubuana.ac.id

    {

    }

    BOOL CBkarakterView::PreCreateWindow(CREATESTRUCT& cs)

    {

    // TODO: Modify the Window class or styles here by modifying

    // the CREATESTRUCT cs

    return CView::PreCreateWindow(cs);

    }

    /////////////////////////////////////////////////////////////////////////////

    // CBkarakterView drawing

    void CBkarakterView::OnDraw(CDC* pDC)

    {

    CBkarakterDoc* pDoc = GetDocument();

    ASSERT_VALID(pDoc);

    // TODO: add draw code for native data here

    CString NamaKk=" Nama : Faisal Abdurrahman";

    CString NimKk=" NIM : 41512120043";

    CString NamaWk=" Nama : Arif Mustakim";

    CString NimWk=" NIM : 41512120190";

    CString topic=" Membuat Segitiga";

    pDC->TextOut(30,50,NamaKk);

    pDC->TextOut(30,70,NimKk);

    pDC->TextOut(30,90,NamaWk);

    pDC->TextOut(30,110,NimWk);

  • 13 9 Komputer Grafik Pusat Bahan Ajar dan eLearning Tim Dosen http://www.mercubuana.ac.id

    pDC->TextOut(30,130,topic);

    CFont slogan1;

    CFont slogan2;

    CFont slogan3;

    slogan1.CreateFont(20,10,0,0,0,FALSE,FALSE,FALSE,0,0,0,0,0,"Arial");

    CFont *myslog1=pDC->SelectObject(&slogan1);

    CString slog1 = "Hidup itu adalah Perjuangan";

    pDC->SetBkMode(TRANSPARENT);

    pDC->SetTextColor(RGB(255,255,0));

    pDC->TextOut(300,300,slog1);

    slogan2.CreateFont(20,10,2950,0,0,FALSE,FALSE,FALSE,0,0,0,0,0,"Arial");

    CFont *myslog2=pDC->SelectObject(&slogan2);

    CString slog2 = "Hidup itu adalah Perjuangan";

    pDC->SetBkMode(TRANSPARENT);

    pDC->SetTextColor(RGB(0,255,0));

    pDC->TextOut(460,50,slog2);

    slogan3.CreateFont(20,10,600,0,0,FALSE,FALSE,FALSE,0,0,0,0,0,"Arial");

    CFont *myslog3=pDC->SelectObject(&slogan3);

    CString slog3 = "Hidup itu adalah Perjuangan";

    pDC->SetBkMode(TRANSPARENT);

    pDC->SetTextColor(RGB(255,0,0));

    pDC->TextOut(300,300,slog3);

    }

    /////////////////////////////////////////////////////////////////////////////

  • 13 10 Komputer Grafik Pusat Bahan Ajar dan eLearning Tim Dosen http://www.mercubuana.ac.id

    // CBkarakterView printing

    BOOL CBkarakterView::OnPreparePrinting(CPrintInfo* pInfo)

    {

    // default preparation

    return DoPreparePrinting(pInfo);

    }

    void CBkarakterView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)

    {

    // TODO: add extra initialization before printing

    }

    void CBkarakterView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)

    {

    // TODO: add cleanup after printing

    }

    /////////////////////////////////////////////////////////////////////////////

    // CBkarakterView diagnostics

    #ifdef _DEBUG

    void CBkarakterView::AssertValid() const

    {

    CView::AssertValid();

    }

  • 13 11 Komputer Grafik Pusat Bahan Ajar dan eLearning Tim Dosen http://www.mercubuana.ac.id

    void CBkarakterView::Dump(CDumpContext& dc) const

    {

    CView::Dump(dc);

    }

    CBkarakterDoc* CBkarakterView::GetDocument() // non-debug version is inline

    {

    ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CBkarakterDoc)));

    return (CBkarakterDoc*)m_pDocument;

    }

    #endif //_DEBUG

    /////////////////////////////////////////////////////////////////////////////

    // CBkarakterView message handlers

    Sistem Koordinat

    Sistem Koordinat merupakan kerangka untuk menentukan posisi dari sebuah objek.

    Selama ini dikenal beberapa sistem koordinat, diantaranya adalah sistem:

    Koordinat Cartesian

    Koordinat Bola

    Koordinat Silinder

    Koordinat Layar

    1 Sistem Koordinat Cartesian

    Dalam dua dimensi, terdiri dari sumbu X (absis) dan sumbu Y (ordinat)

    Terbagi dalam 4 kuadran

    1. Kuadran I meliputi X Positif dan Y Positif

    2. Kuadran II meliputi X Negative dan Y Positif

    3. Kuadran III meliputi X negative dan Y negative

  • 13 12 Komputer Grafik Pusat Bahan Ajar dan eLearning Tim Dosen http://www.mercubuana.ac.id

    4. Kuadran IV meliputi X Positif dan Y negative

    Digambarkan sebagai berikut : y

    II I x

    III IV

    :

    Dalam 3 Dimensi, terdiri dari sumbu X,sumbu Y dan sumbu Z

    Terbagi dalam 8 kuadran

    1. Kuadran I meliputi X Positif dan Y Positif dan Z positif

    2. Kuadran II meliputi X Negative dan Y Positif dan Z positif

    3. Kuadran III meliputi X negative dan Y negative dan Z Positif

    4. Kuadran IV meliputi X Positif dan Y negative dan Z Positif

    5. Kuadran V meliputi X Positif dan Y positif dan Z negative

    6. Kuadran VI meliputi X Negatif dan Y Positif dan Z Negatif

    7. Kuadran VII meliputi X Negatif dan Y negative dan Z Negatif

    8. Kuadran IV meliputi X Positif dan Y negative dan Z Negatif

    Digambarkan sebagai berikut : z

    y x

  • 13 13 Komputer Grafik Pusat Bahan Ajar dan eLearning Tim Dosen http://www.mercubuana.ac.id

    2 Sistem Koordinat Bola Hanya dikenal dalam ruang tiga dimensi (3D).

    Terdiri dari sumbu X, sumbu Y, sumbu Z, dua parameter sudut, Yaitu Phi dan

    Theta serta satu parameter jari-jari r.

    3 Sistem Koordinat Silinder Hanya dikenal dalam ruang tiga dimensi (3D).

    Terdiri dari sumbu X, sumbu Y, sumbu Z, satu parameter sudut phi, serta satu

    parameter jari-jari (r).

    4 System Koordinat Layar

    Sistem koordinat yang digunakan pada layar monitor.

    Konsep sama dengan koordinat Cartesian, tetapi tanda pada sumbu Z dibalik

    (untuk 3D) atau tanda pada sumbu Y dibalik (pada 2D).

    Digambarkan sebagai berikut :

    - Untuk gambar 2 dimensi -

    Y(-) X(-) (0,0) X(+) Y(+)

    - Untuk gambar 3 dimensi

  • 13 14 Komputer Grafik Pusat Bahan Ajar dan eLearning Tim Dosen http://www.mercubuana.ac.id

    A. PRAKTIKUM

    1. Membangkitkan Sebuah Titik Langkah-langkah:

    Tentukan proyeksi ke arah sumbu-x (x1)

    Tentukan proyeksi ke arah sumbu-y (y1)

    Gunakan kata kunci MoveTo(x1,y1) untuk menempatkan titik pada

    koordinat (x1,y1).

    Program

    int x1=100, y1=100;

    pDC->MoveTo(x1,y1);

    2. Membangkitkan Garis Langkah-langkah:

    Tentukan koordinat titik tujuan dalam proyeksi arah sumbu-x (x2)

    Tentukan koordinat titik tujuan dalam proyeksi arah sumbu-y (y2)

    Gunakan kata kunci LineTo(x2, y2) untuk menarik garis dari titik (x1,

    y1)

    Program:

    (Lanjutan dari program sebelumnya)

    int x2=400, y2=300;

    pDC->LineTo(x2, y2);

  • 13 15 Komputer Grafik Pusat Bahan Ajar dan eLearning Tim Dosen http://www.mercubuana.ac.id

    Hasil

    Latihan:

    Lanjutkan program di atas (membuat garis) sehingga diperoleh bentuk tertentu yang

    beraturan, misalnya bentuk diamond atau belah ketupat.atau segitiga siku-siku.

    DAFTAR PUSTAKA 1. Janner Simarmata, Tintin Chandra (2007), Grafika Komputer, Andi,

    Yogyakarta 2. Abdul Kadir (2014), Panduan Pemrograman Visual C++, Andi, Yogyakarta 3. F.S.Hill, Jr.(2001), COMPUTER GRAPHICS Using Open GL, Second Edition,

    Prentice Hall, New York 4. www.academia.edu/4870575/Bahan_Ajar_Mata_Kuliah_Grafika_Komputer (diakses

    pada Tanggal 23 September 2016)

  • MODUL PERKULIAHAN

    KOMPUTER

    GRAFIK

    Pertemuan ke-2 Membangkitkan Karakter

    Fakultas ProgramStudi TatapMuka KodeMK DisusunOleh IlmuKomputer TeknikInformatika 02 15011 TimDosen

    Abstract Kompetensi Ilmu computer saat ini sedang berkembang dengan sangat pesat. Kemajuan dalam bidang ilmu computer ditunjukkan dari berbagai aspek, seperti pada bidang penelitian. Penelitian ini berfokus pada tujuan dan manfaat mempelajari penelitian tersebut.

    Dalam pembahasan kali ini dalam pertemuan pertama matakuliah Komputer Grafik akan membahas tentang cara atau metode untuk menempatkan string pada koordinat layar dan mengatur style dan tata letak karakter dan atau string.

  • 13 2 Komputer Grafik Pusat Bahan Ajar dan eLearning Tim Dosen http://www.mercubuana.ac.id

    Pendahuluan

    Komputer Grafik berkaitan dengan semua aspek dalam pembuatan gambar di

    komputer. Aspek aspek tersebut antara lain adalah aspek perangkat keras komputer

    (hardware), perangkat lunak (software), serta aplikasi-aplikasi. Sistem grafika

    sederhana terdiri dari peralatan masukan (input devices), prosesor, memori, frame

    buffer, dan peralatan luaran (output devices). Ilustrasi sistem grafika sederhana

    dapat dilihat pada Gambar 1.1. Salah satu peralatan luaran yang lama digunakan

    adalah tabung sinar katoda atau CRT (Cathode Ray Tube), yang dapat digunakan

    untuk menampilkan isi dari frame buffer.

    Gambar 1.1 Sistem grafis sederhana

    Sejarah pengembangan grafika komputer berawal dari era tahun 1950an. Pada saat

    itu komputer masih sangat sederhana. Teknologi grafika komputer saat itu baru

    mampu menampilkan tampilan grafis sederhana menggunakan A/D converter.

    Kemudian pada era 1960-1970, mulai dikenal apa yang disebut dengan gambar

    wireframe, yakni garis-garis pembentuk objek.

  • 13 3 Komputer Grafik Pusat Bahan Ajar dan eLearning Tim Dosen http://www.mercubuana.ac.id

    Belakangan, pengelolaan grafik menggunakan computer dapat dilakukan dengan

    menggunakan aplikasi dimana rancangan gambar dalam bentuk fungsi-fungsi yang

    telah membentuk visual telah tersedia. Pengelolaan grafik juga dapat menggunakan

    compiler pengelola grafis. Inipun terbagi menjadi 2 kategori, kategori pertama adalah

    pengelola grafis primitive yang berbasis console, dan kategori kedu adalah

    pengelola grafis wizard yang berbasis graphical user interface.

    Model pertama belakangan muncul dalam bentuk aplikasi pengelola grafis interaktif

    yang digagas oleh Ivan Sutherland dalam tesis PhD-nya di MIT. Interaktif disini

    berarti ada interaksi antara manusia dengan mesin. Lebih spesifik lagi, dalam

    sebuah perulangan (loop), mesin akan menampilkan sesuatu, manusia

    menggerakkan sebuah alat input (misalnya sebuah light pen), selanjutnya komputer

    menghasilkan tampilan baru berdasarkan masukan pengguna tadi. Sistem grafika

    dengan tujuan khusus awalnya dibangun dengan membebaskan komputer dengan

    tujuan umum dari proses pembaruan tampilan secara kontinyu. Hal ini dilakukan

    dengan menggunakan display processor yang memiliki arsitektur. Didalam display

    processor juga terdapat instruksi-instruksi untuk menampilkan bentuk-bentuk

    primitive seperti garis dan kurva pada CRT. Kelebihan utama dari display processor

    adalah bahwa instruksi-instruksi untuk membentuk sebuah gambar dapat disusun

    sekali di dalam host untuk kemudian dikirim ke display processor dan disimpan di

    memori display processor dalam bentuk sebuah display list. Selanjutnya display

    processor akan mengeksekusi berulangkali program yang terdapat pada display list

    dengan tingkat pemanggilan program yang cukup cepat untuk menghindari adanya

    delay, dengan tidak membebani host sehingga host dapat dibebani dengan tugas

    yang lain. Pada era 1970-1980, mulai dikenal standard dalam grafika komputer.

    Selain itu, raster graphics menjadi metode yang paling umum saat itu. Workstation

    dan personal computer (PC) juga menjadi platform yang umum untuk sebuah sistem

    grafika. Pada raster graphics, gambar dihasilkan oleh sebuah array (raster) dari

    elemen-elemen gambar (piksel) dalam frame buffer.

  • 13 4 Komputer Grafik Pusat Bahan Ajar dan eLearning Tim Dosen http://www.mercubuana.ac.id

    Menempatkan String

    Identitas sebuah gambar dapat diketahui dengan berbagai macam cara, salah

    satunya dengan cara menuliskannya pada layar. Pesan-pesan dan informasi apapun

    yang dituliskan pada layar seringkali harus dibuat menarik sehingga mendapatkan

    perhatian dan rasa ingin tahu pemirsanya.

    Pada bagian ini akan dibahas tentang bagaimana menempatkan sebuah string

    (informasi) pada koordinat layar. Selain itu, akan juga dibahas bagaimana mengatur

    jenis font untuk sebuah string yang akan ditempatkan pada koordinat layar,

    bagaimana mengatur tataletaknya, bagaimana mengatur warna karakternya,

    bagaimana mengatur latar-belakangnya, dan bagaimana mengatur style

    karakternya.

    String diperlukan dalam computer grafik untuk labeling. Pada gambar-gambar yang

    dihasilkan senantiasa disertai dengan keterangan tekstual di halaman gambar

    dengan maksud untuk memperjelas maksud dan tujuan gambar. Labeling akan

    memperkaya informasi yang disampaikan secara tersirat oleh gambar. Akan tetapi,

    meskipun labeling/string selama ini dikenal sebagai besaran karakter, tetapi

    dilingkungan computer grafis, string tetaplah dipandang sebagai grafis (raster/pixel)

    dimana domain informasinya membentuk sebuah empat persegi panjang

    sebagaimana domain-domain informasi grafis lainnya.

    1. Menempatkan String pada Koordinat Layar

    Bentuk umum :

    CString nama_objek = nilai_string;

    Contoh :

    CString namaku = Nama: Frida Astuti Dianita Putri;

  • 13 5 Komputer Grafik Pusat Bahan Ajar dan eLearning Tim Dosen http://www.mercubuana.ac.id

    Untuk menempatkan string pada posisi tertentu dilembar/halaman output digunakan

    fungsi TextOut() yang bentuk umumnya sebagai berikut :

    TextOut(Koordinat, nama_objek); Contoh :

    pDC->TextOut(100,100,namaku);

    2. Penempatan string dengan modifikasi Class : CFont

    Method : CreateFont(a, b, c, d, e, f, g, h, i, j, k, l, m, n)

    Dengan nilai argumen-argumen:

    a = tinggi font

    b = lebar font

    c = sudut putar (30o ditulis 300)

    d = default

    e = ketebalan font

    f = argumen logik untuk style ITALIC (bernilai: TRUE atau FALSE)

    g = argumen logik untuk style UNDERLINE (garis bawah)

    h = argumen logik untuk style STRIKETHROUGH (garis tengah)

    i = default

    j = default

    k = default

    l = default

    m = default

    n = jenis font

    Contoh 1:

    CFont kalimat;

    Kalimat.CreateFont(0,0,0,0,0,FALSE,FALSE,FALSE,0,0,0,0,0,Arial);

    CFont *fontDefault= pDC->SelectObject (&kalimat);

    CString kalimatku = Nama: Frida Astuti Dianita Putri;

    pDC->TextOut(200,200,kalimatku);

  • 13 6 Komputer Grafik Pusat Bahan Ajar dan eLearning Tim Dosen http://www.mercubuana.ac.id

    CFont VisualCpp;

    VisualCpp.CreateFont(60,20,450,0,FW_BOLD,FALSE,FALSE,FALSE,0,0,0,0,0,Arial);

    CFont*appwizard=pDC->SelectObject(&VisualCpp);

    pDC->TextColor(RGB(0,0,0));

    pDC->SetBkMode(TRANSPARENT);

    pDC->TextOut(50,400,mystring);

    CString mystring=APPWIZARD VISUAL C++;

    CFont Silang;

    Silang.CreateFont(60,20,3150,0,FW_BOLD,FALSE,FALSE,FALSE,0,0,0,0,0,Arial);

    CFont*silangnya=pDC->SelectObject(&Silang);

    pDC->SetTextColor(RGB(0,0,255));

    pDC->TextOut(100,100,mystring);

    Untuk memberi warna pada huruf digunakan fungsi/method:

    SetTextColor (RGB(R,G,B));

    Untuk memberikan efek transfaran digunakan fungsi/method:

    SetBkMode(TRANSPARENT);

    Contoh 2:

    Contoh 3: Menyajikan string membentuk jari-jari

    // jejariView.cpp : implementation of the CJejariView class

    #include "stdafx.h"

    #include "jejari.h"

    #include "jejariDoc.h"

    #include "jejariView.h"

    #ifdef _DEBUG

    #define new DEBUG_NEW

  • 13 7 Komputer Grafik Pusat Bahan Ajar dan eLearning Tim Dosen http://www.mercubuana.ac.id

    #undef THIS_FILE

    static char THIS_FILE[] = __FILE__;

    #endif

    /////////////////////////////////////////////////////////////////////////////

    // CJejariView

    IMPLEMENT_DYNCREATE(CJejariView, CView)

    BEGIN_MESSAGE_MAP(CJejariView, CView)

    //{{AFX_MSG_MAP(CJejariView)

    // NOTE - the ClassWizard will add and remove mapping

    macros here.

    // DO NOT EDIT what you see in these blocks of generated

    code!

    //}}AFX_MSG_MAP

    // Standard printing commands

    ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)

    ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)

    ON_COMMAND(ID_FILE_PRINT_PREVIEW,

    CView::OnFilePrintPreview)

    END_MESSAGE_MAP()

    /////////////////////////////////////////////////////////////////////////////

    // CJejariView construction/destruction

    CJejariView::CJejariView()

    {

    // TODO: add construction code here

    }

    CJejariView::~CJejariView()

    {

  • 13 8 Komputer Grafik Pusat Bahan Ajar dan eLearning Tim Dosen http://www.mercubuana.ac.id

    }

    BOOL CJejariView::PreCreateWindow(CREATESTRUCT& cs)

    {

    // TODO: Modify the Window class or styles here by modifying

    // the CREATESTRUCT cs

    return CView::PreCreateWindow(cs);

    }

    /////////////////////////////////////////////////////////////////////////////

    // CJejariView drawing

    void CJejariView::OnDraw(CDC* pDC)

    {

    CJejariDoc* pDoc = GetDocument();

    ASSERT_VALID(pDoc);

    // TODO: add draw code for native data here

    CRect aK;

    GetClientRect(aK);

    CFont font;

    for(int sudut=0; sudutSelectObject(&font);

    pDC->TextOut(aK.right/2,aK.bottom/2,"Selamat Belajar Visual C++");

    pDC->SelectObject(fontBawaan);

    font.DeleteObject();

    }

    }

    /////////////////////////////////////////////////////////////////////////////

  • 13 9 Komputer Grafik Pusat Bahan Ajar dan eLearning Tim Dosen http://www.mercubuana.ac.id

    // CJejariView printing

    BOOL CJejariView::OnPreparePrinting(CPrintInfo* pInfo)

    {

    // default preparation

    return DoPreparePrinting(pInfo);

    }

    void CJejariView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)

    {

    // TODO: add extra initialization before printing

    }

    void CJejariView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)

    {

    // TODO: add cleanup after printing

    }

    /////////////////////////////////////////////////////////////////////////////

    // CJejariView diagnostics

    #ifdef _DEBUG

    void CJejariView::AssertValid() const

    {

    CView::AssertValid();

    }

    void CJejariView::Dump(CDumpContext& dc) const

    {

    CView::Dump(dc);

    }

    CJejariDoc* CJejariView::GetDocument() // non-debug version is inline

    {

  • 13 10 Komputer Grafik Pusat Bahan Ajar dan eLearning Tim Dosen http://www.mercubuana.ac.id

    ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CJejariDoc)));

    return (CJejariDoc*)m_pDocument;

    }

    #endif //_DEBUG

    /////////////////////////////////////////////////////////////////////////////

    // CJejariView message handlers

    Outputnya adalah sebagai berikut:

    Latihan:

    1. Kerjakan contoh 1, contoh 2, dan contoh 3.

    2. Perlihatkan hasil untuk program berikut ini:

  • 13 11 Komputer Grafik Pusat Bahan Ajar dan eLearning Tim Dosen http://www.mercubuana.ac.id

    3. //Program : 2.3

    CString Namaku=" Nama : Herdi Sutrisno";

    CString Nimku=" NIM : 2010230085";

    CString topic=" Membuat Segitiga";

    pDC->TextOut(30,50,Namaku);

    pDC->TextOut(30,70,Nimku);

    pDC->TextOut(30,90,topic);

    CFont slogan1;

    CFont slogan2;

    CFont slogan3;

    slogan1.CreateFont(20,10,0,0,0,FALSE,FALSE,FALSE,0,0,0,0,0,"Arial"

    );

    CFont *myslog1=pDC->SelectObject(&slogan1);

    CString slog1 = "Hidup itu adalah Perjuangan";

    pDC->SetBkMode(TRANSPARENT);

    pDC->SetTextColor(RGB(255,255,0));

    pDC->TextOut(300,300,slog1);

    slogan2.CreateFont(20,10,650,0,0,FALSE,FALSE,FALSE,0,0,0,0,0,"Ari

    al");

    CFont *myslog2=pDC->SelectObject(&slogan2);

    CString slog2 = "Hidup itu adalah Perjuangan";

    pDC->SetBkMode(TRANSPARENT);

    pDC->SetTextColor(RGB(0,255,0));

    pDC->TextOut(460,50,slog2);

    slogan3.CreateFont(20,10,600,0,0,FALSE,FALSE,FALSE,0,0,0,0,0,"Ari

    al");

    CFont *myslog3=pDC->SelectObject(&slogan3);

    CString slog3 = "Hidup itu adalah Perjuangan";

    pDC->SetBkMode(TRANSPARENT);

    pDC->SetTextColor(RGB(255,0,0));

    pDC->TextOut(300,300,slog3);

  • 13 12 Komputer Grafik Pusat Bahan Ajar dan eLearning Tim Dosen http://www.mercubuana.ac.id

    4. Buatlah program untuk mendapatkan hasil berikut ini:

    DAFTAR PUSTAKA

    1. Janner Simarmata, Tintin Chandra (2007), Grafika Komputer, Andi, Yogyakarta

    2. Abdul Kadir (2014), Panduan Pemrograman Visual C++, Andi, Yogyakarta 3. F.S.Hill, Jr.(2001), COMPUTER GRAPHICS Using Open GL, Second Edition,

    Prentice Hall, New York 4. www.academia.edu/4870575/Bahan_Ajar_Mata_Kuliah_Grafika_Komputer (diakses

    pada Tanggal 23 September 2016)

  • MODUL PERKULIAHAN

    KOMPUTER

    GRAFIK

    Pertemuan ke-3 Bentuk-Bentuk Dasar Geometri

    Fakultas ProgramStudi TatapMuka KodeMK DisusunOleh IlmuKomputer TeknikInformatika 03 15011 TimDosen

    Abstract Kompetensi Ilmu computer saat ini sedang berkembang dengan sangat pesat. Kemajuan dalam bidang ilmu computer ditunjukkan dari berbagai aspek, seperti pada bidang penelitian. Penelitian ini berfokus pada tujuan dan manfaat mempelajari penelitian tersebut.

    Dalam pembahasan kali ini dalam pertemuan ketiga matakuliah Komputer Grafik akan membahas tentang cara atau metode untuk membuat bangun-bangun dasar geometri, seperti empat persegi panjang, lingkaran, busur, dan modifikasinya masing-masing.

  • 13 2 Komputer Grafik Pusat Bahan Ajar dan eLearning Tim Dosen http://www.mercubuana.ac.id

    Pendahuluan

    Komputer Grafik berkaitan dengan semua aspek dalam pembuatan gambar di

    komputer. Aspek aspek tersebut antara lain adalah aspek perangkat keras komputer

    (hardware), perangkat lunak (software), serta aplikasi-aplikasi. Sistem grafika

    sederhana terdiri dari peralatan masukan (input devices), prosesor, memori, frame

    buffer, dan peralatan luaran (output devices). Ilustrasi sistem grafika sederhana

    dapat dilihat pada Gambar 3.1. Salah satu peralatan luaran yang lama digunakan

    adalah tabung sinar katoda atau CRT (Cathode Ray Tube), yang dapat digunakan

    untuk menampilkan isi dari frame buffer.

    Gambar 3.1 Sistem grafis sederhana

    Sejarah pengembangan grafika komputer berawal dari era tahun 1950an. Pada saat

    itu komputer masih sangat sederhana. Teknologi grafika komputer saat itu baru

    mampu menampilkan tampilan grafis sederhana menggunakan A/D converter.

    Kemudian pada era 1960-1970, mulai dikenal apa yang disebut dengan gambar

    wireframe, yakni garis-garis pembentuk objek.

    Belakangan, pengelolaan grafik menggunakan computer dapat dilakukan dengan

    menggunakan aplikasi dimana rancangan gambar dalam bentuk fungsi-fungsi yang

  • 13 3 Komputer Grafik Pusat Bahan Ajar dan eLearning Tim Dosen http://www.mercubuana.ac.id

    telah membentuk visual telah tersedia. Pengelolaan grafik juga dapat menggunakan

    compiler pengelola grafis. Inipun terbagi menjadi 2 kategori, kategori pertama adalah

    pengelola grafis primitive yang berbasis console, dan kategori kedu adalah

    pengelola grafis wizard yang berbasis graphical user interface.

    Model pertama belakangan muncul dalam bentuk aplikasi pengelola grafis interaktif

    yang digagas oleh Ivan Sutherland dalam tesis PhD-nya di MIT. Interaktif disini

    berarti ada interaksi antara manusia dengan mesin. Lebih spesifik lagi, dalam

    sebuah perulangan (loop), mesin akan menampilkan sesuatu, manusia

    menggerakkan sebuah alat input (misalnya sebuah light pen), selanjutnya komputer

    menghasilkan tampilan baru berdasarkan masukan pengguna tadi. Sistem grafika

    dengan tujuan khusus awalnya dibangun dengan membebaskan komputer dengan

    tujuan umum dari proses pembaruan tampilan secara kontinyu. Hal ini dilakukan

    dengan menggunakan display processor yang memiliki arsitektur. Didalam display

    processor juga terdapat instruksi-instruksi untuk menampilkan bentuk-bentuk

    primitive seperti garis dan kurva pada CRT. Kelebihan utama dari display processor

    adalah bahwa instruksi-instruksi untuk membentuk sebuah gambar dapat disusun

    sekali di dalam host untuk kemudian dikirim ke display processor dan disimpan di

    memori display processor dalam bentuk sebuah display list. Selanjutnya display

    processor akan mengeksekusi berulangkali program yang terdapat pada display list

    dengan tingkat pemanggilan program yang cukup cepat untuk menghindari adanya

    delay, dengan tidak membebani host sehingga host dapat dibebani dengan tugas

    yang lain. Pada era 1970-1980, mulai dikenal standard dalam grafika komputer.

    Selain itu, raster graphics menjadi metode yang paling umum saat itu. Workstation

    dan personal computer (PC) juga menjadi platform yang umum untuk sebuah sistem

    grafika. Pada raster graphics, gambar dihasilkan oleh sebuah array (raster) dari

    elemen-elemen gambar (piksel) dalam frame buffer.

  • 13 4 Komputer Grafik Pusat Bahan Ajar dan eLearning Tim Dosen http://www.mercubuana.ac.id

    Bentuk-Bentuk Dasar Geometri

    Sebuah objek gambar bisa jadi seluruhnya atau sebagian terdiri atau tersusun dari

    beberapa bangun dasar geometri. Rangkaian bangun-bangun dasar geometri ini

    disusun sedemikian dengan posisi yang tepat sehingga membentuk sebuah objek

    bangunan atau gambar yang bisa dikenal, dipahami, dan didefinisikan.

    Beberapa bangun dasar yang dimaksud adalah empat persegi panjang

    (modifikasinya bisa bujursangkar, dan pojok-pojok melengkung), elips (modifikasinya

    bisa lingkaran), busur dengan ujung-ujung terbuka, busur dengan ujung-ujung

    terhubung satu sama lain, atau busur dengan ujung-ujung terhubung ke pusat

    lingkaran atau elips. Bangun-bangun dasar ini secara bentuk sebenarnya hanya

    mengacu kepada satu kerangka bangun, yaitu kerangka bangun empat persegi

    panjang (rectangle).

    1. Merancang Bangun Empat Persegi Panjang Kata kunci untuk bangun empat persegi panjang adalah Rectangle(). Secara umum penggunaan kata kunci (method) adalah sebagai berikut:

    Rectangle(x1, y1, x2, y2);

    Yaitu sebuah function dengan empat argumen yang sesungguhnya merupakan

    proyeksi dari dari titik koordinat. Satu titik koordinat pertama diwakili oleh pasangan

    berindeks 1 yaitu (x1,y1) sebagai koordinat titik pojok kiri atas, dan satu titik kedua

    diwakili oleh pasangan berindeks 2 yaitu (x2,y2) sebagai koordinat titik pojok

    diagonal dari titik koordinat pertama.

  • 13 5 Komputer Grafik Pusat Bahan Ajar dan eLearning Tim Dosen http://www.mercubuana.ac.id

    (x1,y1) (x1,y1)

    (x2,y2) (x2,y2)

    (a) (b)

    Gambar 3.2. (a) Kerangka bangun empat persegi panjang. (b) Setelah dikenakan

    method Rectangle()

    Jika R adalah rasio fraksi tinggi (arah y) terhadap fraksi panjang (arah x), dan

    diformulasikan sebagai:

    xy

    xxyyR

    1212

    Untuk R > 1, maka bangun yang diperoleh adalah empat persegi panjang tegak,

    untuk R = 1, maka bangun yang diperoleh adalah bujur sangkar, dan untuk R < 1,

    maka bangun yang diperoleh adalah empat persegi panjang rebah.

    2. Merancang Bangun Empat Persegi Panjang dengan Pojok-Pojok Melengkung

    Kata kunci untuk rancangan bangun empat persegi panjang dengan pojok-pojok

    melengkung adalah RoundRect(). Secara umum, bentuk penggunaan method adalah sebagai berikut:

    RoundRect(x1,y1,x2,y2,x3,y3);

    Yaitu sebuah function dengan enam argumen. Dua argumen pertama merupakan

    pasangan koordinat pada titik pojok kiri atas kerangka bangun. Dua argumen kedua

    merupakan pasangan koordinat pada titik pojok diagonalnya. Sementara argumen

    kelima menyatakan panjang kelengkungan dalam arah sumbu-x, dan argumen

  • 13 6 Komputer Grafik Pusat Bahan Ajar dan eLearning Tim Dosen http://www.mercubuana.ac.id

    keenam menyatakan panjang kelengkungan dalam arah-y. Perhatikan bahwa

    bangun akan mengacu kepada empat persegi panjang yang diperlihatkan oleh

    gambar dengan garis putus-putus (dash). Ketika dikenakan operasi RoundRect(), maka akan terbentuk kelengkungan berdasarkan nilai x3 dan nilai y3.

    (x1,y1) (x1,y1) x3

    y3

    (x2,y2) (x2,y2)

    (a) (b)

    Gambar 3.3. (a) Kerangka bangun empat persegi panjang. (b). Setelah dikenakan

    method RoundRect()

    3. Merancang Bangun Bulatan

    Kata kunci untuk rancangan bangun bulatan adalah Ellipse(). Secara umum, bentuk penggunaan method adalah sebagai berikut:

    Ellipse(x1,y1,x2,y2);

    Yaitu sebuah function dengan empat argumen. Dua argumen pertama merupakan

    pasangan koordinat pada titik pojok kiri atas kerangka bangun. Dua argumen kedua

    merupakan pasangan koordinat pada titik pojok diagonalnya. Perhatikan bahwa

    bangun akan mengacu kepada empat persegi panjang yang diperlihatkan oleh

    gambar dengan garis putus-putus (dash). Ketika dikenakan operasi Ellipse(), maka akan terbentuk bulatan yang mengacu kepada empat persegi panjang.

  • 13 7 Komputer Grafik Pusat Bahan Ajar dan eLearning Tim Dosen http://www.mercubuana.ac.id

    (x1,y1) (x1,y1)

    (x2,y2) (x2,y2)

    (a) (b)

    Gambar 3.4. (a) Kerangka bangun empat persegi panjang. (b) Setelah dikenakan

    method Ellipse()

    4. Merancang Bangun Busur dengan Ujung-Ujung Terbuka

    Kata kunci untuk rancangan bangun busur dengan ujung-ujung terbuka adalah

    Arc(). Secara umum, bentuk penggunaan method adalah sebagai berikut:

    Arc(x1,y1,x2,y2,x3,y3,x4,y4);

    Yaitu sebuah function dengan delapan argumen. Dua argumen pertama merupakan

    pasangan koordinat pada titik pojok kiri atas kerangka bangun. Dua argumen

    berikutnya merupakan pasangan koordinat pada titik pojok diagonalnya. Dua

    argumen berikutnya merupakan pasangan titik koordinat untuk ujung busur pertama,

    dan dua argumen berikutnya merupakan pasangan titik koordinat untuk ujung busur

    kedua. Perhatikan bahwa bangun akan mengacu kepada empat persegi panjang

    yang diperlihatkan oleh gambar dengan garis putus-putus (dash). Ketika dikenakan

    operasi Arc(), maka akan terbentuk busur dengan ujung-ujung terbuka.

  • 13 8 Komputer Grafik Pusat Bahan Ajar dan eLearning Tim Dosen http://www.mercubuana.ac.id

    (x1,y1) (x1,y1) (x3,y3)

    (x4,y4)

    (x2,y2) (x2,y2)

    (a) (b)

    Gambar 3.5. (a) Kerangka bangun empat persegi panjang. (b) Setelah dikenakan

    method Arc()

    5. Merancang Bangun Busur dengan Ujung-Ujung Terhubung

    Kata kunci untuk rancangan bangun busur dengan ujung-ujung terhubung adalah

    Chord(). Secara umum, bentuk penggunaan method adalah sebagai berikut:

    Chord(x1,y1,x2,y2,x3,y3,x4,y4);

    Yaitu sebuah function dengan delapan argumen. Dua argumen pertama merupakan

    pasangan koordinat pada titik pojok kiri atas kerangka bangun. Dua argumen

    berikutnya merupakan pasangan koordinat pada titik pojok diagonalnya. Dua

    argumen berikutnya merupakan pasangan titik koordinat untuk ujung busur pertama,

    dan dua argumen berikutnya merupakan pasangan titik koordinat untuk ujung busur

    kedua. Perhatikan bahwa bangun akan mengacu kepada empat persegi panjang

    yang diperlihatkan oleh gambar dengan garis putus-putus (dash). Ketika dikenakan

    operasi Chord(), maka akan terbentuk busur dengan ujung-ujung terhubung satu sama lain dengan sebuah garis lurus.

  • 13 9 Komputer Grafik Pusat Bahan Ajar dan eLearning Tim Dosen http://www.mercubuana.ac.id

    (x1,y1) (x1,y1) (x3,y3)

    (x4,y4)

    (x2,y2) (x2,y2)

    (a) (b)

    Gambar 3.6 (a) Kerangka bangun empat persegi panjang. (b) Setelah dikenakan

    method Chord()

    6. Merancang Bangun Busur dengan Ujung-Ujung Terhubung ke Pusat

    Kata kunci untuk rancangan bangun busur dengan ujung-ujung terhubung ke pusat

    adalah Pie(). Secara umum, bentuk penggunaan method adalah sebagai berikut:

    Pie(x1,y1,x2,y2,x3,y3,x4,y4);

    Yaitu sebuah function dengan delapan argumen. Dua argumen pertama merupakan

    pasangan koordinat pada titik pojok kiri atas kerangka bangun. Dua argumen

    berikutnya merupakan pasangan koordinat pada titik pojok diagonalnya. Dua

    argumen berikutnya merupakan pasangan titik koordinat untuk ujung busur pertama,

    dan dua argumen berikutnya merupakan pasangan titik koordinat untuk ujung busur

    kedua. Perhatikan bahwa bangun akan mengacu kepada empat persegi panjang

    yang diperlihatkan oleh gambar dengan garis putus-putus (dash). Ketika dikenakan

    operasi Pie(), maka akan terbentuk busur dengan ujung-ujung terhubung ke pusat.

  • 13 10 Komputer Grafik Pusat Bahan Ajar dan eLearning Tim Dosen http://www.mercubuana.ac.id

    (x1,y1) (x1,y1) (x3,y3)

    (x4,y4)

    (x2,y2) (x2,y2)

    (a) (b)

    Gambar 3.6 (a) Kerangka bangun empat persegi panjang. (b) Setelah dikenakan

    method Pie()

    Contoh:

    // BDGeometriView.cpp : implementation of the CBDGeometriView class #include "stdafx.h" #include "BDGeometri.h" #include "BDGeometriDoc.h" #include "BDGeometriView.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CBDGeometriView IMPLEMENT_DYNCREATE(CBDGeometriView, CView) BEGIN_MESSAGE_MAP(CBDGeometriView, CView) //{{AFX_MSG_MAP(CBDGeometriView)

  • 13 11 Komputer Grafik Pusat Bahan Ajar dan eLearning Tim Dosen http://www.mercubuana.ac.id

    // NOTE - the ClassWizard will add and remove mapping macros here. // DO NOT EDIT what you see in these blocks of generated code! //}}AFX_MSG_MAP // Standard printing commands ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview) END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CBDGeometriView construction/destruction CBDGeometriView::CBDGeometriView() { // TODO: add construction code here } CBDGeometriView::~CBDGeometriView() { } BOOL CBDGeometriView::PreCreateWindow(CREATESTRUCT& cs) { // TODO: Modify the Window class or styles here by modifying // the CREATESTRUCT cs return CView::PreCreateWindow(cs); } /////////////////////////////////////////////////////////////////////////////

  • 13 12 Komputer Grafik Pusat Bahan Ajar dan eLearning Tim Dosen http://www.mercubuana.ac.id

    // CBDGeometriView drawing void CBDGeometriView::OnDraw(CDC* pDC) { CBDGeometriDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add draw code for native data here

    CString NamaKk=" Nama : Faisal Abdurrahman"; CString NimKk=" NIM : 41512120043"; CString NamaWk=" Nama : Arif Mustakim"; CString NimWk=" NIM : 41512120190"; CString topic=" Merancang Lapangan Sepak Bola"; pDC->TextOut(30,40,NamaKk); pDC->TextOut(30,60,NimKk); pDC->TextOut(30,80,NamaWk); pDC->TextOut(30,100,NimWk); pDC->TextOut(30,120,topic); pDC->Rectangle(100,150,900,550); pDC->Ellipse(400,250,600,450);

    } ///////////////////////////////////////////////////////////////////////////// // CBDGeometriView printing BOOL CBDGeometriView::OnPreparePrinting(CPrintInfo* pInfo) { // default preparation return DoPreparePrinting(pInfo); }

  • 13 13 Komputer Grafik Pusat Bahan Ajar dan eLearning Tim Dosen http://www.mercubuana.ac.id

    void CBDGeometriView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) { // TODO: add extra initialization before printing } void CBDGeometriView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) { // TODO: add cleanup after printing } ///////////////////////////////////////////////////////////////////////////// // CBDGeometriView diagnostics #ifdef _DEBUG void CBDGeometriView::AssertValid() const { CView::AssertValid(); } void CBDGeometriView::Dump(CDumpContext& dc) const { CView::Dump(dc); } CBDGeometriDoc* CBDGeometriView::GetDocument() // non-debug version is inline { ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CBDGeometriDoc))); return (CBDGeometriDoc*)m_pDocument; } #endif //_DEBUG /////////////////////////////////////////////////////////////////////////////

    // CBDGeometriView message handlers

  • 13 14 Komputer Grafik Pusat Bahan Ajar dan eLearning Tim Dosen http://www.mercubuana.ac.id

    Outputnya adalah sebagai berikut:

    Latihan:

    1. Rancang koordinat untuk mendapatkan bangun-bangun dasar geometri di

    atas

    2. Buat program untuk memperoleh hasil berikut ini:

  • 13 15 Komputer Grafik Pusat Bahan Ajar dan eLearning Tim Dosen http://www.mercubuana.ac.id

    DAFTAR PUSTAKA 1. Janner Simarmata, Tintin Chandra (2007), Grafika Komputer, Andi,

    Yogyakarta 2. Abdul Kadir (2014), Panduan Pemrograman Visual C++, Andi, Yogyakarta 3. F.S.Hill, Jr.(2001), COMPUTER GRAPHICS Using Open GL, Second Edition,

    Prentice Hall, New York 4. www.academia.edu/4870575/Bahan_Ajar_Mata_Kuliah_Grafika_Komputer (diakses

    pada Tanggal 23 September 2016)

  • MODUL PERKULIAHAN

    KOMPUTER

    GRAFIK

    Pertemuan ke-4 Pewarnaan (Coloring)

    Fakultas ProgramStudi TatapMuka KodeMK DisusunOleh IlmuKomputer TeknikInformatika 04 15011 TimDosen

    Abstract Kompetensi Ilmu computer saat ini sedang berkembang dengan sangat pesat. Kemajuan dalam bidang ilmu computer ditunjukkan dari berbagai aspek, seperti pada bidang penelitian. Penelitian ini berfokus pada tujuan dan manfaat mempelajari penelitian tersebut.

    Dalam pembahasan kali ini dalam pertemuan ketiga matakuliah Komputer Grafik akan membahas tentang cara atau metode untuk mewarnai bangun-bangun geometri yang berbentuk diagram tertutup, gais-garis, ataupun karakter-karakter dan string.

  • 13 2 Komputer Grafik Pusat Bahan Ajar dan eLearning Tim Dosen http://www.mercubuana.ac.id

    Pendahuluan

    Warna termasuk komponen utama guna melengkapi informasi yang diberikan oleh

    sebuah citra. Pencitraan sebuah objek akan lebih lengkap jika disertakan warna

    bawaan dari objek tersebut.

    Warna adalah spektrum tertentu yang terdapat di dalam suatu cahaya sempurna (berwarna putih). Identitas suatu warna ditentukan panjang gelombang cahaya

    tersebut. Sebagai contoh warna biru memiliki panjang gelombang 460 nanometer.

    Panjang gelombang warna yang masih bisa ditangkap mata manusia berkisar antara

    380-780 nanometer.

    Dalam peralatan optis, warna bisa pula berarti interpretasi otak terhadap campuran

    tiga warna primer cahaya: merah, hijau, biru yang digabungkan dalam komposisi

    tertentu. Misalnya pencampuran 100% merah, 0% hijau, dan 100% biru akan

    menghasilkan interpretasi warna magenta.

    Dalam seni rupa, warna bisa berarti pantulan tertentu dari cahaya yang dipengaruhi

    oleh pigmen yang terdapat di permukaan benda. Misalnya pencampuran pigmen

    magenta dan cyan dengan proporsi tepat dan disinari cahaya putih sempurna akan

    menghasilkan sensasi mirip warna merah.

    Setiap warna mampu memberikan kesan dan identitas tertentu sesuai kondisi sosial

    pengamatnya. Misalnya warna putih akan memberi kesan suci dan dingin di daerah

    Barat karena berasosiasi dengan salju. Sementara di kebanyakan negara Timur

    warna putih memberi kesan kematian dan sangat menakutkan karena berasosiasi

    dengan kain kafan (meskipun secara teoritis sebenarnya putih bukanlah warna).

    Di dalam ilmu warna, hitam dianggap sebagai ketidakhadiran seluruh jenis

    gelombang warna. Sementara putih dianggap sebagai representasi kehadiran

    seluruh gelombang warna dengan proporsi seimbang. Secara ilmiah, keduanya

    bukanlah warna, meskipun bisa dihadirkan dalam bentuk pigmen.

  • 13 3 Komputer Grafik Pusat Bahan Ajar dan eLearning Tim Dosen http://www.mercubuana.ac.id

    Tabel 4.1. Komposisi Warna Dasar

    R G B Warna

    0 0 0 HItam

    255 0 0 Merah

    0 255 0 Hijau

    0 0 255 Biru

    255 0 255 Magenta

    255 255 0 Kuning

    0 255 255 Cyan

    255 255 255 Putih

    Tabel 4.2 Daftar warna yang dihimpun dari artikel di Wikipedia.

    Nama ContohKodewarna RGB CMYK HSV

    Abuabu

    #808080 128 128 128 0,0,0,128 0,0,50

    Biru

    #0000FF 0 0 255 255,255,0,0 240,100,100

    Birulaut

    #000080 0 0 128 255,255,0,127 240,100,50

    Coklat

    #964B00 150 75 0 0,74,150,105 30,100,59

    Emas

    #FFD700 255 215 0 0,40,255,0 51,100,100

    Hijau

    #00FF00 0 255 0 255,0,255,0 120,100,100

    Hitam

    #000000 0 0 0 0,0,0,255 0,0,0

    Kuning

    #FFFF00 255 255 0 0,0,255,0 60,100,100

  • 13 4 Komputer Grafik Pusat Bahan Ajar dan eLearning Tim Dosen http://www.mercubuana.ac.id

    Warna-warna objek dapat disajikan dalam beberapa komposisi, antara lain adalah RGB (Red, Green, Blue) dan CMYK (Cyan, Magenta, Yellow, blacK) ataupun HSV (Hue, Saturation, Value). Bahkan ada penyajian warna dengan menggunakan komposisi NTSC (National Television System Commitee) dan ada juga yang menggunakan komposisi YCbCr.

    Merancang Warna Bangun

    Untuk mewarnai sebuah bangun geometri diagram tertutup, dibutuhkan class

    CBrush, dan secara umum bentuk perintahnya adalah sebagai berikut:

    CBrush nama_objek(RGB(nr, ng, nb));

    Magenta

    #FF00FF 255 0 255 0,100,0,0 300,100,100

    Mawar

    #FF007F 255 0 127 0,100,50,0 330,100,100

    Merah

    #FF0000 255 0 0 0,255,255,0 0,100,100

    Merahmarun

    #800000 128 0 0 0,255,255,127 0,100,50

    Merahjambu

    #FFC0CB 255 192 203 0,63,52,0 350,25,100

    Nila

    #6F00FF 111 0 255 57,100,0,0 266,100,100

    Oranye

    #FF7F00 255 127 0 0,50,100,0 30,100,100

    Perak

    #C0C0C0 192 192 192 0,0,0,63 0,0,75

    Putih

    #FFFFFF 255 255 255 0,0,0,0 0,0,100

    Sian

    #00FFFF 0 255 255 100,0,0,0 180,100,100

    Ungu

    #BF00FF 191 0 255 25,100,0,0 285,100,100

    Violet

    #8F00FF 143 0 255 44,255,0,0 274,100,100

    Zaitun

    #808000 128 128 0 0,0,100,50 60,100,50

  • 13 5 Komputer Grafik Pusat Bahan Ajar dan eLearning Tim Dosen http://www.mercubuana.ac.id

    CBrush *nama_var_pointer = pDC->SelectObject(&nama_objek);

    Dengan

    nr = nilai piksel untuk chanel/komponen merah

    ng = nilai piksel untuk chanel/komponen hijau

    nb = nilai piksel untuk chanel/komponen biru

    Untuk memori 8 bit, nilai piksel berkisar antara 0 s/d 255. Nilai piksel 0 berarti

    intensitas minimum (representasinya gelap atau hitam), sedangkan nilai piksel 255

    berarti intensitas maksimum (representasinya bergantung kepada chanel).

    Contoh:

    CBrush merah(RGB(255,0,0));

    CBrush *mrh=pDC->SelectObject(&merah);

    Maka semua objek yang didefinisikan setelah perintah ini berupa bangun geometri

    diagram tertutup akan berwarna merah karena nilai piksel untuk chanel merah

    adalah maksimum, sementara nilai piksel untuk chanel hijau dan biru mainimum.

    Merancang Warna Garis

    Untuk mewarnai sebuah garis, dibutuhkan class CPen untuk meng-instansiasi objek

    garis yang dibangkitkan dengan method CreatePen(). Secara umum bentuk

    perintahnya adalah sebagai berikut:

    CPen nama_objek;

    nama_objek.CreatePen(jenis_garis, ketebalan_garis, RGB(nr, ng, nb));

    CPen *nama_var_pointer=pDC->SelectObject(&nama_objek);

    Dimana, jenis_garis merupakan konstanta untuk menentukan pola pena (garis),

    terdiri dari beberapa pilihan, seperti diperlihatkan pada tabel 4.3 berikut ini.

  • 13 6 Komputer Grafik Pusat Bahan Ajar dan eLearning Tim Dosen http://www.mercubuana.ac.id

    Tabel 4.3. Konstanta untuk menentukan pola garis

    Konstanta Bentuk garis

    PS_SOLID

    PS_DASH

    PS_DOT

    PS_DASHDOT

    PS_DASHDOTDOT

    PS_NULL

    PS_INSIDEFRAME

    Contoh penggunaan method CreatePen():

    // warnaBangunView.cpp : implementation of the CWarnaBangunView class

    //

    #include "stdafx.h"

    #include "warnaBangun.h"

    #include "warnaBangunDoc.h"

    #include "warnaBangunView.h"

    #ifdef _DEBUG

    #define new DEBUG_NEW

    #undef THIS_FILE

    static char THIS_FILE[] = __FILE__;

    #endif

    /////////////////////////////////////////////////////////////////////////////

    // CWarnaBangunView

  • 13 7 Komputer Grafik Pusat Bahan Ajar dan eLearning Tim Dosen http://www.mercubuana.ac.id

    IMPLEMENT_DYNCREATE(CWarnaBangunView, CView)

    BEGIN_MESSAGE_MAP(CWarnaBangunView, CView)

    //{{AFX_MSG_MAP(CWarnaBangunView)

    // NOTE - the ClassWizard will add and remove mapping macros here.

    // DO NOT EDIT what you see in these blocks of generated code!

    //}}AFX_MSG_MAP

    // Standard printing commands

    ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)

    ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)

    ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)

    END_MESSAGE_MAP()

    /////////////////////////////////////////////////////////////////////////////

    // CWarnaBangunView construction/destruction

    CWarnaBangunView::CWarnaBangunView()

    {

    // TODO: add construction code here

    }

    CWarnaBangunView::~CWarnaBangunView()

    {

    }

    BOOL CWarnaBangunView::PreCreateWindow(CREATESTRUCT& cs)

    {

    // TODO: Modify the Window class or styles here by modifying

    // the CREATESTRUCT cs

    return CView::PreCreateWindow(cs);

    }

  • 13 8 Komputer Grafik Pusat Bahan Ajar dan eLearning Tim Dosen http://www.mercubuana.ac.id

    /////////////////////////////////////////////////////////////////////////////

    // CWarnaBangunView drawing

    void CWarnaBangunView::OnDraw(CDC* pDC)

    {

    CWarnaBangunDoc* pDoc = GetDocument();

    ASSERT_VALID(pDoc);

    // TODO: add draw code for native data here

    CPen pena1;

    pena1.CreatePen(PS_SOLID, 1, RGB(255, 0, 0));

    CPen *p1 = pDC->SelectObject(&pena1);

    pDC->MoveTo(100,100);

    pDC->LineTo(300,100);

    CPen pena2;

    pena2.CreatePen(PS_DASH, 1, RGB(0, 255, 0));

    CPen *p2 = pDC->SelectObject(&pena2);

    pDC->LineTo(300, 300);

    CPen pena3;

    pena3.CreatePen(PS_DASHDOTDOT, 1, RGB(0, 0, 255));

    CPen *p3 = pDC->SelectObject(&pena3);

    pDC->LineTo(100,100);

    }

    /////////////////////////////////////////////////////////////////////////////

    // CWarnaBangunView printing

    BOOL CWarnaBangunView::OnPreparePrinting(CPrintInfo* pInfo)

    {

    // default preparation

  • 13 9 Komputer Grafik Pusat Bahan Ajar dan eLearning Tim Dosen http://www.mercubuana.ac.id

    return DoPreparePrinting(pInfo);

    }

    void CWarnaBangunView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)

    {

    // TODO: add extra initialization before printing

    }

    void CWarnaBangunView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)

    {

    // TODO: add cleanup after printing

    }

    /////////////////////////////////////////////////////////////////////////////

    // CWarnaBangunView diagnostics

    #ifdef _DEBUG

    void CWarnaBangunView::AssertValid() const

    {

    CView::AssertValid();

    }

    void CWarnaBangunView::Dump(CDumpContext& dc) const

    {

    CView::Dump(dc);

    }

    CWarnaBangunDoc* CWarnaBangunView::GetDocument() // non-debug version is

    inline

    {

    ASSERT(m_pDocument-

    >IsKindOf(RUNTIME_CLASS(CWarnaBangunDoc)));

    return (CWarnaBangunDoc*)m_pDocument;

    }

  • 13 10 Komputer Grafik Pusat Bahan Ajar dan eLearning Tim Dosen http://www.mercubuana.ac.id

    #endif //_DEBUG

    /////////////////////////////////////////////////////////////////////////////

    // CWarnaBangunView message handlers

    Outputnya adalah sebagai berikut:

    Contoh penggunaan CBrush:

    // warnaBangunView.cpp : implementation of the CWarnaBangunView class

    //

    #include "stdafx.h"

    #include "warnaBangun.h"

    #include "warnaBangunDoc.h"

    #include "warnaBangunView.h"

    #ifdef _DEBUG

    #define new DEBUG_NEW

    #undef THIS_FILE

    static char THIS_FILE[] = __FILE__;

    #endif

  • 13 11 Komputer Grafik Pusat Bahan Ajar dan eLearning Tim Dosen http://www.mercubuana.ac.id

    /////////////////////////////////////////////////////////////////////////////

    // CWarnaBangunView

    IMPLEMENT_DYNCREATE(CWarnaBangunView, CView)

    BEGIN_MESSAGE_MAP(CWarnaBangunView, CView)

    //{{AFX_MSG_MAP(CWarnaBangunView)

    // NOTE - the ClassWizard will add and remove mapping

    macros here.

    // DO NOT EDIT what you see in these blocks of generated

    code!

    //}}AFX_MSG_MAP

    // Standard printing commands

    ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)

    ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)

    ON_COMMAND(ID_FILE_PRINT_PREVIEW,

    CView::OnFilePrintPreview)

    END_MESSAGE_MAP()

    /////////////////////////////////////////////////////////////////////////////

    // CWarnaBangunView construction/destruction

    CWarnaBangunView::CWarnaBangunView()

    {

    // TODO: add construction code here

    }

    CWarnaBangunView::~CWarnaBangunView()

    {

    }

    BOOL CWarnaBangunView::PreCreateWindow(CREATESTRUCT& cs)

    {

  • 13 12 Komputer Grafik Pusat Bahan Ajar dan eLearning Tim Dosen http://www.mercubuana.ac.id

    // TODO: Modify the Window class or styles here by modifying

    // the CREATESTRUCT cs

    return CView::PreCreateWindow(cs);

    }

    /////////////////////////////////////////////////////////////////////////////

    // CWarnaBangunView drawing

    void CWarnaBangunView::OnDraw(CDC* pDC)

    {

    CWarnaBangunDoc* pDoc = GetDocument();

    ASSERT_VALID(pDoc);

    // TODO: add draw code for native data here

    CPen pena1;

    pena1.CreatePen(PS_SOLID, 1, RGB(255, 0, 0));

    CPen *p1 = pDC->SelectObject(&pena1);

    pDC->MoveTo(100,100);

    pDC->LineTo(300,100);

    CPen pena2;

    pena2.CreatePen(PS_DASH, 1, RGB(0, 255, 0));

    CPen *p2 = pDC->SelectObject(&pena2);

    pDC->LineTo(300, 300);

    CPen pena3;

    pena3.CreatePen(PS_DASHDOTDOT, 1, RGB(0, 0, 255));

    CPen *p3 = pDC->SelectObject(&pena3);

    pDC->LineTo(100,100);

    //Mewarnai bangun geomtri tertutup

    CBrush merah(RGB(255,0,0));

    CBrush *mrh=pDC->SelectObject(&merah);

  • 13 13 Komputer Grafik Pusat Bahan Ajar dan eLearning Tim Dosen http://www.mercubuana.ac.id

    pDC->Pie(400,100,600,300,500,100,600,200);

    CBrush biru(RGB(0,0,255));

    CBrush *br = pDC->SelectObject(&biru);

    pDC->Chord(700,100,900,300,700,200,800,100);

    }

    /////////////////////////////////////////////////////////////////////////////

    // CWarnaBangunView printing

    BOOL CWarnaBangunView::OnPreparePrinting(CPrintInfo* pInfo)

    {

    // default preparation

    return DoPreparePrinting(pInfo);

    }

    void CWarnaBangunView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo*

    /*pInfo*/)

    {

    // TODO: add extra initialization before printing

    }

    void CWarnaBangunView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)

    {

    // TODO: add cleanup after printing

    }

    /////////////////////////////////////////////////////////////////////////////

    // CWarnaBangunView diagnostics

    #ifdef _DEBUG

    void CWarnaBangunView::AssertValid() const

    {

  • 13 14 Komputer Grafik Pusat Bahan Ajar dan eLearning Tim Dosen http://www.mercubuana.ac.id

    CView::AssertValid();

    }

    void CWarnaBangunView::Dump(CDumpContext& dc) const

    {

    CView::Dump(dc);

    }

    CWarnaBangunDoc* CWarnaBangunView::GetDocument() // non-debug

    version is inline

    {

    ASSERT(m_pDocument-

    >IsKindOf(RUNTIME_CLASS(CWarnaBangunDoc)));

    return (CWarnaBangunDoc*)m_pDocument;

    }

    #endif //_DEBUG

    /////////////////////////////////////////////////////////////////////////////

    // CWarnaBangunView message handlers

    Outputnya adalah sebagai berikut:

  • 13 15 Komputer Grafik Pusat Bahan Ajar dan eLearning Tim Dosen http://www.mercubuana.ac.id

    Latihan:

    1. Rancang 7 buah garis paralel deng an panjang 300 piksel berjarak 20 piksel

    satu sama lain untuk seluruh jenis garis seperti diperlihatkan pada Tabel 4.3

    di atas. Wana garis bebas.

    2. Buat program untuk memperoleh hasil berikut ini, dimana bulatan tengah

    berwarna magenta, dan kedua area garis gawang berwarna kuning,

    sementara lapangan sendiri berlatar-belakang hijau.

    DAFTAR PUSTAKA 1. Janner Simarmata, Tintin Chandra (2007), Grafika Komputer, Andi,

    Yogyakarta 2. Abdul Kadir (2014), Panduan Pemrograman Visual C++, Andi, Yogyakarta 3. F.S.Hill, Jr.(2001), COMPUTER GRAPHICS Using Open GL, Second Edition,

    Prentice Hall, New York 4. www.academia.edu/4870575/Bahan_Ajar_Mata_Kuliah_Grafika_Komputer (diakses

    pada Tanggal 23 September 2016)

  • MODUL PERKULIAHAN

    KOMPUTER

    GRAFIK

    Pertemuan ke-5 Bentuk-Bentuk Arsiran

    Fakultas ProgramStudi TatapMuka KodeMK DisusunOleh IlmuKomputer TeknikInformatika 05 15011 TimDosen

    Abstract Kompetensi Ilmu computer saat ini sedang berkembang dengan sangat pesat. Kemajuan dalam bidang ilmu computer ditunjukkan dari berbagai aspek, seperti pada bidang penelitian. Penelitian ini berfokus pada tujuan dan manfaat mempelajari penelitian tersebut.

    Dalam pembahasan kali ini dalam pertemuan ketiga matakuliah Komputer Grafik akan membahas tentang cara atau metode untuk mengisi bangun-bangun geometri yang berbentuk diagram tertutup dengan bentuk atau pola garis-garis tertentu.

  • 13 2 Komputer Grafik Pusat Bahan Ajar dan eLearning Tim Dosen http://www.mercubuana.ac.id

    Pendahuluan

    Arsiran merupakan bagian dari pewarnaan, yaitu melakukan pengisian pada

    bangun-bangun geometri diagram tertutup dengan pola garis-garis tertentu,

    termasuk juga dalam hal ini adalah mewarnai pola garis-garis tersebut. Pola garis-

    garis dapat dipilih, dan secara garis besarnya terdiri dari dua jenis pola garis, yaitu

    pola garis searah dan pola garis perpaduan.

    Pola garis searah terdiri dari pola garis vertikal, pola garis horizontal, pola garis

    diagonal ke depan, dan pola garis diagonal ke belakang. Sementara pola garis

    perpaduan terdiri dari pola garis berpalang, dan pola garis bersilang (diagonal).

    Pola garis horizontal adalah garis-garis yang berbentangan dari kiri ke kanan.

    Pola garis vertikal adalah garis-garis yang berbentangan dari atas ke bawah.

    Pola garis diagonal ke depan adalah garis-garis yang berbentangan dari kiri atas ke

    kanan bawah.

    Pola garis diagonal ke belakang adalah garis-garis yang berbentangan dari kiri

    bawah ke kanan atas.

  • 13 3 Komputer Grafik Pusat Bahan Ajar dan eLearning Tim Dosen http://www.mercubuana.ac.id

    Pola garis berpalang adalah garis-garis perpaduan antara pola garis horizontal dan

    pola garis vertikal.

    Pola garis bersilang adalah garis-garis perpaduan antara pola garis diagonal ke

    depan dan pola garis diagonal ke belakang.

    Merancang Arsiran Untuk mengarsir dengan pola garis-garis sebuah bangun geometri diagram tertutup,

    dibutuhkan class CBrush, dan secara umum bentuk perintahnya adalah sebagai

    berikut:

    CBrush nama_objek(jenis_pola_garis, RGB(nr, ng, nb));

    CBrush *nama_var_pointer = pDC->SelectObject(&nama_objek);

    Dengan

    nr = nilai piksel untuk chanel/komponen merah

    ng = nilai piksel untuk chanel/komponen hijau

    nb = nilai piksel untuk chanel/komponen biru

  • 13 4 Komputer Grafik Pusat Bahan Ajar dan eLearning Tim Dosen http://www.mercubuana.ac.id

    Untuk memori 8 bit, nilai piksel berkisar antara 0 s/d 255. Nilai piksel 0 berarti

    intensitas minimum (representasinya gelap atau hitam), sedangkan nilai piksel 255

    berarti intensitas maksimum (representasinya bergantung kepada chanel).

    Contoh:

    CBrush merah(HS_CROSS, RGB(255,0,0));

    CBrush *mrh=pDC->SelectObject(&merah);

    Maka semua objek yang didefinisikan setelah perintah ini berupa bangun geometri

    diagram tertutup akan diarsir dengan pola garis berpalang berwarna merah karena

    nilai piksel untuk chanel merah adalah maksimum, sementara nilai piksel untuk

    chanel hijau dan biru mainimum.

    Contoh 1:

    // ArsiranView.cpp : implementation of the CArsiranView class

    //

    #include "stdafx.h"

    #include "Arsiran.h"

    #include "ArsiranDoc.h"

    #include "ArsiranView.h"

    #ifdef _DEBUG

    #define new DEBUG_NEW

    #undef THIS_FILE

    static char THIS_FILE[] = __FILE__;

    #endif

  • 13 5 Komputer Grafik Pusat Bahan Ajar dan eLearning Tim Dosen http://www.mercubuana.ac.id

    /////////////////////////////////////////////////////////////////////////////

    // CArsiranView

    IMPLEMENT_DYNCREATE(CArsiranView, CView)

    BEGIN_MESSAGE_MAP(CArsiranView, CView)

    //{{AFX_MSG_MAP(CArsiranView)

    // NOTE - the ClassWizard will add and remove mapping macros here.

    // DO NOT EDIT what you see in these blocks of generated code!

    //}}AFX_MSG_MAP

    // Standard printing commands

    ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)

    ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)

    ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)

    END_MESSAGE_MAP()

    /////////////////////////////////////////////////////////////////////////////

    // CArsiranView construction/destruction

    CArsiranView::CArsiranView()

    {

    // TODO: add construction code here

    }

    CArsiranView::~CArsiranView()

    {

    }

    BOOL CArsiranView::PreCreateWindow(CREATESTRUCT& cs)

    {

    // TODO: Modify the Window class or styles here by modifying

    // the CREATESTRUCT cs

  • 13 6 Komputer Grafik Pusat Bahan Ajar dan eLearning Tim Dosen http://www.mercubuana.ac.id

    return CView::PreCreateWindow(cs);

    }

    /////////////////////////////////////////////////////////////////////////////

    // CArsiranView drawing

    void CArsiranView::OnDraw(CDC* pDC)

    {

    CArsiranDoc* pDoc = GetDocument();

    ASSERT_VALID(pDoc);

    // TODO: add draw code for native data here

    CBrush ar1(HS_HORIZONTAL, RGB(0,0,0));

    CBrush *a1 = pDC->SelectObject(&ar1);

    pDC->Rectangle(100,100, 200,200);

    CBrush ar2(HS_VERTICAL, RGB(0,0,0));

    CBrush *a2 = pDC->SelectObject(&ar2);

    pDC->Rectangle(250,100, 350,200);

    CBrush ar3(HS_FDIAGONAL, RGB(0,0,0));

    CBrush *a3 = pDC->SelectObject(&ar3);

    pDC->Rectangle(400,100, 500,200);

    CBrush ar4(HS_BDIAGONAL, RGB(0,0,0));

    CBrush *a4 = pDC->SelectObject(&ar4);

    pDC->Rectangle(550,100, 650,200);

    CBrush ar5(HS_CROSS, RGB(255,0,0));

    CBrush *a5 = pDC->SelectObject(&ar5);

    pDC->Rectangle(700,100, 800,200);

    CBrush ar6(HS_CROSS, RGB(255,0,0));

    CBrush *a6 = pDC->SelectObject(&ar6);

    pDC->RoundRect(850,100, 1050,200,50,50);

    }

  • 13 7 Komputer Grafik Pusat Bahan Ajar dan eLearning Tim Dosen http://www.mercubuana.ac.id

    /////////////////////////////////////////////////////////////////////////////

    // CArsiranView printing

    BOOL CArsiranView::OnPreparePrinting(CPrintInfo* pInfo)

    {

    // default preparation

    return DoPreparePrinting(pInfo);

    }

    void CArsiranView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)

    {

    // TODO: add extra initialization before printing

    }

    void CArsiranView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)

    {

    // TODO: add cleanup after printing

    }

    /////////////////////////////////////////////////////////////////////////////

    // CArsiranView diagnostics

    #ifdef _DEBUG

    void CArsiranView::AssertValid() const

    {

    CView::AssertValid();

    }

    void CArsiranView::Dump(CDumpContext& dc) const

    {

    CView::Dump(dc);

    }

  • 13 8 Komputer Grafik Pusat Bahan Ajar dan eLearning Tim Dosen http://www.mercubuana.ac.id

    CArsiranDoc* CArsiranView::GetDocument() // non-debug version is inline

    {

    ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CArsiranDoc)));

    return (CArsiranDoc*)m_pDocument;

    }

    #endif //_DEBUG

    /////////////////////////////////////////////////////////////////////////////

    // CArsiranView message handlers

    Outputnya adalah sebagai berikut:

    Contoh 2:

    // newArsiranView.cpp : implementation of the CNewArsiranView class

    //

    #include "stdafx.h"

    #include "newArsiran.h"

    #include "newArsiranDoc.h"

    #include "newArsiranView.h"

    #ifdef _DEBUG

    #define new DEBUG_NEW

    #undef THIS_FILE

    static char THIS_FILE[] = __FILE__;

  • 13 9 Komputer Grafik Pusat Bahan Ajar dan eLearning Tim Dosen http://www.mercubuana.ac.id

    #endif

    /////////////////////////////////////////////////////////////////////////////

    // CNewArsiranView

    IMPLEMENT_DYNCREATE(CNewArsiranView, CView)

    BEGIN_MESSAGE_MAP(CNewArsiranView, CView)

    //{{AFX_MSG_MAP(CNewArsiranView)

    // NOTE - the ClassWizard will add and remove mapping macros here.

    // DO NOT EDIT what you see in these blocks of generated code!

    //}}AFX_MSG_MAP

    // Standard printing commands

    ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)

    ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)

    ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)

    END_MESSAGE_MAP()

    /////////////////////////////////////////////////////////////////////////////

    // CNewArsiranView construction/destruction

    CNewArsiranView::CNewArsiranView()

    {

    // TODO: add construction code here

    }

    CNewArsiranView::~CNewArsiranView()

    {

    }

    BOOL CNewArsiranView::PreCreateWindow(CREATESTRUCT& cs)

    {

    // TODO: Modify the Window class or styles here by modifying

  • 13 10 Komputer Grafik Pusat Bahan Ajar dan eLearning Tim Dosen http://www.mercubuana.ac.id

    // the CREATESTRUCT cs

    return CView::PreCreateWindow(cs);

    }

    /////////////////////////////////////////////////////////////////////////////

    // CNewArsiranView drawing

    void CNewArsiranView::OnDraw(CDC* pDC)

    {

    CNewArsiranDoc* pDoc = GetDocument();

    ASSERT_VALID(pDoc);

    // TODO: add draw code for native data here

    CBrush ar1(HS_HORIZONTAL, RGB(0,255,0));

    CBrush *a1 = pDC->SelectObject(&ar1);

    pDC->Pie(100,100, 500,500,500,150,500,450);

    CBrush ar2(HS_VERTICAL, RGB(255,0,0));

    CBrush *a2 = pDC->SelectObject(&ar2);

    pDC->Ellipse(400,200, 600,400);

    }

    /////////////////////////////////////////////////////////////////////////////

    // CNewArsiranView printing

    BOOL CNewArsiranView::OnPreparePrinting(CPrintInfo* pInfo)

    {

    // default preparation

    return DoPreparePrinting(pInfo);

    }

    void CNewArsiranView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)

    {

  • 13 11 Komputer Grafik Pusat Bahan Ajar dan eLearning Tim Dosen http://www.mercubuana.ac.id

    // TODO: add extra initialization before printing

    }

    void CNewArsiranView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)

    {

    // TODO: add cleanup after printing

    }

    /////////////////////////////////////////////////////////////////////////////

    // CNewArsiranView diagnostics

    #ifdef _DEBUG

    void CNewArsiranView::AssertValid() const

    {

    CView::AssertValid();

    }

    void CNewArsiranView::Dump(CDumpContext& dc) const

    {

    CView::Dump(dc);

    }

    CNewArsiranDoc* CNewArsiranView::GetDocument() // non-debug version is inline

    {

    ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CNewArsiranDoc)));

    return (CNewArsiranDoc*)m_pDocument;

    }

    #endif //_DEBUG

    /////////////////////////////////////////////////////////////////////////////

    // CNewArsiranView message handlers

  • 13 12 Komputer Grafik Pusat Bahan Ajar dan eLearning Tim Dosen http://www.mercubuana.ac.id

    Outputnya adalah sebagai berikut:

    Latihan:

    Buat program untuk memperoleh hasil berikut ini, dimana bulatan tengah berwarna

    magenta dengan pola garis vertikal, dan kedua area garis gawang berwarna kuning

    dengan pola garis bersilang, sementara lapangan sendiri berlatar-belakang (warna)

    hijau.

  • 13 13 Komputer Grafik Pusat Bahan Ajar dan eLearning Tim Dosen http://www.mercubuana.ac.id

    DAFTAR PUSTAKA 1. Janner Simarmata, Tintin Chandra (2007), Grafika Komputer, Andi,

    Yogyakarta 2. Abdul Kadir (2014), Panduan Pemrograman Visual C++, Andi, Yogyakarta 3. F.S.Hill, Jr.(2001), COMPUTER GRAPHICS Using Open GL, Second Edition,

    Prentice Hall, New York 4. www.academia.edu/4870575/Bahan_Ajar_Mata_Kuliah_Grafika_Komputer (diakses

    pada Tanggal 23 September 2016)

  • MODUL PERKULIAHAN

    KOMPUTER

    GRAFIK

    Pertemuan ke-6 Bentuk-Bentuk Geometri Tidak Beraturan

    Fakultas ProgramStudi TatapMuka KodeMK DisusunOleh IlmuKomputer TeknikInformatika 06 15011 TimDosen

    Abstract Kompetensi Ilmu computer saat ini sedang berkembang dengan sangat pesat. Kemajuan dalam bidang ilmu computer ditunjukkan dari berbagai aspek, seperti pada bidang penelitian. Penelitian ini berfokus pada tujuan dan manfaat mempelajari penelitian tersebut.

    Dalam pembahasan kali ini dalam pertemuan ketiga matakuliah Komputer Grafik akan membahas tentang cara atau metode untuk merancang bangun-bangun geometri baik yang bentuknya beraturan maupun tidak beraturan dengan metode polygon ataupun polypolygon.

  • 13 2 Komputer Grafik Pusat Bahan Ajar dan eLearning Tim Dosen http://www.mercubuana.ac.id

    Pendahuluan

    Poligon (secara literal berarti "banyak sudut") merupakan bentuk datar yang terdiri dari garis lurus yang bergabung untuk membentuk rantai tertutup atau sirkuit. Poligon dinamakan sesuai dengan jumlah tepi, bergabung menjadi satu dengan

    awalan angka dalam bahasa Yunani dengan akhiran-gon. Contoh pentagon,

    dodekagon. Segitiga, sisi empat, dan nonagon adalah pengecualian-pengecualian.

    Untuk nomor-nomor lebih besar, ahli matematika menulis angka sendiri, contoh 17-

    gon. Satu variabel dapat juga digunakan, biasanya n-gon.

    PoliPoligon, kalau mengacu pada pengertian poligon berarti banyak poligon.

    PoliPoligon merupakan bentuk datar yang terdiri dari poligon-poligon yang

    bergabung sebagai satu kesatuan. Ini juga dapat diartikan bahwa di dalam satu

    himpunan titik-titik sudut dapat dibuat beberapa poligon.

    Beberapa Bentuk Poligon

    Sebuah poligon paling tidak terdiri dari 3 titik sudut. Dengan tiga titik sudut, berarti

    dapat dibuat 3 sisi, dengan ukuran panjang yang bebas satu sama lain, terkecuali

    poligon tersebut dinyatakan sebagai bangun geometri beraturan. Berikut ini,

    disajikan beberapa bentuk poligon.

    Tabel 6.1. Beberapa bentuk poligon

    Bentuk Poligon Keterangan

    Bentuk beraturan, segitiga sama sisi

  • 13 3 Komputer Grafik Pusat Bahan Ajar dan eLearning Tim Dosen http://www.mercubuana.ac.id

    Bentuk beraturan, segitiga siku-siku

    Bentuk tidak beraturan

    Bentuk beraturan, empat persegi

    panjang

    Bentuk tidak beraturan, bersisi empat

    Bentuk tidak beraturan, bersisi lima

    Metode untuk membangkitkan poligon adalah Polygon(). Argumen untuk metode ini

    akan bergantuk kepada jumlah titik sudut yang membentuk poligon. Jika titik sudut

    yang membentuk poligon adalah berjumlah 4 maka argumennya akan terdiri dari 8

    elemen.

    Polygon(x1, y1, x2, y2, x3, y3, x4, y4);

    Dengan (x1,y1) adalah pasangan titik koordinat pertama, (x2,y2) adalah pasangan

    titik koordinat kedua, (x3,y3) adalah pasangan titik koordinat ketiga, dan (x4,y4)

    adalah pasangan titik koordinat keempat. Rangkaian garis lurus akan terbuat dimulai

    dari titik (x1,y1) membentang ke titik (x2,y2) membentang ke titik (x3,y3)

  • 13 4 Komputer Grafik Pusat Bahan Ajar dan eLearning Tim Dosen http://www.mercubuana.ac.id

    membentang ke titik (x4,y4) membentuk ke titik (x1,y1), sehingga membentuk

    diagram tertutup.

    Tabel 6.2. Beberapa bentuk polipoligon

    Bentuk polipoligon Keterangan

    Polipoligon yang terdiri dari 2 poligon,

    masing-masing poligon terdiri dari 3 sisi,

    yang merupakan jumlah sisi terkecil untuk

    sebuah polipoligon. Tidak ada interseksi.

    Polipoligon yang terdiri dari 2 poligon,

    masing-masing poligon terdiri dari 3 sisi,

    yang merupakan jumlah sisi terkecil untuk

    sebuah polipoligon. Saling berinterseksi.

    Polipoligon yang terdiri dari 2 poligon,

    masing-masing poligon terdiri dari 4 sisi

    dan 3 sisi. Keduanya saling

    bersinggungan.

    Polipoligon yang terdiri dari 3 poligon,

    masing-masing poligon terdiri dari 4 sisi,

    3 sisi, dan 3 sisi. Ketiga poligon ada yang

    terpisah dan ada yang berinterseksi.

    Polipoligon yang terdiri dari 3 poligon,

    masing-masing poligon terdiri dari 3 sisi.

    Ketiga poligon membentuk rantai

    interseksi.

    Polipoligon yang terdiri dari 3 poligon,

    masing-masing poligon terdiri dari 4 sisi.

    Ketiga poligon saling berinterseksi satu

    sam lain.

  • 13 5 Komputer Grafik Pusat Bahan Ajar dan eLearning Tim Dosen http://www.mercubuana.ac.id

    Metode untuk membangkitkan polipoligon adalah PolyPolygon(). Argumen untuk

    metode ini akan bergantuk kepada jumlah titik sudut yang membentuk polipoligon.

    Jika titik sudut yang membentuk polipoligon adalah berjumlah 10 maka argumennya

    akan terdiri dari 20 elemen.

    Polygon(x1, y1, x2, y2, x3, y3, x4, y4, x5, y5, x6, y6, x7, y7, x8, y8, x9, y9, x10, y10);

    Dengan (x1,y1) adalah pasangan titik koordinat pertama, (x2,y2) adalah pasangan

    titik koordinat kedua, (x3,y3) adalah pasangan titik koordinat ketiga, dan (x4,y4)

    adalah pasangan titik koordinat keempat. Rangkaian garis lurus akan terbuat dimulai

    dari titik (x1,y1) membentang ke titik (x2,y2) membentang ke titik (x3,y3)

    membentang ke titik (x4,y4), dan seterusnya.

    Untuk mendapatkan visualisasi poligon maupun polipoligon dibutuhkan beberapa

    tahap, yaitu:

    Untuk poligon melalui langkah-lngkah:

    1. Mendeklarasikan himpunan (array) poligon dengan tipe POINT. Bentuk

    umumnya adalah sebagai berikut:

    POINT nama_array[size] = {x1, y1, x2, y2, x3, y3, ..., x(size/2), y(size/2)};

    2. Membangkitkan poligon dengan metode Polygon(). Bentuk umumnya adalah

    sebagai berikut:

    Polygon(nama_array, jumlah_titik_sudut);

    Untuk polipoligon melalui langkah-langkah:

    1. Mendeklarasikan himpunan (array) poligon dengan tipe POINT. Bentuk

    umumnya adalah sebagai berikut:

    POINT nama_array[size] = {x1, y1, x2, y2, x3, y3, ..., x(size/2), y(size/2)};

    2. Mendeklarasikan himpunan (array) polipoligon dengan tipe int. Bentuk

    umumnya adalah sebagai berikut:

    int nama_array_polipoligon[] = {n1, n2, ... , n_ jumlah_poligon};

    3. Membangkitkan polipoligon dengan metode PolyPolygon(). Bentuk umumnya

    adalah sebagai berikut:

    PolyPolygon(nama_array, nama_array_polipoligon, jumlah_poligon);

  • 13 6 Komputer Grafik Pusat Bahan Ajar dan eLearning Tim Dosen http://www.mercubuana.ac.id

    Contoh 1:

    // poligon1View.cpp : implementation of the CPoligon1View class

    //

    #include "stdafx.h"

    #include "poligon1.h"

    #include "poligon1Doc.h"

    #include "poligon1View.h"

    #ifdef _DEBUG

    #define new DEBUG_NEW

    #undef THIS_FILE

    static char THIS_FILE[] = __FILE__;

    #endif

    /////////////////////////////////////////////////////////////////////////////

    // CPoligon1View

    IMPLEMENT_DYNCREATE(CPoligon1View, CView)

    BEGIN_MESSAGE_MAP(CPoligon1View, CView)

    //{{AFX_MSG_MAP(CPoligon1View)

    // NOTE - the ClassWizard will add and remove mapping macros here.

    // DO NOT EDIT what you see in these blocks of generated code!

    //}}AFX_MSG_MAP

    // Standard printing commands

    ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)

  • 13 7 Komputer Grafik Pusat Bahan Ajar dan eLearning Tim Dosen http://www.mercubuana.ac.id

    ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)

    ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)

    END_MESSAGE_MAP()

    /////////////////////////////////////////////////////////////////////////////

    // CPoligon1View construction/destruction

    CPoligon1View::CPoligon1View()

    {

    // TODO: add construction code here

    }

    CPoligon1View::~CPoligon1View()

    {

    }

    BOOL CPoligon1View::PreCreateWindow(CREATESTRUCT& cs)

    {

    // TODO: Modify the Window class or styles here by modifying

    // the CREATESTRUCT cs

    return CView::PreCreateWindow(cs);

    }

    /////////////////////////////////////////////////////////////////////////////

    // CPoligon1View drawing

  • 13 8 Komputer Grafik Pusat Bahan Ajar dan eLearning Tim Dosen http://www.mercubuana.ac.id

    void CPoligon1View::OnDraw(CDC* pDC)

    {

    CPoligon1Doc* pDoc = GetDocument();

    ASSERT_VALID(pDoc);

    // TODO: add draw code for native data here

    CBrush merah(RGB(255,0,0));

    CBrush *mrh=pDC->SelectObject(&merah);

    POINT p1[12]={100,300,300,300,400,400,300,500,100,500,200,400};

    pDC->Polygon(p1,6);

    CBrush hijau(RGB(0,255,0));

    CBrush *hj=pDC->SelectObject(&hijau);

    POINT p2[12]={350,300,450,400,550,300,550,100,450,200,350,100};

    pDC->Polygon(p2,6);

    CBrush biru(RGB(0,0,255));

    CBrush *br=pDC->SelectObject(&biru);

    POINT p3[12]={600,300,500,400,600,500,800,500,700,400,800,300};

    pDC->Polygon(p3,6);

    }

    /////////////////////////////////////////////////////////////////////////////

    // CPoligon1View printing

    BOOL CPoligon1View::OnPreparePrinting(CPrintInfo* pInfo)

    {

    // default preparation

    return DoPreparePrinting(pInfo);

  • 13 9 Komputer Grafik Pusat Bahan Ajar dan eLearning Tim Dosen http://www.mercubuana.ac.id

    }

    void CPoligon1View::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)

    {

    // TODO: add extra initialization before printing

    }

    void CPoligon1View::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)

    {

    // TODO: add cleanup after printing

    }

    /////////////////////////////////////////////////////////////////////////////

    // CPoligon1View diagnostics

    #ifdef _DEBUG

    void CPoligon1View::AssertValid() const

    {

    CView::AssertValid();

    }

    void CPoligon1View::Dump(CDumpContext& dc) const

    {

    CView::Dump(dc);

    }

    CPoligon1Doc* CPoligon1View::GetDocument() // non-debug version is inline

  • 13 10 Komputer Grafik Pusat Bahan Ajar dan eLearning Tim Dosen http://www.mercubuana.ac.id

    {

    ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CPoligon1Doc)));

    return (CPoligon1Doc*)m_pDocument;

    }

    #endif //_DEBUG

    /////////////////////////////////////////////////////////////////////////////

    // CPoligon1View message handlers

    Outputnya adalah sebagai berikut:

    Contoh 2:

    // poliPoligon1View.cpp : implementation of the CPoliPoligon1View class

    //

    #include "stdafx.h"

    #include "poliPoligon1.h"

  • 13 11 Komputer Grafik Pusat Bahan Ajar dan eLearning Tim Dosen http://www.mercubuana.ac.id

    #include "poliPoligon1Doc.h"

    #include "poliPoligon1View.h"

    #ifdef _DEBUG

    #define new DEBUG_NEW

    #undef