JOGL - Hızlı Kılavuz

Bu bölüm OpenGL'yi, işlevlerini, java'daki OpenGL bağlarını (GL4java, LWJGL, JOGL) ve diğer OpenGL bağlamalarına göre JOGL'nin avantajlarını tanıtır.

Java için bağlayıcı Odolma kalemGL(JOGL), Java'daki OpenGL grafik API'si için en son bağlantıdır. OpenGL API'ye erişebilen bir sarmalayıcı kitaplığıdır ve Java ile kodlanmış 2D ve 3D grafik uygulamaları oluşturmak için tasarlanmıştır. JOGL, başlangıçta eski MIT lisansüstü öğrencileri Ken Russell ve Chris Kline tarafından geliştirilen açık kaynaklı bir kütüphanedir. Daha sonra, Sun Microsystems'teki oyun grubu tarafından benimsendi ve şimdi Java tarafından Grafik Ses ve İşleme (JOGAMP) üzerinde sürdürülüyor. JOGL, Windows, Solaris, Mac OS X ve Linux (x86'da) gibi çeşitli işletim sistemlerinde çalışır.

OpenGL nedir?

OpenGL, 2B ve 3B grafikler oluşturmak için bir komutlar koleksiyonu olan Açık Grafik Kitaplığı anlamına gelir. OpenGL ile, noktalar, çizgiler, çokgenler, bitmapler ve görüntüler gibi çok temel ilkelleri kullanarak karmaşık 3B şekiller oluşturabilirsiniz.

İşte OpenGL'nin birkaç özelliği -

  • Birden çok platformda çalışabilir.

  • C ++, Python, vb. Gibi çeşitli dillerde bağlantıları vardır.

  • 2D ve 3D vektör grafiklerini işleyebilir.

  • Hızlı ve yüksek kaliteli render elde etmek için Grafik İşlem Birimi (GPU) ile etkileşime girer. Rendering, 2D veya 3D modelden bir görüntü oluşturma işlemidir.

  • 3D Grafik uygulamaları yazmak için endüstri standardı bir API'dir. Örneğin oyunlar, ekran koruyucular vb.

  • Programcıların uygulama geliştirmek için nesneleri ve işlemleri belirtmek için kullanabilecekleri yaklaşık 150 komut içerir.

  • Dörtlü yüzeyler ve NURBS eğrileri gibi çeşitli modelleme özellikleri sağlayan OpenGL Yardımcı Kitaplığı (GLU) içerir. GLU, OpenGL'nin standart bir bileşenidir.

  • OpenGL'nin tasarımı, verimlilik, etkinlik ve bunun birden çok dil kullanan birden çok platformda uygulanmasına odaklanmıştır. OpenGL API'nin basitliğini korumak için, pencereleme görevleri dahil edilmemiştir.

Bu nedenle OpenGL, pencereleme görevleri için diğer programlama dillerine bağlıdır.

OpenGL API için Java Bağlama

Java platformunda OpenGL kullanımına izin veren bir Java Specification Request (JSR) API spesifikasyonudur.

Teknik Özellikler Detaylar
JSR 231 Bu Java bağlama paketi, Java SE platformunu destekler.
JSR 239 Bu Java bağlama paketi, Java ME platformunu destekler.

Java'da çeşitli OpenGL bağları vardır. Aşağıda tartışılıyorlar

GL4java

Java teknolojisi için OpenGL olarak bilinir. OpenGL 1.3'e ve neredeyse tüm satıcı uzantılarına bağlantıları vardır. Ayrıca Soyut Pencere Araç Seti (AWT) ve Salıncaklar ile kullanılabilir. Tam ekran uygulamaları görüntüleyen tek bir pencere olan oyun odaklı OpenGL bağlamadır.

LWJGL

  • Hafif Java Oyun Kitaplığı (LWJGL), OpenGL 1.5 kullanır ve java'nın en son sürümüyle çalışır.

  • JSE 1.4'ün tam ekran yeteneklerini kullanabilir. AWT / Swings için sınırlı desteğe sahiptir.

  • Cep telefonları, gömülü cihazlar vb. Gibi hafif cihazlar için uygundur.

JOGL

  • JOGL yalnızca 2D ve 3D Rendering'e odaklanır. Ses ve giriş-çıkış ile ilgili arayüzler JOGL'ye dahil değildir.

  • Grafik Yardımcı Program Kitaplığı (GLU), GL Yardımcı Araç Seti (GLUT) ve kendi API - Yerel Pencereleme Araç Seti (NEWT) içerir.

Neden JOGL?

  • OpenGL API'lerine (sürüm 1.0, 4.3, ES 1, ES 2 ve ES 3) ve neredeyse tüm satıcı uzantılarına tam erişim sağlar. Bu nedenle, OpenGL'deki tüm özellikler JOGL'ye dahildir.

  • JOGL; AWT, Swing ve Standard Widget Toolkit (SWT) ile entegre olur. Ayrıca kendi Yerel Pencereleme Araç Kitini (NEWT) içerir. Bu nedenle, pencereleme için tam destek sağlar.

JOGL Tarihçesi

  • 1992 - Silicon Graphics Inc. ilk OpenGL spesifikasyonunu yayınladı.

  • 2003 - Java.net web sitesi yeni özelliklerle hizmete girdi ve JOGL ilk kez aynı web sitesinde yayınlandı.

  • 2010 - 2010 yılından bu yana, bilgisayar yazılımları için liberal bir lisans olan BSD lisansı altında bağımsız bir açık kaynak projesidir.

Bu bölüm, farklı Entegre Geliştirme Ortamlarını (IDE'ler) kullanarak sisteminizde JOGL kullanmak için ortamın ayarlanmasını kapsar.

JOGL'yi yükleme

JOGL Kurulumu için aşağıdaki sistem gereksinimlerine sahip olmanız gerekir -

sistem gereksinimleri

İlk gereksinim, makinenizde Java Geliştirme Kiti'nin (JDK) kurulu olmasıdır.

Gereklilik Açıklama
JDK Sürümü 1.4 veya üstü
Hafıza minimum gereklilik yok
Disk alanı minimum gereklilik yok
İşletim sistemi minimum gereklilik yok

JOGL uygulama geliştirmeye başlamak için ortamınızı ayarlamak için verilen adımları izlemeniz gerekir -

Adım 1 - Makinenizde Java Kurulumunu Doğrulama

Sisteminizin konsolunu açın ve aşağıdaki java komutunu çalıştırın -

Platform GÖREV KOMUT
pencereler Komut Konsolunu Aç C: \> java sürümü
Linux Komut terminalini aç $ java sürümü
MAC Açık Terminal Makine: ~ joseph $ java -version

İlgili işletim sistemindeki çıktıyı doğrulayın.

Platform Çıktı
pencereler

Java “1.6.0.21”

java (TM) SE Çalışma Zamanı Ortamı (derleme 1..6.0_21-b07) Java HotSpot (TM) İstemci VM (derleme 17.0-b7, karma mod, paylaşım)

Linux

Java “1.6.0.21”

java (TM) SE Çalışma Zamanı Ortamı (derleme 1..6.0_21-b07) Java HotSpot (TM) İstemci VM (derleme 17.0-b7, karma mod, paylaşım)

MAC

Java “1.6.0.21”

java (TM) SE Çalışma Zamanı Ortamı (derleme 1..6.0_21-b07) Java HotSpot (TM) İstemci VM (derleme 17.0-b7, karma mod, paylaşım)

Adım 2 - Java Geliştirme Kiti'ni (JDK) Kurma

Makinenizde Java kurulu değilse, Oracle web sitesinden Java SDK yüklemeniz gerekir: Oracle . İndirilen dosyalardan JDK'yi kurmak için talimatları bulabilirsiniz. Kurulumu kurmak ve yapılandırmak için verilen talimatları izlemeniz gerekir. Son olarak, PATH ve JAVA_HOME ortam değişkenlerini java.exe ve javac.exe dosyalarını içeren dizine, genellikle sırasıyla java_install_dir / bin ve java_install_dir'e başvuracak şekilde ayarlayın.

Ayarlamak Java-home Java'nın makinenizde kurulu olduğu aynı yoldaki temel dizin konumunu işaret etmek için ortam değişkeni.

Platform Komut
pencereler JAVA_HOME ortam değişkenini C: \ ProgramFiles \ Java \ Jdk1.6.0_21 olarak ayarlayın.
Linux JAVA_HOME = / usr / local / java-current dosyasını dışa aktar
MAC JAVA_HOME = / Kitaplık / Java / Ana Sayfa

Java derleyici konumunu Sistem Yoluna aşağıdaki gibi ekleyin -

Platform Komut
pencereler Dizeyi ekleyin; sistem değişkeninin ve yolunun sonunda% JAVA_HOME% bin
Linux Export PATH = $ PATH: $ JAVA_HOME / bin /
MAC Gerekli değil

Adım 3 - JOGL'yi İndirme

  • JOGL'nin en son sürümünü www.jogamp.org web sitesinden indirebilirsiniz.

  • Www.jogamp.org ana sayfasına gidin

  • Builds / Downloads> Current (zip) üzerine tıklayın.

Bu sizi web sitesi tarafından sağlanan tüm API'ler için .jar dosyaları listesine götürür.

  • Kitaplık .jar dosyasını indirin jogamp-all-platforms.7z, OpenGL yerel kitaplığı için java belgeleri glugen-javadoc.7zve JOGL jogl-javadocs.7z.

  • Herhangi bir zip ayıklama yazılımı kullanarak indirilen .jar dosyalarını çıkarın.

Çıkarılan klasörü açtığınızda, jar klasörünü, kaynak kodlarını ve diğer dosyaları bulacaksınız.

Kaynak kodlarını alın gluegen-java-src.zip ve jogl-java-src.zipIDE'yi desteklemek için. Bu isteğe bağlıdır.

  • Jar klasörünün içinde birden çok .jar dosyası vardır. Bu dosya koleksiyonu Glugen ve JOGL'ye aittir.

  • JOAMP, Windows, Solaris, Linux ve Android gibi çeşitli işletim sistemlerini destekleyen yerel kitaplıklar sağlar. Bu nedenle, istediğiniz platformda çalıştırılabilecek uygun jar dosyalarını almanız gerekir. Örneğin, Windows 64 bit işletim sistemi kullanıyorsanız, jar klasöründen aşağıdaki .jar dosyalarını alın -

    • gluegenrt.jar
    • jogl-all.jar
    • gluegen-rt-natives-windows-amd64.jar
    • jogl-all-natives-windowsamd64.jar

Eclipse 4.4 için JOGL kurulumu

JOGL'yi kurmak için verilen prosedürü izleyin -

Kitaplıklar Ekleme

Step 1 - Eclipse'i açın.

Step 2 - Yeni bir proje oluşturun.

Step 3- Proje klasöründe lib adında yeni bir klasör oluşturun .

Step 4- gluegen-rt-natives-windows-amd64.jar, gluegenrt.jar, jogl-all-natives-windowsamd64.jar dosyalarını kopyalayın vejogl-all.jariçine lib klasörüne.

Step 5- Şimdi bu dosyaları seçin ve farenizin düğmesine sağ tıklayın. Aşağıdakileri içeren bir kısayol menüsü görüntülenir:Build Path > Add to Build Path.

Step 6- Tüm .jar dosyalarını diğer projelerin kullanımına açmak için ana menüye gidin. Pencere> Tercihler'i seçin. Tercihler penceresi açılır.

  • Tercihler penceresinde, sol taraftaki açılır menüde hiyerarşiyi takip edin - Java → Yol Oluştur → Kullanıcı Kitaplıkları.

  • “Yeni…” düğmesine tıklayın.

  • Bir iletişim kutusu açar. Kitaplık adını jogl2.1 olarak girin.

  • Jar dosyaları ekleyin glugen-rt.jar ve jogl-all.jar "Harici JAR Ekle ..." düğmesini kullanarak.

  • Adlı yeni bir kullanıcı kitaplığı oluşturur. jogl2.1.

Aynı şekilde, added.jar dosyaları için java dokümantasyonu ve kaynak kodu ekleyebiliriz.

Yerel Kitaplıklar Ekleme

Step 1 - jogl-all.jar düğümünü genişletin, Javadoc konumunu seçin (yok).

Step 2- “Yeni…” düğmesine tıklayın. JOGL Java Belgesi için isim girin.

Step 3 - "Harici JAR Ekle…" düğmesini tıklayın.

Step 4 - Daha önce indirmiş olduğumuz JOGL Java belgelerinin konumunu seçmeniz gereken bir iletişim kutusu açar.

Kaynak kodu ekleme

Step 1 - Native kitaplık konumu düğümünü seçin: (Yok).

Step 2 - “Yeni…” düğmesine tıklayın.

Step 3 - Yerel kitaplıklar için ad girin ve "Tamam" düğmesini tıklayın.

Step 4 - "Harici JAR Ekle…" düğmesini tıklayın.

Step 5- Şimdi yerel kitaplık dosyalarının ('gluegen-rt-natives-windows-amd64.jar ve joglall-natives-windows-amd64.jar') bulunduğu yolu seçin.

Step 6 - Kaynak kodu için aynı prosedürü tekrarlayın.

Step 7 - Javadoc, kaynak kodu ve jar dosyalarının konumlarını, her iki yerel kütüphane dosyası için yukarıda verilen şekilde ayarlayabiliriz glegen-rt.jar ve glugen-natives-windows-amd64.jar.

NetBeans 4.4 için JOGL kurulumu

NetBeans 4.4 için JOGL'yi kurma adımlarını inceleyelim -

Kitaplıklar Ekleme

Step 1 - Ana menüde seçin Tools > Libraries.

Step 2 - Seni götürür Ant Library Manager.

Step 3 - Altında Classpath sekme, tıklayın New Librarysol alt köşede bulunan düğme. Küçük bir iletişim kutusu açar.

Step 4 - Kitaplık adını şu şekilde girin JoGl2.0.

Step 5 - "Tamam" düğmesine tıklayın.

Step 6 - "JAR / Klasör Ekle…" düğmesini tıklayın.

Step 7 - .jar dosyalarının bulunduğu yolu seçin jogl.all.jar ve gluegen-rt.jar bulunan.

JOGL kitaplığını her projeye dahil etmek için aşağıda verilen adımları izleyin -

Step 1 - Sağ tıklayın project name. Kısayol bir menü gösterir.

Step 2 - Seçin Properties. Adlı bir pencere açar Project properties.

Step 3 - Seçin Libraries Sol taraftaki Kategorilerden.

Step 4 - Seçin Compile tabve "Kitaplık Ekle ..." düğmesine tıklayın. Kitaplık ekle diyalog kutusu açılır.

Step 5 - Şimdi daha önce oluşturduğunuz JOGL2.0 kitaplığını ekleyin.

Her Projeye Yerel Kitaplığı Dahil Etme

Her projeye yerel kitaplığı eklemek için verilen adımları izleyin -

Step 1 - Projeye sağ tıklayın.

Step 2 - Seçin Set Configuration > Customize…

Seni götürür Project Properties pencere.

Step 3 - Sağ tarafta, VM options, "Özelleştir" düğmesine tıklayın.

Step 4 - JOGL yerel kitaplıklarını içeren yola göz atın gluegen-rtnatives-windows-amd64.jar'' ve 'jogl-all-natives-windowsamd64.jar.

Yerel Kitaplıkların Java Belgelerini Ekleme

Her proje için kaynakları ve Javadoc'u kullanılabilir hale getirmek için Ant kütüphane yöneticisini tekrar açmanız gerekir. Verilen prosedürü izleyin -

Step 1 - Aç main menu.

Step 2 - Seçin Tools > Libraries. Bu seni götürürLibrary manager.

Step 3 - Altında JavaDoc sekmesinde, “Yeni Kitaplık…” düğmesine tıklayın.

Step 4 - Giriş JOGLJavadocisim. (İstediğiniz herhangi bir adı girebilirsiniz.)

Step 5 - “Kavanoz / kitaplık ekle…” düğmesine tıklayın.

Step 6 - Açılan yolu seçin JOGL documentation kod bulunur.

Yerel Kitaplıkların Kaynak Kodunu Ekleme

Step 1 - Altında Sourcessekmesinde, “Yeni Kitaplık…” düğmesine tıklayın. GirişJOGLsources isim.

Step 2- “Kavanoz / kitaplık ekle…” düğmesine tıklayın. Sıkıştırılmamış kaynak kodun bulunduğu yolu seçin.

JDK Düzenleyiciyi Özelleştirme

Step 1 - Ayarla Classpath dosyalar için jogl.all.jar ve gluegen-rt.jar.

Step 2- gluegen-rt-natives-windows-amd64.jar ve joglall -natives-windowsamd64.jar yerel kitaplıklarının yolunu ayarlayın veya tüm jar dosyalarını indirdiğiniz klasörden kopyalayın vejse lib Klasör.

JOGL programlamasını kullanarak, düz çizgiler, üçgenler, döndürme, ışıklandırma, renkler vb. Gibi özel efektler içeren 3 boyutlu şekiller gibi çeşitli grafik şekilleri çizmek mümkündür. JOGL'de nesneler çizmek için öncelikle temel bir JOGL çerçevesi oluşturmamız gerekir. . Aşağıda, temel bir çerçeve oluşturmak için gerekli sınıflar verilmiştir.

GLEventListener Arayüzü

Programınızın JOGL grafik API'sini kullanabilmesini sağlamak için, GLEventListenerarayüz. BulabilirsinGLEventListener arayüz javax.media.opengl paketi.

Aşağıdaki tablo, çeşitli yöntemlerin ayrıntılarını ve GLEventListener arayüz -

Sr.No. Yöntemler ve Açıklamalar
1

Void display(GLAutoDrawable drawable)

İstemci tarafından OpenGL oluşturmayı başlatmak için GLAutoDrawable arabiriminin nesnesi tarafından çağrılır. yani bu yöntem, OpenGL API kullanarak grafik öğeleri çizmek için kullanılan mantığı içerir.

2

Void dispose(GLAutoDrawable drawable)

Bu yöntem, dinleyiciye, bellek arabellekleri ve GLSL programları gibi her GLContext başına tüm OpenGL kaynaklarının serbest bırakılmasını gerçekleştirmesi için sinyal verir.

3

Void init(GLAutoDrawble drawable)

OpenGL bağlamı başlatıldıktan hemen sonra GLAutoDrawable arabiriminin nesnesi tarafından çağrılır.

4

Void reshape(GLAutoDrawble drawble, int x, int y, int width, int height)

Bileşen yeniden boyutlandırıldıktan sonraki ilk yeniden boyama sırasında GLAutoDrawable arabiriminin nesnesi tarafından çağrılır. Ayrıca, bileşenin penceredeki konumu her değiştiğinde de çağrılır.

Tüm yöntemler GLEventListener nesnesi gerekli GLAutoDrawable parametre olarak arayüz.

GLAutoDrawable Arayüzü

Bu arayüz, olay tabanlı bir mekanizma sağlar (GLEventListener) OpenGL oluşturmayı gerçekleştirmek için. GLAutoDrawable otomatik olarak bir birincil oluşturma bağlamı oluşturur. GLAutoDrawable nesnenin ömrü boyunca.

Aşağıdaki tablo, çeşitli yöntemlerin ayrıntılarını ve GLAutoDrawable arayüz -

Sr.No Yöntemler ve Açıklamalar
1

GL getGL()

GLAutoDrawable arabiriminin geçerli nesnesi tarafından kullanılan GL işlem hattı nesnesini döndürür.

2

void addGLEventListener(GLEventListener Listener)

Verilen dinleyiciyi geçerli çekilebilir kuyruğun sonuna ekler.

3

void addGLEventListener(int index, GLEventListener listener)

Verilen dinleyiciyi bu çekilebilir kuyruğun verilen dizinine ekler.

4

void destroy()

Destroys GLAutoDrawable arabiriminin bu nesnesiyle ilişkili tüm kaynaklar, GLContext dahil.

Note- Bu pakette başka yöntemler de var. Bu arayüzde şablonla ilgili yalnızca birkaç önemli yöntem tartışılmıştır.

GLCanvas Sınıfı

GLCanvas ve GLJpanel JOGL GUI'nin iki ana sınıfıdır. GLAutoDrawable OpenGL komutları için çizim yüzeyleri olarak kullanılabilen arabirim.

GLCanvas, OpenGL oluşturma desteği sağlayan ağır bir AWT bileşenidir. Bu, birAWTAutoGLDrawablearayüz. Ayrıca miras alırjava.awt.Canvassınıf. Bazı durumlarda ağır bir bileşen olduğu için,GLJCanvassalınım bileşeni ile doğru şekilde entegre olmayabilir. Bu nedenle Swing ile kullanılırken dikkatli olunmalıdır. Ne zaman sorun yaşarsanGLJCanvaso zaman kullanmalısın GLJPanel sınıf.

Sınıfın hiyerarşik diyagramı GLCanvas aşağıda gösterildiği gibi olabilir -

  • GLEventistener arayüz ile birlikte çalışır GLCanvassınıf. İçindeki değişikliklere cevap verirGLCanvas sınıf ve onlar tarafından yapılan çizim talepleri.

  • Her ne zaman GLCanvas sınıf başlatılır, init() yöntemi GLEventListenerçağrılır. OpenGL durumunu başlatmak için bu yöntemi geçersiz kılabilirsiniz.

  • Her ne zaman GLCanvas başlangıçta çizilir (somutlaştırılır) veya yeniden boyutlandırılırsa reshape() yöntemi GLEventListenerIdam edildi. OpenGL görünüm alanını ve projeksiyon matrisini başlatmak için kullanılır. Ayrıca, bileşenin konumu her değiştiğinde çağrılır.

  • Display () yöntemi GLEventListener3B sahneyi oluşturma kodunu içerir. Display () yönteminin her zaman çağrılır.GLCanvas çağrılır.

Aşağıda, GLCanvas sınıfını örneklemek için gereken yapıcılar verilmiştir.

Sr.No Oluşturucu ve Açıklama
1

GLCanvas()

Varsayılan ekran aygıtında varsayılan OpenGL yetenekleri seçme mekanizmasını kullanarak varsayılan OpenGL yetenekleri setiyle yeni bir GLCanvas bileşeni oluşturur.

2

GLCanvas(GLCapabilitiesImmutable)

Varsayılan ekran cihazındaki varsayılan OpenGL yetenekleri seçim mekanizmasını kullanarak istenen OpenGL yetenekleri setiyle yeni bir GLCanvas bileşeni oluşturur.

Aşağıda, GLCanvas sınıfının olay işlemesi için kullanılan yöntemler verilmiştir.

Sr. No. Yöntemler ve Açıklama
1

void addGLEventListener(GLEventListener listener)

Verilen dinleyiciyi bu çekilebilir kuyruğun sonuna ekler.

2

void addGLEventListener(int indexGLEventListener listener)

Verilen dinleyiciyi bu çekilebilir kuyruğun verilen dizinine ekler.

Örneklemek için GLCanvas sınıf, nesnesine ihtiyacın var GLCapabilitiesImmutable değişmez bir OpenGL yetenekleri kümesini belirten arabirim.

Bir nesneyi elde etmenin yollarından biri CapabilitiesImmutable arayüz somutlaştırmaktır GLCapabilitiesarabirimi uygulayan sınıf. Bir örnekGLCapabilities sınıf amaca hizmet etmek için kullanılabilir.

GLCapabilities Sınıfı

Bu sınıf, bir dizi OpenGL özelliğini belirtir. Parametre olarak GLCapabilities nesnesini alır. GLCapabilities sınıfı, OpenGL profili gibi bir işleme bağlamının desteklemesi gereken istenen yetenekleri açıklar.

Aşağıda, GLCapabilities sınıfını somutlaştırmak için bir yapıcı verilmiştir.

Sr. No. Yöntemler ve Açıklama
1

GLCapabilities(GLProfile glprofile)

Bir GLCapabilities nesnesi oluşturur.

Örneklemek için GLCanvas sınıfında, değişmez bir OpenGL yetenekleri kümesini belirten bir GLCapabilitiesImmutable arabirimi nesnesine ihtiyacınız vardır.

Bir nesneyi elde etmenin yollarından biri CapabilitiesImmutable arayüz somutlaştırmaktır GLCapabilitiesarabirimi uygulayan sınıf. ÖrneğiGLCapabilities sınıf amaca hizmet etmek için kullanılabilir.

GLCapabilities sınıf sırayla bir GLProfile nesne.

GLProfile Sınıfı

OpenGL API'nin birkaç sürümü yayınlandığından beri; Java Sanal Makinenize (JVM) programınızda kullanılan OpenGL API'nin tam sürümünü belirtmeniz gerekir. Bu,GLProfile sınıf.

get() bu sınıfın yöntemi önceden tanımlanmış farklı Stringparametreler olarak nesneler. Her String nesnesi bir arayüzün adıdır ve her arayüz belirli OpenGL sürümlerini destekler. Bu sınıfı statik ve tekli olarak başlatırsanız, size tekliGLProfile her kullanılabilir JOGL profili için nesneler.

Aşağıda GLProfile sınıfının get yönteminin prototipi verilmiştir.

Sr.No. Yöntem ve Açıklama
1

Static GLProfile get(String profile)

Varsayılan cihazı kullanır.

Bu statik bir yöntem olduğundan, onu sınıf adını kullanarak çağırmanız gerekir ve parametre olarak önceden tanımlanmış bir statik dize değişkeni gerektirir. Bu sınıfta, her biri GL arayüzünün bireysel bir uygulamasını temsil eden 12 tür değişken vardır.

GLProfile.get(GLProfile.GL2);

Get () yönteminin parametreleri

Sr.No Önceden tanımlanmış Dize değeri (Arayüz adı) ve Açıklama
1

GL2

Bu arayüz, tüm OpenGL [1.0… 3.0] yöntemlerinin yanı sıra bu belirtim sırasında tanımlanan uzantılarının çoğunu içerir.

2

GLES1

Bu arayüz, tüm OpenGL ES [1.0 ... 1.1] yöntemlerini ve bu belirtim sırasında tanımlanan uzantılarının çoğunu içerir.

3

GLES2

Bu arayüz, tüm OpenGL ES 2.0 yöntemlerini ve bu belirtim sırasında tanımlanan uzantılarının çoğunu içerir.

4

GLES3

Bu arayüz, tüm OpenGL ES 3.0 yöntemlerini ve bu belirtim sırasında tanımlanan uzantılarının çoğunu içerir.

5

GL2ES1

Bu Arayüz, GL2 ve GLES1'in ortak alt kümesini içerir.

6

GL2ES2

Bu Arayüz, GL3, GL2 ve GLES2'nin ortak alt kümesini içerir.

7

GL2GL3

Bu Arayüz, çekirdek GL3 (OpenGL 3.1+) ve GL2'nin ortak alt kümesini içerir.

8

GL3

Bu arayüz, tüm OpenGL [3.1 ... 3.3] çekirdek yöntemlerini ve bu belirtim sırasında tanımlanan uzantılarının çoğunu içerir.

9

GL3bc

Bu arayüz, tüm OpenGL [3.1 ... 3.3] uyumluluk yöntemlerini ve bu belirtim sırasında tanımlanan uzantılarının çoğunu içerir.

10

GL3ES3

Bu arayüz, çekirdek GL3 (OpenGL 3.1+) ve GLES3 (OpenGL ES 3.0) ortak alt kümesini içerir.

11

GL4

Bu arabirim, tüm OpenGL [4.0 ... 4.3] temel yöntemlerini ve bu belirtim sırasında tanımlanan uzantılarının çoğunu içerir.

12

GL4bc

Bu arabirim, tüm OpenGL [4.0 ... 4.3] ihtiva uyumluluk profili , hem de bu tarifnamenin sırasında tanımlanan uzantılarının çoğu.

13

GL4ES3

Core GL4 (OpenGL 4.0+) ve GLES3 (OpenGL ES 3.0) ortak alt kümesini içeren arayüz.

GLJPanel Sınıfı

OpenGL işleme desteği sağlayan hafif bir Swing bileşenidir. Swing ile uyumluluk için sağlanmıştır.

GLJPanel Sınıf Hiyerarşisi

Aşağıda verilen diyagram, GLJPanel sınıfının sınıf hiyerarşisini temsil etmektedir.

Aşağıda, çeşitli yapıcılar GLJPanel sınıfı verilmiştir.

Sr. No. Oluşturucular ve Açıklama
1

GJPanel()

Varsayılan OpenGL yeteneklerine sahip yeni bir GLJPanel bileşeni oluşturur.

2

(GLCapabilitiesImmutable)

İstenen OpenGL yetenekleri setiyle yeni bir GLJPanel bileşeni oluşturur.

3

GLJPanel(GLCapabilitiesImmutable userCapsRequest, GLCapabilitiesChooser chooser)

Yeni bir GLJPanel bileşeni oluşturur.

Aşağıda GLJPanel sınıfının yöntemleri verilmiştir.

Sr.No. Yöntemler ve Açıklama
1

void addGLEventListener(GLEventListener listener)

Bu yöntem, verilen dinleyiciyi bu çekilebilir kuyruğun sonuna ekler.

2

void addGLEventListener(int indexGLEventListener listener)

Bu yöntem, verilen dinleyiciyi bu çekilebilir kuyruğun verilen dizinine ekler.

Bu bölüm, Canvas ile AWT çerçevesini kullanarak bir JOGL temel çerçevesinin nasıl çizileceğini açıklar. Burada bir AWT Çerçevesi oluşturacağız ve tuval nesnesini AWT çerçevesine ekleyeceğiz.add() çerçeve sınıfının yöntemi.

Aşağıda, JOGL'nin Canvas sınıfı ve AWT'nin Frame sınıfının birleşimi ile bir JOGL temel çerçevesi oluşturan bir program yazma adımları verilmiştir.

Adım 1: Sınıfı Oluşturma

Başlangıçta uygulayan bir sınıf oluşturun GlEventListenerarabirimine gidin ve javax.media.opengl paketini içe aktarın. Dört yöntemi de uygulayındisplay(), dispose(), reshape(), init().Bu temel çerçeve olduğundan, tuval sınıfı oluşturma, çerçeveye ekleme gibi ilkel görevler tartışılmıştır. HepsiGLEVentListener arayüz yöntemleri uygulanmadan bırakıldı.

Adım 2: Tuvali Hazırlama

(a) İnşa etmek GLCanvas sınıf nesnesi

final GLCanvas glcanvas = new GLCanvas( xxxxxxx );

//here capabilities obj should be passed as parameter

(b) Örnekleme GLCapabilities sınıf

GLCapabilities capabilities = new GLCapabilities( xxxxx );

//here profile obj should be passed as parameter

(c) Üretiliyor GLProfile nesne

Statik yöntem olduğu için sınıf adı kullanılarak çağrılır. Bu eğitim JOGL2 ile ilgili olduğundan, GL2 arayüz nesnesi oluşturalım.

final GLProfile profile = GLProfile.get( GLProfile.GL2 );

// both, variable and method are static hence both are called using class name.

Canvas için kod parçacığını görelim.

//getting the capabilities object of GL2 profile

final GLProfile profile = GLProfile.get(GLProfile.GL2);
GLCapabilities capabilities = new GLCapabilities(profile);

// The canvas
final GLCanvas glcanvas = new GLCanvas(capabilities);

(d) Şimdi ekle GLEventListener yöntemi kullanarak tuvale addGLEventListener(). Bu yöntemin nesnesine ihtiyacı varGLEventListenerparametre olarak arayüz. Bu nedenle, uygulayan bir sınıfın nesnesini iletinGLEventListener.

BasicFrame basicframe = newBasic Frame( );// class which implements
GLEventListener interface
glcanvas.addGLEventListener( basicframe );

(e) Javax.media.opengl.awt.AWTGLAutoDrawable'dan GLCanvas tarafından devralınan setSize () yöntemini kullanarak çerçeve boyutunu ayarlayın.

glcanvas.setSize( 400, 400 );

Şimdi hazırsın GLCanvas.

Adım3: Çerçevenin Oluşturulması

Çerçeveyi, Frame class JSE AWT çerçeve bileşeninin nesnesi.

Kanvas ekleyin ve çerçeveyi görünür hale getirin.

//creating frame
final Frame frame = new frame( " Basic Frame" );

//adding canvas to frame
frame.add( glcanvas );
frame.setVisible( true );

4. Adım: Çerçeveyi Tam Ekranda Görüntüleme

Çerçeveyi tam ekranda görüntülemek için varsayılan ekran boyutunu kullanın. java.awt.Toolkitsınıf. Şimdi, bu varsayılan ekran boyutu boyutlarını kullanarak çerçeve boyutunu ayarlayın.setSize() yöntem.

Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
frame.setSize(screenSize.width, screenSize.height);

AWT'yi kullanarak temel çerçeveyi oluşturmak için programı inceleyelim -

import javax.media.opengl.GLAutoDrawable;
import javax.media.opengl.GLCapabilities;
import javax.media.opengl.GLEventListener;
import javax.media.opengl.GLProfile;
import javax.media.opengl.awt.GLCanvas;

import javax.swing.JFrame;

public class BasicFrame implements GLEventListener {

   @Override
   public void display(GLAutoDrawable arg0) {
      // method body
   }
	
   @Override
   public void dispose(GLAutoDrawable arg0) {
      //method body
   }
	
   @Override
   public void init(GLAutoDrawable arg0) {
      // method body
   }
	
   @Override
   public void reshape(GLAutoDrawable arg0, int arg1, int arg2, int arg3, int arg4) {
      // method body
   }
	
   public static void main(String[] args) {
   
      //getting the capabilities object of GL2 profile
      final GLProfile profile = GLProfile.get(GLProfile.GL2);
      GLCapabilities capabilities = new GLCapabilities(profile);
        
      // The canvas
      final GLCanvas glcanvas = new GLCanvas(capabilities);
      BasicFrame b = new BasicFrame();
      glcanvas.addGLEventListener(b);        
      glcanvas.setSize(400, 400);
        
      //creating frame
      final Frame frame = new Frame (" Basic Frame");
        
      //adding canvas to frame
      frame.add(glcanvas);
      frame.setSize( 640, 480 );
      frame.setVisible(true);
   }
	
}

Yukarıdaki programı derler ve çalıştırırsanız, aşağıdaki çıktı üretilir. Kullandığımızda oluşan temel bir çerçeveyi gösterir.GLCanvas AWT ile sınıf -

Bu bölüm, bir JOGL temel çerçevesinin nasıl çizileceğini açıklar. Canvas, ve JFramejavax.swing paketinin sınıfı. Burada bir JFrame başlatacağız ve canvas nesnesini JFrame örneğine ekleyeceğiz.add() yöntem.

Canvas'ı AWT ile kullanmak size ağır özelliklere sahip bir grafik çerçeve sağlar. Hafif bir grafik çerçeveye sahip olmak için kullanmanız gerekirGLCanvasSwing ile. KullanırkenGLCanvas Swing ile yerleştirebilirsiniz GLCanvas içinde JFrame doğrudan pencere veya bunu şuraya ekleyebilirsiniz: JPanel.

Aşağıda, JOGL'lerin kombinasyonu ile bir JOGL temel çerçevesi oluşturan program verilmiştir. GLCanvas sınıf ve JFramejavax.swing paketinin sınıfı .

import javax.media.opengl.GLAutoDrawable;
import javax.media.opengl.GLCapabilities;
import javax.media.opengl.GLEventListener;
import javax.media.opengl.GLProfile;
import javax.media.opengl.awt.GLCanvas;

import javax.swing.JFrame;

public class BasicFrame implements GLEventListener {

   @Override
   public void display(GLAutoDrawable arg0) {
      // method body
   }
	
   @Override
   public void dispose(GLAutoDrawable arg0) {
      //method body
   }
	
   @Override
   public void init(GLAutoDrawable arg0) {
      // method body
   } 
	
   @Override
   public void reshape(GLAutoDrawable arg0, int arg1, int arg2, int arg3, int arg4) {
      // method body
   }
	
   public static void main(String[] args) {
   
      //getting the capabilities object of GL2 profile
      final GLProfile profile = GLProfile.get(GLProfile.GL2);
      GLCapabilities capabilities = new GLCapabilities(profile);
               
      // The canvas
      final GLCanvas glcanvas = new GLCanvas(capabilities);
      BasicFrame b = new BasicFrame();
      glcanvas.addGLEventListener(b);
      glcanvas.setSize(400, 400);
		
      //creating frame
      final JFrame frame = new JFrame (" Basic Frame");
		
      //adding canvas to it
      frame.getContentPane().add(glcanvas);
      frame.setSize(frame.getContentPane().getPreferredSize());
      frame.setVisible(true);
      
   }//end of main
	
}//end of classimport

Yukarıdaki programı derler ve çalıştırırsanız, aşağıdaki çıktı üretilir. Kullandığımızda oluşan temel bir çerçeveyi gösterir.GLCanvas Salıncak penceresi ile.

Bu bölüm, GLJpanel sınıfını kullanarak bir JOGL temel çerçevesinin nasıl çizileceğini açıklar. OpenGL işleme desteği sağlayan hafif bir Swing bileşenidir. Swing ile uyumluluk için sağlanmıştır. Burada bir JFrame'i örnekleyeceğiz ve GLJpanel nesnesini JFrame örneğine ekleyeceğiz.add() yöntem.

Aşağıdaki program kullanarak temel bir çerçeve oluşturur GLJPanel Salıncak pencereli -

import javax.media.opengl.GLAutoDrawable;
import javax.media.opengl.GLCapabilities;
import javax.media.opengl.GLEventListener;
import javax.media.opengl.GLProfile;
import javax.media.opengl.awt.GLCanvas;

import javax.swing.JFrame;

public class BasicFrame implements GLEventListener {

   @Override
   public void display(GLAutoDrawable arg0) {
      // method body
   }
   
   @Override
   public void dispose(GLAutoDrawable arg0) {
      //method body
   }
   
   @Override
   public void init(GLAutoDrawable arg0) {
      // method body
   }
   
   @Override
   public void reshape(GLAutoDrawable arg0, int arg1, int arg2, int arg3, int arg4) {
      // method body
   }
   
   public static void main(String[] args) {
   
      //getting the capabilities object of GL2 profile
      final GLProfile profile = GLProfile.get(GLProfile.GL2);
      GLCapabilities capabilities = new GLCapabilities(profile);
      
      // The GLJpanel class
      GLJPanel gljpanel = new GLJPanel( glcapabilities ); 
      BasicFrame b = new BasicFrame();
      gljpanel.addGLEventListener(b);
      gljpanel.setSize(400, 400);
      
      //creating frame
      final JFrame frame = new JFrame (" Basic Frame");
      
      //adding canvas to it
      frame.getContentPane().add( gljpanel);
      frame.setSize(frame.getContentPane().getPreferredSize());
      frame.setVisible(true);
      
   }//end of main
	
}//end of classimport

Yukarıdaki programı derler ve çalıştırırsanız, aşağıdaki çıktı üretilir. Kullandığımızda oluşan temel bir çerçeveyi gösterir.GLJPanel salıncak pencereli -

OpenGL API nokta, tepe noktası, çizgi vb. Gibi temel grafik öğeleri çizmek için ilkel yöntemler sağlamıştır. Bu yöntemleri kullanarak üçgen, çokgen ve daire gibi şekiller geliştirebilirsiniz. Hem 2D hem de 3D boyutlarda. Bu bölüm, bir Java programında JOGL kullanarak temel bir çizgi çizmeyi öğretir.

Çizim Nesneleri

Bir donanım ve işletim sistemi platformlarına özgü olan ve kitaplıkların C ve C ++ (yerel uygulamalar) gibi diğer dillerde yazıldığı programlara erişmek için Java, adı verilen bir programlama çerçevesi kullanır. Java Native Interface (JNI). JOGL, aşağıdaki diyagramda gösterildiği gibi OpenGL işlevlerine erişmek için bu arayüzü dahili olarak kullanır.

Dört yöntemin tümü GLEventListenerarabirim OpenGL işlevlerini dahili olarak çağırmak için koda (java JOGL yöntemleri) sahiptir. Bu JOGL yöntemlerinin adlandırılması da OpenGL'nin adlandırma kurallarına benzer. OpenGL'deki işlev adıglBegin()olarak kullanılır gl.glBegin().

Ne zaman gl.glBegin() java JOGL yöntemi çağrılır, dahili olarak glBegin()OpenGL yöntemi. Bu, JOGL'nin yüklenmesi sırasında kullanıcı sistemine yerel kitaplık dosyalarının yüklenmesinin nedenidir.

Display () Yöntemi

Bu, grafik geliştirme kodunu tutan önemli bir yöntemdir. GerektirirGLAutoDrawable parametresi olarak arabirim nesnesi.

display()yöntem, başlangıçta GL arabiriminin nesnesini kullanarak OpenGL bağlamını alır (GL, tüm OpenGL bağlam nesnelerini oluşturmak için yöntemler içeren GLBase arabirimini miras alır). Bu eğitim JOGL2 hakkında olduğundan, bir GL2 nesnesi oluşturalım.

Aşağıdaki kod parçacığı bir GL2 Nesnesinin nasıl oluşturulacağını gösterir -

//Generating GL object
GL gl = drawable.getGL();
GL gl = drawable.getGL();

//Using this Getting the Gl2 Object
//this can be written in a single line like
final GL2 gl = drawable.getGL().getGL2();

GL2 arabiriminin nesnesini kullanarak, bu arabirimin üyelerine erişebilir ve bu da OpenGL [1.0 ... 3.0] işlevlerine erişim sağlar.

Çizgi Çizme

GL2 arayüzü geniş bir yöntem listesi içerir, ancak burada üç ana önemli yöntem tartışılmaktadır. glBegin(), glVertex(), ve glEnd().

Sr.No. Yöntemler ve Açıklama
1

glBegin()

Bu yöntem çizgi çizme sürecini başlatır. Parametre olarak, GL arayüzünden miras alınan, önceden tanımlanmış “GL_LINES” tam sayı dizisi alır.

2

glVertex3f()/glVertex2f()

Bu yöntem tepe noktasını oluşturur ve koordinatları sırasıyla 3 boyutlu kayan nokta koordinatlarını ve 2 boyutlu kayan nokta koordinatlarını gösteren 3f ve 2f parametreleri olarak geçirmemiz gerekir.

3

glEnd()

çizgiyi bitirir

Aşağıda, JOGL kullanarak temel bir çizgi çizen program verilmiştir -

import javax.media.opengl.GL2;
import javax.media.opengl.GLAutoDrawable;
import javax.media.opengl.GLCapabilities;
import javax.media.opengl.GLEventListener;
import javax.media.opengl.GLProfile;
import javax.media.opengl.awt.GLCanvas;

import javax.swing.JFrame;

public class Line implements GLEventListener{

   @Override
   public void display(GLAutoDrawable drawable) {
      final GL2 gl = drawable.getGL().getGL2();
            
      gl.glBegin (GL2.GL_LINES);//static field
      gl.glVertex3f(0.50f,-0.50f,0);
      gl.glVertex3f(-0.50f,0.50f,0);
      gl.glEnd();

   }
            
   @Override
   public void dispose(GLAutoDrawable arg0) {
      //method body
   }
            
   @Override
   public void init(GLAutoDrawable arg0) {
      // method body
   }
	
   public static void main(String[] args) {

      //getting the capabilities object of GL2 profile        
      final GLProfile profile = GLProfile.get(GLProfile.GL2);
      GLCapabilities capabilities = new GLCapabilities(profile);
   
      // The canvas
      final GLCanvas glcanvas = new GLCanvas(capabilities);
      Line l = new Line();
      glcanvas.addGLEventListener(l);
      glcanvas.setSize(400, 400);
   
      //creating frame
      final JFrame frame = new JFrame ("straight Line");
   
      //adding canvas to frame
      frame.getContentPane().add(glcanvas);
                 
      frame.setSize(frame.getContentPane().getPreferredSize());
      frame.setVisible(true);
      
   }//end of main
	
}//end of classimport javax.media.opengl.GL2;

Önceki bölümde JOGL kullanarak temel bir çizginin nasıl çizildiğini öğrendik. Önceden tanımlanmış bir alanı geçerek çizgiler çiziyoruz,Gl_linesiçin glBegin () metodu.

Bu bölüm, glBegin () yöntemi ve GL_Lines kullanarak üçgen, eşkenar dörtgen ve bir ev gibi şekiller çizmek için örnekler sunar.

GL_LINES kullanarak bir üçgen çizmek için bir programdan geçelim -

import javax.media.opengl.GL2;
import javax.media.opengl.GLAutoDrawable;
import javax.media.opengl.GLCapabilities;
import javax.media.opengl.GLEventListener;
import javax.media.opengl.GLProfile;
import javax.media.opengl.awt.GLCanvas;

import javax.swing.JFrame;

public class Triangle implements GLEventListener{

   @Override
   public void display(GLAutoDrawable drawable) {
      final GL2 gl = drawable.getGL().getGL2();
      gl.glBegin (GL2.GL_LINES);
   
      //drawing the base
      gl.glBegin (GL2.GL_LINES);
      gl.glVertex3f(-0.50f, -0.50f, 0);
      gl.glVertex3f(0.50f, -0.50f, 0);
      gl.glEnd();
   
      //drawing the right edge
      gl.glBegin (GL2.GL_LINES);
      gl.glVertex3f(0f, 0.50f, 0);
      gl.glVertex3f(-0.50f, -0.50f, 0);
      gl.glEnd();
   
      //drawing the lft edge
      gl.glBegin (GL2.GL_LINES);
      gl.glVertex3f(0f, 0.50f, 0);
      gl.glVertex3f(0.50f, -0.50f, 0);
      gl.glEnd();
      gl.glFlush();
   }
   
   @Override
   public void dispose(GLAutoDrawable arg0) {
      //method body
   }
   
   @Override
   public void init(GLAutoDrawable arg0) {
      // method body
   }
   
   @Override
   public void reshape(GLAutoDrawable arg0, int arg1, int arg2, int arg3, int arg4) {
      // method body
   }
   
   public static void main(String[] args) {
      
      //getting the capabilities object of GL2 profile
      final GLProfile profile = GLProfile.get(GLProfile.GL2);
      GLCapabilities capabilities = new GLCapabilities(profile);
   
      // The canvas
      final GLCanvas glcanvas = new GLCanvas(capabilities);
      Triangle l = new Triangle();
      glcanvas.addGLEventListener(l);
      glcanvas.setSize(400, 400);
   
      //creating frame
      final JFrame frame = new JFrame ("Triangle");
   
      //adding canvas to frame
      frame.getContentPane().add(glcanvas);
          
      frame.setSize(frame.getContentPane().getPreferredSize());
      frame.setVisible(true);
      
   }//end of main
	
}//end of classimport javax.media.opengl.GL2;

Yukarıdaki programı derler ve çalıştırırsanız, aşağıdaki çıktı üretilir. GL_LINES kullanılarak çizilmiş bir üçgeni gösterir.glBegin() yöntem.

GL_LINES kullanarak bir eşkenar dörtgen çizmek için bir programdan geçelim -

import javax.media.opengl.GL2;
import javax.media.opengl.GLAutoDrawable;
import javax.media.opengl.GLCapabilities;
import javax.media.opengl.GLEventListener;
import javax.media.opengl.GLProfile;
import javax.media.opengl.awt.GLCanvas;

import javax.swing.JFrame;

public class Rhombus implements GLEventListener{

   @Override
   public void display( GLAutoDrawable drawable ) {
      final GL2 gl = drawable.getGL().getGL2();
      
      //edge1  
      gl.glBegin( GL2.GL_LINES );
      gl.glVertex3f( 0.0f,0.75f,0 );
      gl.glVertex3f( -0.75f,0f,0 );
      gl.glEnd();
      
      //edge2
      gl.glBegin( GL2.GL_LINES );
      gl.glVertex3f( -0.75f,0f,0 );
      gl.glVertex3f( 0f,-0.75f, 0 );
      gl.glEnd();
      
      //edge3
      gl.glBegin( GL2.GL_LINES );
      gl.glVertex3f( 0f,-0.75f, 0 );
      gl.glVertex3f( 0.75f,0f, 0 );
      gl.glEnd();
      
      //edge4
      gl.glBegin( GL2.GL_LINES );
      gl.glVertex3f( 0.75f,0f, 0 );
      gl.glVertex3f( 0.0f,0.75f,0 );
      gl.glEnd();
      gl.glFlush();
   }
	
   @Override
   public void dispose( GLAutoDrawable arg0 ) {
      //method body
   }
	
   @Override
   public void init(GLAutoDrawable arg0 ) {
      // method body
   }
	
   @Override
   public void reshape( GLAutoDrawable arg0, int arg1, int arg2, int arg3, int arg4 ) {
      // method body
   }
	
   public static void main( String[] args ) {
	
      //getting the capabilities object of GL2 profile
      final GLProfile profile = GLProfile.get( GLProfile.GL2 );
      GLCapabilities capabilities = new GLCapabilities(profile);
      
      // The canvas
      final GLCanvas glcanvas = new GLCanvas( capabilities );
      Rhombus rhombus = new Rhombus();
      glcanvas.addGLEventListener( rhombus );
      glcanvas.setSize( 400, 400 );
      
      //creating frame
      final JFrame frame = new JFrame ( "Rhombus" );
      
      //adding canvas to frame
      frame.getContentPane().add( glcanvas );
      frame.setSize(frame.getContentPane().getPreferredSize() );
      frame.setVisible( true );
   }
	
}

Yukarıdaki programı derler ve çalıştırırsanız, aşağıdaki çıktıyı alırsınız. GL_LINES of kullanılarak oluşturulan bir eşkenar dörtgen gösterirglBegin() yöntem.

GL_LINES kullanarak bir ev çizmek için bir programdan geçelim -

import javax.media.opengl.GL2;
import javax.media.opengl.GLAutoDrawable;
import javax.media.opengl.GLCapabilities;
import javax.media.opengl.GLEventListener;
import javax.media.opengl.GLProfile;
import javax.media.opengl.awt.GLCanvas;

import javax.swing.JFrame;

public class House implements GLEventListener{

   @Override
   public void display( GLAutoDrawable drawable ) {
      final GL2 gl = drawable.getGL().getGL2();
      
      //drawing top
      gl.glBegin ( GL2.GL_LINES );
      gl.glVertex3f( -0.3f, 0.3f, 0 );
      gl.glVertex3f( 0.3f,0.3f, 0 );
      gl.glEnd();
      
      //drawing bottom
      gl.glBegin( GL2.GL_LINES );
      gl.glVertex3f( -0.3f,-0.3f, 0 );
      gl.glVertex3f( 0.3f,-0.3f, 0 );
      gl.glEnd();
      
      //drawing the right edge
      gl.glBegin( GL2.GL_LINES );
      gl.glVertex3f( -0.3f,0.3f, 0 );
      gl.glVertex3f( -0.3f,-0.3f, 0 );
      gl.glEnd();
      
      //drawing the left edge
      gl.glBegin( GL2.GL_LINES );
      gl.glVertex3f( 0.3f,0.3f,0 );
      gl.glVertex3f( 0.3f,-0.3f,0 );
      gl.glEnd();
      
      //building roof
      //building lft dia
      gl.glBegin( GL2.GL_LINES );
      gl.glVertex3f( 0f,0.6f, 0 );
      gl.glVertex3f( -0.3f,0.3f, 0 );
      gl.glEnd();
      
      //building rt dia
      gl.glBegin( GL2.GL_LINES );
      gl.glVertex3f( 0f,0.6f, 0 );
      gl.glVertex3f( 0.3f,0.3f, 0 );
      gl.glEnd();
      
      //building door
      //drawing top
      gl.glBegin ( GL2.GL_LINES );
      gl.glVertex3f( -0.05f, 0.05f, 0 );
      gl.glVertex3f( 0.05f, 0.05f, 0 );
      gl.glEnd();
      
      //drawing the left edge
      gl.glBegin ( GL2.GL_LINES );
      gl.glVertex3f( -0.05f, 0.05f, 0 );
      gl.glVertex3f( -0.05f, -0.3f, 0 );
      gl.glEnd();
      
      //drawing the right edge
      gl.glBegin ( GL2.GL_LINES );
      gl.glVertex3f( 0.05f, 0.05f, 0 );
      gl.glVertex3f( 0.05f, -0.3f, 0 );
      gl.glEnd();
   }
      
   @Override
   public void dispose( GLAutoDrawable arg0 ) {
      //method body
   }
   
   @Override
   public void init( GLAutoDrawable arg0 ) {
      // method body
   }       
   
   @Override
   public void reshape( GLAutoDrawable arg0, int arg1, int arg2, int arg3, int arg4 ) {
      // method body
   }
	
   public static void main( String[] args ) {
   
      //getting the capabilities object of GL2 profile
      final GLProfile profile = GLProfile.get( GLProfile.GL2 );
      GLCapabilities capabilities = new GLCapabilities(profile);
   
      // The canvas
      final GLCanvas glcanvas = new GLCanvas( capabilities );
      House house = new House();
      glcanvas.addGLEventListener( house );
      glcanvas.setSize(400, 400);
   
      //creating frame
      final JFrame frame = new JFrame( "House" );
   
      //adding canvas to frame
      frame.getContentPane().add( glcanvas );
      frame.setSize(frame.getContentPane().getPreferredSize() );
      frame.setVisible( true );
      
   }//end of main
	
}//end of class

Yukarıdaki programı derler ve çalıştırırsanız, aşağıdaki çıktıyı alırsınız. GL_LINES () yöntemi kullanılarak oluşturulan bir ev diyagramını gösterir.

Önceki bölümlerde JOGL kullanarak çizgi, üçgen, eşkenar dörtgen gibi şekillerin nasıl çizildiğini öğrendik. Önceden tanımlanmış bir alanı geçerek çizgiler çiziyoruz,Gl_linesiçin glBegin () metodu.

Ondan başka GL_LINES, glBegin()yöntem sekiz parametre daha kabul eder. Bunları farklı şekiller çizmek için kullanabilirsiniz. Bunlar GL_LINES ile aynı şekilde kullanılır.

Aşağıdaki tablo, glBegin() yöntem parametreleri açıklamaları ile birlikte -

Sr.No Parametreler ve Açıklama
1

GL_LINES

Her köşe çiftini bağımsız bir çizgi parçası olarak oluşturur.

2

GL_LINE_STRIP

İlk tepe noktasından sonuncusuna bağlı bir çizgi parçası grubu çizer.

3

GL_LINE_LOOP

İlk tepe noktasından sonuncusuna, yine ilkine, bağlantılı bir çizgi parçası grubu çizer.

4

GL_TRIANGLES

Her bir köşe üçlüsünü bağımsız bir üçgen olarak ele alır.

5

GL_TRIANGLE_STRIP

Bağlantılı bir üçgen grubu çizer. İlk iki köşeden sonra sunulan her köşe için bir üçgen tanımlanır.

6

GL_TRIANGLE_FAN

Bağlantılı bir üçgen grubu çizer. İlk iki köşeden sonra sunulan her köşe için bir üçgen tanımlanır.

7

GL_QUADS

Her dört köşe grubunu bağımsız bir dörtgen olarak ele alır.

8

GL_QUAD_STRIP

Bağlantılı bir dörtgenler grubu çizer. İlk çiftten sonra sunulan her köşe çifti için bir dörtgen tanımlanmıştır.

9

GL_POLYGON

Tek, dışbükey bir çokgen çizer. Tepe noktaları 1,…, n bu çokgeni tanımlar.

Kullanarak bazı örnekler görelim glBegin() parametreleri.

Çizgi Şeridi çizme programı

import javax.media.opengl.GL2;
import javax.media.opengl.GLAutoDrawable;
import javax.media.opengl.GLCapabilities;
import javax.media.opengl.GLEventListener;
import javax.media.opengl.GLProfile;
import javax.media.opengl.awt.GLCanvas;

import javax.swing.JFrame;

public class LineStrip implements GLEventListener{

   @Override
   public void display(GLAutoDrawable drawable) {
   
      final GL2 gl = drawable.getGL().getGL2();
		
      gl.glBegin (GL2.GL_LINE_STRIP);
      gl.glVertex3f(-0.50f,-0.75f, 0);
      gl.glVertex3f(0.7f,0.5f, 0);
      gl.glVertex3f(0.70f,-0.70f, 0);
      gl.glVertex3f(0f,0.5f, 0);
      gl.glEnd();
   }
   
   @Override
   public void dispose(GLAutoDrawable arg0) {
      //method body
   }
   
   @Override
   public void init(GLAutoDrawable arg0) {
      // method body
   }
   
   @Override
   public void reshape(GLAutoDrawable arg0, int arg1, int arg2, int arg3, int arg4) {
      // method body
   }
   
   public static void main(String[] args) {
   
      //getting the capabilities object of GL2 profile
      final GLProfile profile = GLProfile.get(GLProfile.GL2);
      GLCapabilities capabilities = new GLCapabilities(profile);
      
      // The canvas
      final GLCanvas glcanvas = new GLCanvas(capabilities);
      LineStrip r = new LineStrip();
      glcanvas.addGLEventListener(r);
      glcanvas.setSize(400, 400);
      
      //creating frame
      final JFrame frame = new JFrame ("LineStrip");
      
      //adding canvas to frame
      frame.getContentPane().add(glcanvas);
            
      frame.setSize(frame.getContentPane().getPreferredSize());
      frame.setVisible(true);
      
   }//end of main
	
}//end of classimport javax.media.opengl.GL2;

Yukarıdaki kodu derler ve yürütürseniz, aşağıdaki çıktı üretilir -

Bir Çizgi Döngüsü çizmek için display () yöntemi için kod parçacığı

public void display(GLAutoDrawable drawable) {

   final GL2 gl = drawable.getGL().getGL2();
   
   gl.glBegin (GL2.GL_LINE_LOOP);
   
   gl.glVertex3f( -0.50f, -0.75f, 0);
   gl.glVertex3f(0.7f, .5f, 0);
   gl.glVertex3f(0.70f, -0.70f, 0);
   gl.glVertex3f(0f, 0.5f, 0);
   
   gl.glEnd();
}

Değiştirirseniz display() Yukarıdaki koda sahip temel şablon programlarından herhangi birinin yöntemini, derleyin ve çalıştırın, aşağıdaki çıktı üretilir -

GL_TRIANGLES kullanarak bir üçgen çizmek için display () yöntemi için kod parçacığı

public void display(GLAutoDrawable drawable) {

   final GL2 gl = drawable.getGL().getGL2();
   
   gl.glBegin(GL2.GL_TRIANGLES);        // Drawing Using Triangles
   
   gl.glVertex3f(0.5f,0.7f,0.0f);       // Top
   gl.glVertex3f(-0.2f,-0.50f,0.0f);    // Bottom Left
   gl.glVertex3f(0.5f,-0.5f,0.0f);      // Bottom Right
   
   gl.glEnd();
}

Değiştirirseniz display() Yukarıdaki koda sahip temel şablon programlarından herhangi birinin yöntemini, derleyin ve çalıştırın, aşağıdaki çıktı üretilir -

Üçgen Şerit çizmek için display () yöntemi için kod parçacığı

public void display(GLAutoDrawable drawable) {

   final GL2 gl = drawable.getGL().getGL2();
   
   gl.glBegin (GL2.GL_TRIANGLE_STRIP);
   
   gl.glVertex3f(0f,0.5f,0);
   gl.glVertex3f(-0.50f,-0.75f,0);
   gl.glVertex3f(0.28f,0.06f,0);
   gl.glVertex3f(0.7f,0.5f,0);
   gl.glVertex3f(0.7f,-0.7f,0);
   
   gl.glEnd();
}

Değiştirirseniz display() Yukarıdaki kodla temel şablon programlarından herhangi birinin yöntemini derleyin ve çalıştırın, aşağıdaki çıktı üretilir -

Dörtgen çizmek için display () yöntemi için kod parçacığı

public void display(GLAutoDrawable drawable) {

   final GL2 gl = drawable.getGL().getGL2();
   
   gl.glBegin(GL2.GL_QUADS);
   
   gl.glVertex3f( 0.0f,0.75f,0);
   gl.glVertex3f(-0.75f,0f,0);
   gl.glVertex3f(0f,-0.75f,0);
   gl.glVertex3f(0.75f,0f,0);
   
   gl.glEnd();
}

Değiştirirseniz display() Yukarıdaki koda sahip temel şablon programlarından herhangi birinin yöntemini, derleyin ve çalıştırın, aşağıdaki çıktı üretilir -

Çokgen çizmek için display () yöntemi için kod parçacığı

public void display(GLAutoDrawable drawable) {

   final GL2 gl = drawable.getGL().getGL2();
   
   gl.glBegin(GL2.GL_POLYGON);
   
   gl.glVertex3f(0f,0.5f,0f);
   gl.glVertex3f(-0.5f,0.2f,0f);
   gl.glVertex3f(-0.5f,-0.2f,0f);
   gl.glVertex3f(0f,-0.5f,0f);
   gl.glVertex3f(0f,0.5f,0f);
   gl.glVertex3f(0.5f,0.2f,0f);
   gl.glVertex3f(0.5f,-0.2f,0f);
   gl.glVertex3f(0f,-0.5f,0f);
   
   gl.glEnd();
}

Değiştirirseniz display() Yukarıdaki koda sahip temel şablon programlarından herhangi birinin yöntemini, derleyin ve çalıştırın, aşağıdaki çıktı üretilir -

OpenGL, bir nesneye renk uygulama, ölçekleme, ışıklandırma, bir nesneyi döndürme vb. Gibi daha fazla özellik sağlar. Bu bölüm, JOGL kullanan nesneler üzerindeki bazı dönüştürmeleri açıklar.

Pencerede Bir Nesneyi Taşıma

Önceki bölümlerde, basit çizgiler kullanarak bir çizgi çizme ve çeşitli şekiller çizme programlarını tartışmıştık. Bu şekilde oluşturulan şekiller, pencerenin herhangi bir yerinde görüntülenebilir. Yöntem kullanılarak yapılırglTranslatef (float x, float y, float z).

Bu yöntem, GLMatrixFunc arabirim, javax.media.opengl.fixedfunc paketi.

GLMatrixFunc Arayüzü

interface - GLMatrixFunc

package - javax.media.opengl.fixedfunc

Aşağıdaki tablo, bu arayüzün bazı önemli yöntemlerini listeler -

Sr.No. Yöntemler ve Açıklama
1

void glRotatef(float angle, float x, float y, float z)

Mevcut matrisi döndürür.

2

void glScalef(float x, float y, float z)

Mevcut matrisi ölçeklendirmek için kullanılır.

3

void glTranslatef(float x, float y,float z)

Mevcut matrisi çevirmek için kullanılır.

4

void glLoadIdentity()

Geçerli matrisi kimlik matrisi ile yükler.

glTranslate() yöntem, koordinat sisteminin başlangıcını, (x, y, z) parametreleri tarafından belirtilen noktaya taşır. glTranslate() yöntem olarak

argüman. Çevrilmemiş koordinat sistemini kaydetmek ve geri yüklemek için,glPushMatrix() ve glPopMatrix() yöntemler kullanılır.

gl.glTranslatef(0f, 0f, -2.5f);

Her ne zaman glTranslate()kullanılırsa, bileşenin ekrandaki konumunu değiştirir. Bu nedenle,reshape() yöntemi GLEventListener arayüz geçersiz kılınmalı ve OpenGL görünüm alanı ve projeksiyon matrisi başlatılmalıdır.

Aşağıdaki kod, bir görünüm bağlantı noktasını ve projeksiyon matrisini başlatmak için kullanılan şablonu gösterir -

public void reshape(GLAutoDrawable drawable, int x,  int y, int width, int height) { 
  
   // TODO Auto-generated method stub 
   final GL2 gl = drawable.getGL().getGL2();  
            
   // get the OpenGL 2 graphics object   
   if(height <=0) height = 1; 
       
   //preventing devided by 0 exception height = 1; 
   final float h = (float) width / (float) height; 
            
   // display area to cover the entire window 
   gl.glViewport(0, 0, width, height); 
            
   //transforming projection matrix 
   gl.glMatrixMode(GL2.GL_PROJECTION); 
   gl.glLoadIdentity(); 
   glu.gluPerspective(45.0f, h, 1.0, 20.0); 
      
   //transforming model view gl.glLoadIdentity(); 
   gl.glMatrixMode(GL2.GL_MODELVIEW); 
   gl.glLoadIdentity(); 
}

Bu bölüm, JOGL kullanarak nesnelere nasıl renk uygulayacağınızı öğretir. Bir nesneye renk uygulamak için yöntemi kullanınglColor() nın-nin GL2. Aşağıda glColor yöntemini kullanmak için sözdizimi verilmiştir.

Sözdizimi

gl.glColorXY(1f,0f,0f);

nerede,

  • X, kullanılan renk sayısını gösterir, 3 (kırmızı, yeşil, mavi) veya 4 (kırmızı, yeşil, mavi, alfa). Çeşitli renk kombinasyonları elde etmek için bu renklerin değerleri parametre olarak aktarılır. Renk parametrelerinin sırası bu sırayla korunmalıdır.

    Example

    Renk değerlerini (1, 0, 0) olarak geçirirseniz kırmızı renk alırsınız. Benzer şekilde (1, 1, 0) size sarı rengi verir.

  • Y, bayt (b), double (d), float (f), int (i), short (s), ubyte (ub), uint (ui) ve ushort (us) gibi parametreleri kabul eden veri türünü belirtir. .

gl.glColor3f(1f,0f,0f);   //gives us red          
gl.glColor3f(0f,1f,0f);   //gives us green            
gl.glColor3f(0f,0f,1f);   //gives us blue

Üçgen olması durumunda, her köşe için farklı renkler uygulayabilirsiniz.

Bir üçgene renk uygulamak için programı inceleyelim -

import javax.media.opengl.GL2; 
import javax.media.opengl.GLAutoDrawable; 
import javax.media.opengl.GLCapabilities; 
import javax.media.opengl.GLEventListener; 
import javax.media.opengl.GLProfile; 
import javax.media.opengl.awt.GLCanvas; 

import javax.swing.JFrame; 
 
public class TriangleColor implements GLEventListener { 

   @Override 
   public void display( GLAutoDrawable drawable ) { 
   
      final GL2 gl = drawable.getGL().getGL2(); 
      gl.glBegin( GL2.GL_TRIANGLES );  
      
      // Drawing Using Triangles 
    
      gl.glColor3f( 1.0f, 0.0f, 0.0f );   // Red 
      gl.glVertex3f( 0.5f,0.7f,0.0f );    // Top 
		
      gl.glColor3f( 0.0f,1.0f,0.0f );     // green 
      gl.glVertex3f( -0.2f,-0.50f,0.0f ); // Bottom Left 
		
      gl.glColor3f( 0.0f,0.0f,1.0f );     // blue 
      gl.glVertex3f( 0.5f,-0.5f,0.0f );   // Bottom Right 
		
      gl.glEnd();         
   } 
   
   @Override 
   public void dispose( GLAutoDrawable arg0 ) { 
      //method body 
   } 
   
   @Override 
   public void init( GLAutoDrawable arg0 ) { 
      // method body    
   }
   
   @Override 
   public void reshape( GLAutoDrawable arg0, int arg1, int arg2, int arg3, int arg4 ) { 
      // method body 
   } 
   
   public static void main( String[] args ) {    
   
      //getting the capabilities object of GL2 profile
      final GLProfile profile = GLProfile.get( GLProfile.GL2 ); 
      GLCapabilities capabilities = new GLCapabilities(profile);
          
      // The canvas  
      final GLCanvas glcanvas = new GLCanvas( capabilities ); 
      TriangleColor triangle = new TriangleColor(); 
      glcanvas.addGLEventListener( triangle ); 
      glcanvas.setSize( 400, 400 );   
      
      //creating frame 
      final JFrame frame = new JFrame (" Colored Triangle"); 
          
      //adding canvas to it 
      frame.getContentPane().add( glcanvas ); 
      frame.setSize( frame.getContentPane().getPreferredSize()); 
      frame.setVisible( true );   
      
   } //end of main
	
} //end of class

Yukarıdaki programı derleyip çalıştırdığınızda, aşağıdaki renkli üçgeni elde edersiniz -

Bir Çokgene Renk Uygulama

Bir çokgene renkleri uygulamak için programı inceleyelim -

import javax.media.opengl.GL2; 
import javax.media.opengl.GLAutoDrawable; 
import javax.media.opengl.GLCapabilities; 
import javax.media.opengl.GLEventListener; 
import javax.media.opengl.GLProfile; 
import javax.media.opengl.awt.GLCanvas; 

import javax.swing.JFrame; 

public class PolygonColor implements GLEventListener { 

   @Override 
   public void display( GLAutoDrawable drawable ) { 
   
      final GL2 gl = drawable.getGL().getGL2(); 
      gl.glColor3f( 1f,0f,0f ); //applying red  
  
      gl.glBegin( GL2.GL_POLYGON ); 
      
      gl.glVertex3f( 0f,0.5f,0f  ); 
      gl.glVertex3f( -0.5f,0.2f,0f ); 
      gl.glVertex3f( -0.5f,-0.2f,0f ); 
      gl.glVertex3f( 0f,-0.5f,0f ); 
      gl.glVertex3f( 0f,0.5f,0f ); 
      gl.glVertex3f( 0.5f,0.2f,0f ); 
      gl.glVertex3f( 0.5f,-0.2f,0f ); 
      gl.glVertex3f( 0f,-0.5f,0f ); 
      
      gl.glEnd(); 
   }
   
   @Override 
   public void dispose( GLAutoDrawable arg0 ) { 
      //method body 
   } 
   
   @Override 
   public void init( GLAutoDrawable arg0 ) {   
      // method body 
   } 
   
   @Override 
   public void reshape( GLAutoDrawable arg0, int arg1, int arg2, int arg3, int arg4 ) {    
      // method body 
   } 
   
   public static void main( String[] args ) { 
   
      //getting the capabilities object of GL2 profile  
      final GLProfile profile = GLProfile.get( GLProfile.GL2 ); 
      GLCapabilities capabilities = new GLCapabilities(profile); 
      
      // The canvas  
      final GLCanvas glcanvas = new GLCanvas( capabilities ); 
      PolygonColor polygon = new PolygonColor(); 
      glcanvas.addGLEventListener( polygon ); 
      glcanvas.setSize( 400, 400 ); 
      
      //creating frame 
      final JFrame frame = new JFrame ( "Colored Polygon" ); 
      
      //adding canvas to frame 
      frame.getContentPane().add( glcanvas ); 
      frame.setSize(frame.getContentPane().getPreferredSize() ); 
      frame.setVisible( true );    
      
   } //end of main 
	
 } //end of class

Yukarıdaki programı derleyip çalıştırdığınızda, aşağıdaki renkli Çokgen'i elde edersiniz -

Bu bölüm size bir nesneyi nasıl ölçeklendireceğinizi, yani JOGL kullanarak bir nesnenin boyutunu nasıl artıracağınızı veya azaltacağınızı öğretir.

Bir nesneyi ölçeklemek, glScalef(float x, float y, float z) yöntemi GLMatrixFuncarayüz. Bu yöntem, sırasıyla x, y ve z eksenleri boyunca ölçek faktörlerini belirlediğimiz üç kayan nokta parametresini kabul eder.

Örneğin aşağıdaki programda bir üçgen% 50'ye düşürülmüştür. Burada 50 değeri tüm eksenler boyunca parametre olarak aktarılır.

Bir üçgeni ölçeklemek için programı inceleyelim -

import javax.media.opengl.GL2; 
import javax.media.opengl.GLAutoDrawable; 
import javax.media.opengl.GLCapabilities; 
import javax.media.opengl.GLEventListener; 
import javax.media.opengl.GLProfile; 
import javax.media.opengl.awt.GLCanvas; 

import javax.swing.JFrame;
 
public class Scaling implements GLEventListener {
 
   @Override 
	
   public void display( GLAutoDrawable drawable ) { 
   
      final GL2 gl = drawable.getGL().getGL2(); 
      gl.glScalef( 0.50f,0.25f,0.50f ); 
      gl.glBegin( GL2.GL_TRIANGLES );
		
      // Drawing Using Triangles 
      gl.glColor3f( 1.0f, 0.0f, 0.0f );   // Red 
      gl.glVertex3f( 0.5f,0.7f,0.0f );    // Top 
		
      gl.glColor3f( 0.0f,1.0f,0.0f );     // blue 
      gl.glVertex3f( -0.2f,-0.50f,0.0f ); // Bottom Left 
		
      gl.glColor3f( 0.0f,0.0f,1.0f );     // green 
      gl.glVertex3f( 0.5f,-0.5f,0.0f );   // Bottom Right 
		
      gl.glEnd(); 
   }
   
   @Override 
   public void dispose( GLAutoDrawable arg0 ) { 
      //method body 
   } 
   
   @Override 
   public void init( GLAutoDrawable arg0 ) { 
      // method body 
   } 
   
   @Override 
   public void reshape( GLAutoDrawable arg0, int arg1, int arg2, int arg3, int arg4 ) { 
      // method body 
   }
   
   public static void main( String[] args ) {   
   
      //getting the capabilities object of GL2 profile 
      final GLProfile profile = GLProfile.get( GLProfile.GL2 ); 
      GLCapabilities capabilities = new GLCapabilities(profile);
        
      // The canvas  
      final GLCanvas glcanvas = new GLCanvas( capabilities ); 
      Scaling scaling = new Scaling(); 
      glcanvas.addGLEventListener( scaling ); 
      glcanvas.setSize( 400, 400 );  

      //creating frame 
      final JFrame frame  = new JFrame (" Dimnished Triangle (Scaling )");   

      //adding canvas to it 
      frame.getContentPane().add(glcanvas); 
      frame.setSize(frame.getContentPane().getPreferredSize()); 
      frame.setVisible(true);         
      
   } //end of main 
	
} //end of classimport javax.media.opengl.GL2;

Yukarıdaki programı derlerken ve çalıştırırken aşağıdaki çıktıyı elde ederiz. Burada, TriangleColor.java tarafından üretilen orijinal üçgene kıyasla küçülmüş bir üçgen gözlemleyebilirsiniz -

Bu bölümde, JOGL kullanarak bir nesneyi nasıl döndüreceğinizi açıkladık. Nesnelerin döndürülmesi, üç eksenden herhangi biri boyunca yapılabilir.glRotatef(float angle, float x, float y, float z) yöntemi GLMatrixFuncarayüz. Bu yönteme bir dönme açısı ve parametre olarak x, y, z eksenleri aktarmanız gerekir.

Aşağıdaki adımlar, bir nesneyi başarıyla döndürmeniz için size yol gösterir -

  • Başlangıçta kullanarak renk arabelleğini ve derinlik arabelleğini temizleyin gl.glClear(GL2.GL_COLOR_BUFFER_BIT | GL2.GL_DEPTH_BUFFER_BIT)yöntem. Bu yöntem, nesnenin önceki durumunu siler ve görünümü netleştirir.

  • Projeksiyon matrisini sıfırlayın. glLoadIdentity() yöntem.

Animatör sınıfını örnekleyin ve animatörü kullanarak start() yöntem.

FPSAnimator Sınıfı

Aşağıda, FPSAnimator sınıfının çeşitli yapıcıları verilmiştir.

Sr.No. Yöntemler ve Açıklamalar
1

FPSAnimator(GLAutoDrawable drawable, int fps)

Belirli bir hedef kare / saniye değerine sahip bir FPSAnimator oluşturur ve canlandırmak için bir başlangıç ​​çekilebilir.

2

FPSAnimator(GLAutoDrawable drawable, int fps, boolean cheduleAtFixedRate)

Belirli bir saniyede kare hedef değerine sahip bir FPSAnimator, canlandırmak için bir başlangıç ​​çekilebilirliği ve sabit oranlı programlamanın kullanılıp kullanılmayacağını belirten bir bayrak oluşturur.

3

FPSAnimator(int fps)

Belirli bir saniye başına kare hedefi değerine sahip bir FPSAnimator oluşturur.

4 Belirli bir hedef kare / saniye değerine sahip bir FPSAnimator oluşturur ve sabit oranlı programlamanın kullanılıp kullanılmayacağını belirten bir işarettir.

Belirli bir hedef kare / saniye değerine sahip bir FPSAnimator oluşturur ve sabit oranlı programlamanın kullanılıp kullanılmayacağını belirten bir işarettir.

start() ve stop()bu sınıftaki iki önemli yöntemdir. Aşağıdaki program, FPSAnimator sınıfını kullanarak bir üçgenin nasıl döndürüleceğini gösterir -

import javax.media.opengl.GL2; 
import javax.media.opengl.GLAutoDrawable; 
import javax.media.opengl.GLCapabilities; 
import javax.media.opengl.GLEventListener; 
import javax.media.opengl.GLProfile; 
import javax.media.opengl.awt.GLCanvas; 

import javax.swing.JFrame; 

import com.jogamp.opengl.util.FPSAnimator; 

public class TriangleRotation implements GLEventListener { 
   private float rtri;  //for angle of rotation
      
   @Override 
   public void display( GLAutoDrawable drawable ) {
   
      final GL2 gl = drawable.getGL().getGL2(); 
      gl.glClear (GL2.GL_COLOR_BUFFER_BIT |  GL2.GL_DEPTH_BUFFER_BIT );  
      
      // Clear The Screen And The Depth Buffer 
      gl.glLoadIdentity();  // Reset The View     
              
      //triangle rotation      
      gl.glRotatef( rtri, 0.0f, 1.0f, 0.0f );  
              
      // Drawing Using Triangles 
      gl.glBegin( GL2.GL_TRIANGLES );          
      
      gl.glColor3f( 1.0f, 0.0f, 0.0f );   // Red 
      gl.glVertex3f( 0.5f,0.7f,0.0f );    // Top 
      gl.glColor3f( 0.0f,1.0f,0.0f );     // blue 
      gl.glVertex3f( -0.2f,-0.50f,0.0f ); // Bottom Left 
      gl.glColor3f( 0.0f,0.0f,1.0f );     // green 
      gl.glVertex3f( 0.5f,-0.5f,0.0f );   // Bottom Right 
      
      gl.glEnd();    
      gl.glFlush(); 
      
      rtri +=0.2f;  //assigning the angle               
   } 
	
   @Override 
   public void dispose( GLAutoDrawable arg0 ) { 
      //method body 
   } 
   
   @Override 
   public void init( GLAutoDrawable arg0 ) { 
      // method body 
   }
   
   @Override 
   public void reshape( GLAutoDrawable drawable, int x, int y, int width, int height ) { 
   
      public static void main( String[] args ) {
		
         //getting the capabilities object of GL2 profile
         final GLProfile profile  = GLProfile.get(GLProfile.GL2 ); 
         GLCapabilities capabilities  = new GLCapabilities( profile );

         // The canvas  
         final GLCanvas glcanvas = new GLCanvas( capabilities); 
         TriangleRotation triangle = new TriangleRotation(); 
         glcanvas.addGLEventListener( triangle ); 
         glcanvas.setSize( 400, 400 );  

         // creating frame 
         final JFrame frame = new JFrame ("Rotating Triangle");

         // adding canvas to it 
         frame.getContentPane().add( glcanvas ); 
         frame.setSize(frame.getContentPane() .getPreferredSize());                 
         frame.setVisible( true ); 
                
         //Instantiating and Initiating Animator 
         final FPSAnimator animator = new FPSAnimator(glcanvas, 300,true); 
         animator.start(); 
      }
		
   } //end of main
	
} //end of class

Yukarıdaki programı derler ve çalıştırırsanız, aşağıdaki çıktıyı üretir. Burada, renkli üçgenin x ekseni etrafında döndürülmesinin çeşitli anlık görüntülerini gözlemleyebilirsiniz.

Bu bölüm, JOGL kullanarak bir nesneye ışık efektinin nasıl uygulanacağını açıklamaktadır.

Aydınlatmayı ayarlamak için, başlangıçta düğmeyi kullanarak aydınlatmayı etkinleştirin. glEnable()yöntem. Ardından nesneler için ışıklandırma uygulayın.glLightfv(int light, int pname, float[] params, int params_offset) yöntemi GLLightingFuncarayüz. Bu yöntem dört parametre alır.

Aşağıdaki tablo aşağıdaki parametreleri açıklamaktadır: gllightfv() yöntem.

Sr.No. Parametre Adı ve Açıklaması
1

Light

Bir ışık belirtir. Işıkların sayısı uygulamaya bağlıdır, ancak en az sekiz ışık desteklenmektedir. On değeri kabul eder, bu parametreler aşağıda verilen Işık Kaynağı Parametreleri adlı ayrı bir tabloda açıklanmaktadır.

2

Pname

Tek değerli bir ışık kaynağı parametresini belirtir. Işık kaynağı için aşağıda tartışıldığı gibi on parametre vardır.

3

Params

Işık kaynağı ışığının parametre pname'sine ayarlanan değer veya değerlere bir işaretçi belirtir .

4

Light source parameter

Aşağıda verilen ışık kaynağı parametrelerinden herhangi birini kullanabilirsiniz.

Işık kaynağı parametreleri

Sr.No. Parametre ve Açıklama
1

GL_AMBIENT

Işığın ortam yoğunluğunu belirleyen parametreleri içerir.

2

GL_DIFFUSE

Işığın yayılma yoğunluğunu belirleyen parametreleri içerir.

3

GL_SPECULAR

Işığın speküler yoğunluğunu belirleyen parametreleri içerir.

4

GL_POSITION

Homojen nesne koordinatlarında ışığın konumunu belirleyen dört tam sayı veya kayan nokta değeri içerir.

5

GL_SPOT_DIRECTION

Homojen nesne koordinatlarında ışığın yönünü belirleyen parametreler içerir.

6

GL_SPOT_EXPONENT

Parametreleri, ışığın yoğunluk dağılımını belirler.

7

GL_SPOT_CUTOFF

Bunun tek parametresi, ışığın maksimum yayılma açısını belirtir.

8

GL_CONSTANT_ATTENUATION or GL_LINEAR_ATTENUATION or GL_QUADRATIC_ATTENUATION

Tek bir değerle temsil edilen bu zayıflatma faktörlerinden herhangi birini kullanabilirsiniz.

Aydınlatma kullanılarak etkinleştirilir veya devre dışı bırakılır glEnable() ve glDisable () bağımsız değişkenli yöntemler GL_LIGHTING.

Aşağıdaki şablon aydınlatma için verilmiştir -

gl.glEnable(GL2.GL_LIGHTING); 
gl.glEnable(GL2.GL_LIGHT0);  
gl.glEnable(GL2.GL_NORMALIZE); 

float[] ambientLight = { 0.1f, 0.f, 0.f,0f };  // weak RED ambient 
gl.glLightfv(GL2.GL_LIGHT0, GL2.GL_AMBIENT, ambientLight, 0); 

float[] diffuseLight = { 1f,2f,1f,0f };  // multicolor diffuse 
gl.glLightfv(GL2.GL_LIGHT0, GL2.GL_DIFFUSE, diffuseLight, 0);

Dönen Bir Çokgene Işık Uygulama

Dönen bir çokgene ışık uygulamak için verilen adımları izleyin.

Çokgeni glRotate () yöntemini kullanarak döndürün

gl.glClear(GL2.GL_COLOR_BUFFER_BIT | GL2.GL_DEPTH_BUFFER_BIT); 
  
// Clear The Screen And The Depth Buffer  
gl.glLoadIdentity();  
                 
// Reset The View  
gl.glRotatef(rpoly, 0.0f, 1.0f, 0.0f);

Dönen bir çokgene ışık uygulamak için programı inceleyelim -

import javax.media.opengl.GL2; 
import javax.media.opengl.GLAutoDrawable; 
import javax.media.opengl.GLCapabilities; 
import javax.media.opengl.GLEventListener; 
import javax.media.opengl.GLProfile; 
import javax.media.opengl.awt.GLCanvas; 

import javax.swing.JFrame; 

import com.jogamp.opengl.util.FPSAnimator; 
 
public class PolygonLighting implements GLEventListener { 
   private float rpoly;
	
   @Override 
	
   public void display( GLAutoDrawable drawable ) {
   
      final GL2 gl = drawable.getGL().getGL2(); 
      gl.glColor3f(1f,0f,0f); //applying red
      
      // Clear The Screen And The Depth Buffer 
      gl.glClear( GL2.GL_COLOR_BUFFER_BIT |  
      GL2.GL_DEPTH_BUFFER_BIT );   
      gl.glLoadIdentity();       // Reset The View    
      gl.glRotatef( rpoly, 0.0f, 1.0f, 0.0f ); 
		
      gl.glBegin( GL2.GL_POLYGON ); 
      
      gl.glVertex3f( 0f,0.5f,0f ); 
      gl.glVertex3f( -0.5f,0.2f,0f ); 
      gl.glVertex3f( -0.5f,-0.2f,0f ); 
      gl.glVertex3f( 0f,-0.5f,0f ); 
      gl.glVertex3f( 0f,0.5f,0f ); 
      gl.glVertex3f( 0.5f,0.2f,0f ); 
      gl.glVertex3f( 0.5f,-0.2f,0f ); 
      gl.glVertex3f( 0f,-0.5f,0f ); 
      
      gl.glEnd(); 
		
      gl.glFlush(); 
      
      rpoly += 0.2f;  //assigning the angle 
      
      gl.glEnable( GL2.GL_LIGHTING );  
      gl.glEnable( GL2.GL_LIGHT0 );  
      gl.glEnable( GL2.GL_NORMALIZE );  

      // weak RED ambient 
      float[] ambientLight = { 0.1f, 0.f, 0.f,0f };  
      gl.glLightfv(GL2.GL_LIGHT0, GL2.GL_AMBIENT, ambient-Light, 0);  

      // multicolor diffuse 
      float[] diffuseLight = { 1f,2f,1f,0f };  
      gl.glLightfv( GL2.GL_LIGHT0, GL2.GL_DIFFUSE, diffuse-Light, 0 ); 
   }  
      
   @Override 
   public void dispose( GLAutoDrawable arg0 ) { 
      //method body  
   } 
  
   @Override 
   public void init( GLAutoDrawable arg0 ) { 
      // method body     
   } 
	
   @Override 
   public void reshape( GLAutoDrawable arg0, int arg1, int arg2, int arg3, int arg4 ) { 
      // method body 
   } 
	
   public static void main( String[] args ) { 
   
      //getting the capabilities object of GL2 profile 
      final GLProfile profile = GLProfile.get( GLProfile.GL2 ); 
      GLCapabilities capabilities = new GLCapabilities( profile);

      // The canvas  
      final GLCanvas glcanvas = new GLCanvas( capabilities ); 
      PolygonLighting polygonlighting = new PolygonLighting(); 
      glcanvas.addGLEventListener( polygonlighting ); 
      glcanvas.setSize( 400, 400 ); 

      //creating frame 
      final JFrame frame = new JFrame (" Polygon lighting ");  

      //adding canvas to it 
      frame.getContentPane().add( glcanvas ); 
      frame.setSize( frame.getContentPane().getPreferredSize()); 
      frame.setVisible( true );  
                    
      //Instantiating and Initiating Animator 
      final FPSAnimator animator = new FPSAnimator(glcanvas, 300,true ); 
      animator.start();                     
      
   } //end of main 
	
} //end of class

Yukarıdaki programı derler ve çalıştırırsanız, aşağıdaki çıktıyı üretir. Burada, ışıklı dönen bir çokgenin çeşitli anlık görüntülerini gözlemleyebilirsiniz.

Önceki bölümlerde 2 boyutlu nesnelerin nasıl yaratılacağını, ona efektlerin nasıl uygulanacağını ve nesnenin nasıl dönüştürüleceğini gördük. Bu bölüm size 3. boyut ve bazı şekillerle bir çizgi çizmeyi öğretir.

Z ekseni ile basit bir çizgi çizelim ve 2B ve 3B çizgiler arasındaki farkı görelim. Önce basit bir çizgi çizin, ardından ikinci çizgiyi 3 birim pencereye çizin.

3D bir çizgi çizmek için programı inceleyelim -

import javax.media.opengl.GL2;
import javax.media.opengl.GLAutoDrawable;
import javax.media.opengl.GLCapabilities;
import javax.media.opengl.GLEventListener;
import javax.media.opengl.GLProfile;
import javax.media.opengl.awt.GLCanvas;
import javax.media.opengl.glu.GLU;

import javax.swing.JFrame;
   
public class Line3d implements GLEventListener {
   private GLU glu = new GLU();
	
   @Override
   
   public void display( GLAutoDrawable drawable ) {
      final GL2 gl = drawable.getGL().getGL2();
      gl.glTranslatef( 0f, 0f, -2.5f );
      gl.glBegin( GL2.GL_LINES );
      gl.glVertex3f( -0.75f,0f,0 );
      gl.glVertex3f( 0f,-0.75f, 0 );
      gl.glEnd();
      
      //3d line
      gl.glBegin( GL2.GL_LINES );
      gl.glVertex3f( -0.75f,0f,3f );// 3 units into the window
      gl.glVertex3f( 0f,-0.75f,3f );
      gl.glEnd();
   }
   
   @Override
   public void dispose( GLAutoDrawable arg0 ) {
      //method body
   }
   
   @Override
   public void init( GLAutoDrawable arg0 ) {
      // method body
   }
   
   @Override
   public void reshape( GLAutoDrawable drawable, int x, int y, int width, int height ) {
	
      GL2 gl = drawable.getGL().getGL2();
      
      if( height <= 0 )
         height = 1;
			
      final float h = ( float ) width / ( float ) height;
      gl.glViewport( 0, 0, width, height );
      gl.glMatrixMode( GL2.GL_PROJECTION );
      gl.glLoadIdentity();
		
      glu.gluPerspective( 45.0f, h, 1.0, 20.0 );
      gl.glMatrixMode( GL2.GL_MODELVIEW );
      gl.glLoadIdentity();
   }
   
   public static void main( String[] args ) {
	
      //getting the capabilities object of GL2 profile
      final GLProfile profile = GLProfile.get( GLProfile.GL2 );
      GLCapabilities capabilities = new GLCapabilities(profile);
          
      // The canvas
      final GLCanvas glcanvas = new GLCanvas( capabilities );
      Line3d line3d = new Line3d();
      glcanvas.addGLEventListener( line3d );
      glcanvas.setSize( 400, 400 );
       
      //creating frame
      final JFrame frame = new JFrame (" 3d line");
          
      //adding canvas to it
      frame.getContentPane().add( glcanvas );
      frame.setSize(frame.getContentPane().getPreferredSize() );
      frame.setVisible( true );
   }//end of main
	
}//end of class

Yukarıdaki programı derleyip çalıştırdığınızda, aşağıdaki çıktı üretilir -

Z çeyreğine sıfır olmayan değerler verilerek 3B şekiller çizilebilir. glVertex3f()Yukarıdaki görünümü oluşturan yöntem. Şimdi kalan çizgileri birleştirmek 3B bir kenara yol açacaktır.

Şimdi aynı şekilde 3. boyutla bir kenar geliştirelim.

import javax.media.opengl.GL2;
import javax.media.opengl.GLAutoDrawable;
import javax.media.opengl.GLCapabilities;
import javax.media.opengl.GLEventListener;
import javax.media.opengl.GLProfile;
import javax.media.opengl.awt.GLCanvas;
import javax.media.opengl.glu.GLU;

import javax.swing.JFrame;

public class Edge1 implements GLEventListener {
   private GLU glu = new GLU();
	
   @Override
   public void display(GLAutoDrawable drawable) {
   
      // TODO Auto-generated method stub
      final GL2 gl = drawable.getGL().getGL2();
      gl.glTranslatef(0f, 0f, -2.5f);
      gl.glBegin(GL2.GL_LINES);
      gl.glVertex3f(-0.75f,0f,0);
      gl.glVertex3f(0f,-0.75f, 0);
      gl.glEnd();

      //3d line
      gl.glBegin(GL2.GL_LINES);

      //3 units in to the window
      gl.glVertex3f(-0.75f,0f,3f);
      gl.glVertex3f(0f,-0.75f,3f);
      gl.glEnd();

      //top
      gl.glBegin(GL2.GL_LINES);
      gl.glVertex3f(-0.75f,0f,0);
      gl.glVertex3f(-0.75f,0f,3f);
      gl.glEnd();

      //bottom
      gl.glBegin(GL2.GL_LINES);
      gl.glVertex3f(0f,-0.75f, 0);
      gl.glVertex3f(0f,-0.75f,3f);
      gl.glEnd();
   }

   @Override
   public void dispose(GLAutoDrawable arg0) {
      //method body
   }
	
   @Override
   public void init(GLAutoDrawable arg0) {
      // method body
   }
   
   @Override
   public void reshape(GLAutoDrawable drawable, int x, int y, int width, int height) {
	
      // TODO Auto-generated method stubfinal
      GL2 gl = drawable.getGL().getGL2();
      if(height <= 0)
         height = 1;
			
      final float h = (float) width / (float) height;
      gl.glViewport(0, 0, width, height);
      gl.glMatrixMode(GL2.GL_PROJECTION);
      gl.glLoadIdentity();
		
      glu.gluPerspective(45.0f, h, 1.0, 20.0);
      gl.glMatrixMode(GL2.GL_MODELVIEW);
      gl.glLoadIdentity();

   }
   
   public static void main(String[] args) {
   
      //getting the capabilities object of GL2 profile
      final GLProfile profile = GLProfile.get(GLProfile.GL2);
      GLCapabilities capabilities = new GLCapabilities(profile);

      // The canvas
      final GLCanvas glcanvas = new GLCanvas(capabilities);
      Edge1 b = new Edge1();
      glcanvas.addGLEventListener(b);
      glcanvas.setSize(400, 400);

      //creating frame
      final JFrame frame = new JFrame (" 3d edge");

      //adding canvas to it
      frame.getContentPane().add(glcanvas);
      frame.setSize(frame.getContentPane().getPreferredSize());
      frame.setVisible(true);
   }//end of main
	
}//end of class

Yukarıdaki programı derleyip çalıştırdığınızda, aşağıdaki çıktı üretilir -

Aynı şekilde, herhangi bir 2D dörtgenin karşılık gelen kenarlarına 3D kenarlar geliştirerek ve bitişik köşeleri birleştirerek, bir 3D dörtgen elde edebilirsiniz.

Aşağıda JOGL kullanarak eşkenar dörtgen çizmek için bir program verilmiştir.

import javax.media.opengl.GL2;
import javax.media.opengl.GLAutoDrawable;
import javax.media.opengl.GLCapabilities;
import javax.media.opengl.GLEventListener;
import javax.media.opengl.GLProfile;
import javax.media.opengl.awt.GLCanvas;
import javax.media.opengl.glu.GLU;

import javax.swing.JFrame;

public class Rhombus implements GLEventListener {
   private GLU glu = new GLU();
    
   @Override
   public void display(GLAutoDrawable drawable) {
	
      final GL2 gl = drawable.getGL().getGL2();
      gl.glTranslatef(0f, 0f, -2.5f);

      //drawing edge1.....
      gl.glBegin(GL2.GL_LINES);
      gl.glVertex3f(-0.75f,0f,0);
      gl.glVertex3f(0f,-0.75f, 0);
      gl.glEnd();
		
      gl.glBegin(GL2.GL_LINES);
      gl.glVertex3f(-0.75f,0f,3f); // 3 units into the window
      gl.glVertex3f(0f,-0.75f,3f);
      gl.glEnd();

      //top
      gl.glBegin(GL2.GL_LINES);
      gl.glVertex3f(-0.75f,0f,0);
      gl.glVertex3f(-0.75f,0f,3f);
      gl.glEnd();

      // bottom
      gl.glBegin(GL2.GL_LINES);
      gl.glVertex3f(0f,-0.75f, 0);
      gl.glVertex3f(0f,-0.75f,3f);
      gl.glEnd();
   
      // edge 2....
      gl.glBegin(GL2.GL_LINES);
      gl.glVertex3f(0f,-0.75f, 0);
      gl.glVertex3f(0.75f,0f, 0);
      gl.glEnd();
		
      gl.glBegin(GL2.GL_LINES);
      gl.glVertex3f(0f,-0.75f, 3f);
      gl.glVertex3f(0.75f,0f, 3f);
      gl.glEnd();
		
      gl.glBegin(GL2.GL_LINES);
      gl.glVertex3f(0f,-0.75f, 0);
      gl.glVertex3f(0f,-0.75f, 3f);
      gl.glEnd();
		
      gl.glBegin(GL2.GL_LINES);
      gl.glVertex3f(0.75f,0f, 0);
      gl.glVertex3f(0.75f,0f, 3f);
      gl.glEnd();

      //Edge 3.............
      gl.glBegin(GL2.GL_LINES);
      gl.glVertex3f( 0.0f,0.75f,0);
      gl.glVertex3f(-0.75f,0f,0);
      gl.glEnd();
		
      gl.glBegin(GL2.GL_LINES);
      gl.glVertex3f( 0.0f,0.75f,3f);
      gl.glVertex3f(-0.75f,0f,3f);
      gl.glEnd();
		
      gl.glBegin(GL2.GL_LINES);
      gl.glVertex3f( 0.0f,0.75f,0);
      gl.glVertex3f( 0.0f,0.75f,3f);
      gl.glEnd();
		
      gl.glBegin(GL2.GL_LINES);
      gl.glVertex3f(-0.75f,0f,0);
      gl.glVertex3f(-0.75f,0f,3f);
      gl.glEnd();

      //final edge
      gl.glBegin(GL2.GL_LINES);
      gl.glVertex3f(0.75f,0f, 0);
      gl.glVertex3f( 0.0f,0.75f,0);
      gl.glEnd();
		
      gl.glBegin(GL2.GL_LINES);
      gl.glVertex3f(0.75f,0f,3f);
      gl.glVertex3f( 0.0f,0.75f,3f);
      gl.glEnd();
		
      gl.glBegin(GL2.GL_LINES);
      gl.glVertex3f(0.75f,0f, 0);
      gl.glVertex3f(0.75f,0f,3f);
      gl.glEnd();
		
      gl.glBegin(GL2.GL_LINES);
      gl.glVertex3f( 0.0f,0.75f,0);
      gl.glVertex3f( 0.0f,0.75f,3f);
      gl.glEnd();
   }
   
   @Override
   public void dispose(GLAutoDrawable arg0) {
      //method body
   }
	
   @Override
   public void init(GLAutoDrawable arg0) {
      // method body
   }
	
   @Override
   public void reshape(GLAutoDrawable drawable, int x, int y, int width, int height) {
   
      // TODO Auto-generated method stub final
      GL2 gl = drawable.getGL().getGL2();
      if(height lt;= 0)
         height = 1;
			
      final float h = (float) width / (float) height;
      gl.glViewport(3, 6, width, height);
      gl.glMatrixMode(GL2.GL_PROJECTION);
      gl.glLoadIdentity();
		
      glu.gluPerspective(45.0f, h, 1.0, 20.0);
      gl.glMatrixMode(GL2.GL_MODELVIEW);
      gl.glLoadIdentity();
   }
   
   public static void main(String[] args) {
	
      //getting the capabilities object of GL2 profile
      final GLProfile profile = GLProfile.get(GLProfile.GL2);
      GLCapabilities capabilities = new GLCapabilities(profile);

      // The canvas
      final GLCanvas glcanvas = new GLCanvas(capabilities);
      Rhombus b = new Rhombus();
      glcanvas.addGLEventListener(b);
      glcanvas.setSize(400, 400);

      //creating frame
      final JFrame frame = new JFrame (" Rhombus 3d");

      //adding canvas to it
      frame.getContentPane().add(glcanvas);
      frame.setSize(frame.getContentPane().getPreferredSize());
      frame.setVisible(true);
   }//end of main
	
}//end of classimport javax.media.opengl.GL2;

Yukarıdaki programı derleyip yürüttüğünüzde aşağıdaki çıktı üretilir. 3B çizgiler kullanılarak çizilmiş bir eşkenar dörtgen gösterir.

Önceden tanımlanmış parametreleri glBegin() yöntem 3 boyutlu şekiller çizmek için kullanılabilir.

Önceki bölümde 3 boyutlu şekillerin nasıl çizileceğini gördük, bu bölüm size 3 boyutlu üçgenin nasıl çizileceğini ve döndürüleceğini öğretir.

Aşağıda, 3 boyutlu bir üçgen çizip döndürme programı verilmiştir.

import javax.media.opengl.GL2;
import javax.media.opengl.GLAutoDrawable;
import javax.media.opengl.GLCapabilities;
import javax.media.opengl.GLEventListener;
import javax.media.opengl.GLProfile;
import javax.media.opengl.awt.GLCanvas;
import javax.media.opengl.glu.GLU;

import javax.swing.JFrame;

import com.jogamp.opengl.util.FPSAnimator;

public class Triangle3d implements GLEventListener {

   private GLU glu = new GLU();
   private float rtri = 0.0f;
      
   @Override
   public void display(GLAutoDrawable drawable) {
      final GL2 gl = drawable.getGL().getGL2();

      // Clear The Screen And The Depth Buffer
      gl.glClear( GL2.GL_COLOR_BUFFER_BIT | GL2.GL_DEPTH_BUFFER_BIT );
      gl.glLoadIdentity(); // Reset The View
      gl.glTranslatef( -0.5f, 0.0f, -6.0f ); // Move the triangle
      gl.glRotatef( rtri, 0.0f, 1.0f, 0.0f );
      gl.glBegin( GL2.GL_TRIANGLES ); 
        
      //drawing triangle in all dimensions
      // Front
      gl.glColor3f( 1.0f, 0.0f, 0.0f ); // Red
      gl.glVertex3f( 1.0f, 2.0f, 0.0f ); // Top Of Triangle (Front)
		
      gl.glColor3f( 0.0f, 1.0f, 0.0f ); // Green
      gl.glVertex3f( -1.0f, -1.0f, 1.0f ); // Left Of Triangle (Front)
		
      gl.glColor3f( 0.0f, 0.0f, 1.0f ); // Blue
      gl.glVertex3f( 1.0f, -1.0f, 1.0f ); // Right Of Triangle (Front)
        
      // Right
      gl.glColor3f( 1.0f, 0.0f, 0.0f ); // Red
      gl.glVertex3f( 1.0f, 2.0f, 0.0f ); // Top Of Triangle (Right)
		
      gl.glColor3f( 0.0f, 0.0f, 1.0f ); // Blue
      gl.glVertex3f( 1.0f, -1.0f, 1.0f ); // Left Of Triangle (Right)
		
      gl.glColor3f( 0.0f, 1.0f, 0.0f ); // Green
      gl.glVertex3f( 1.0f, -1.0f, -1.0f ); // Right Of Triangle (Right)
        
      // Left
      gl.glColor3f( 1.0f, 0.0f, 0.0f ); // Red
      gl.glVertex3f( 1.0f, 2.0f, 0.0f ); // Top Of Triangle (Back)
		
      gl.glColor3f( 0.0f, 1.0f, 0.0f ); // Green
      gl.glVertex3f( 1.0f, -1.0f, -1.0f ); // Left Of Triangle (Back)
		
      gl.glColor3f( 0.0f, 0.0f, 1.0f ); // Blue
      gl.glVertex3f( -1.0f, -1.0f, -1.0f ); // Right Of Triangle (Back)
        
      //left
      gl.glColor3f( 0.0f, 1.0f, 0.0f ); // Red
      gl.glVertex3f( 1.0f, 2.0f, 0.0f ); // Top Of Triangle (Left)
		
      gl.glColor3f( 0.0f, 0.0f, 1.0f ); // Blue
      gl.glVertex3f( -1.0f, -1.0f, -1.0f ); // Left Of Triangle (Left)
		
      gl.glColor3f( 0.0f, 1.0f, 0.0f ); // Green
      gl.glVertex3f( -1.0f, -1.0f, 1.0f ); // Right Of Triangle (Left)
		
      gl.glEnd(); // Done Drawing 3d triangle (Pyramid)
      gl.glFlush();
      rtri += 0.2f;
   }
   
   @Override
   public void dispose( GLAutoDrawable drawable ) {
      //method body
   }
   
   @Override
   public void init( GLAutoDrawable drawable ) {
      //method body
   }
   
   @Override
   public void reshape( GLAutoDrawable drawable, int x, int y, int width, int height ) {
	
      // TODO Auto-generated method stub
      final GL2 gl = drawable.getGL().getGL2();
      if(height lt;=;)
         height = 1;
			
      final float h = ( float ) width / ( float ) height;
      gl.glViewport( 0, 0, width, height );
      gl.glMatrixMode( GL2.GL_PROJECTION );
      gl.glLoadIdentity();
		
      glu.gluPerspective( 45.0f, h, 1.0, 20.0 );
      gl.glMatrixMode( GL2.GL_MODELVIEW );
      gl.glLoadIdentity();
   }
   
   public static void main( String[] args ) {
   
      // TODO Auto-generated method stub
      final GLProfile profile = GLProfile.get( GLProfile.GL2 );
      GLCapabilities capabilities = new GLCapabilities( profile );
         
      // The canvas
      final GLCanvas glcanvas = new GLCanvas( capabilities );
      Triangle3d triangle = new Triangle3d();
		
      glcanvas.addGLEventListener( triangle );
      glcanvas.setSize( 400, 400 );
		
      final JFrame frame = new JFrame ( "3d Triangle (shallow)" );
		
      frame.getContentPane().add( glcanvas );
      frame.setSize( frame.getContentPane().getPreferredSize() );
      frame.setVisible( true );
		
      final FPSAnimator animator = new FPSAnimator(glcanvas,300,true);
      animator.start();
   }
	
}

Yukarıdaki programı derleyip yürüttüğünüzde aşağıdaki çıktı üretilir. Burada, dönen 3B üçgenin anlık görüntülerine sahipsiniz. Bu program derinlik testi içermediğinden üçgen içi boş oluşturulur.

Üçgeni katı yapmak için, kullanarak derinlik testini etkinleştirmeniz gerekir. glEnable(GL_DEPTH_TEST). Derinlik tamponunu etkinleştirmek size boş bir ekran verir. Bu, kullanılarak rengi temizleyerek temizlenebilir.glClear(GL_COLOR_BUFFERBIT | GL_DEPTH_BUFFER_BIT)yöntem. İnit () yönteminde veya içinde derinlik testini etkinleştirmek içinglDisplay() yöntem, aşağıdaki kodu yazın -

public void init(GLAutoDrawable drawable) {
   final GL2 gl = drawable.getGL().getGL2();
	
   gl.glShadeModel(GL2.GL_SMOOTH);
   gl.glClearColor(0f, 0f, 0f, 0f);
   gl.glClearDepth(1.0f);
   gl.glEnable(GL2.GL_DEPTH_TEST);
   gl.glDepthFunc(GL2.GL_LEQUAL);
   gl.glHint(GL2.GL_PERSPECTIVE_CORRECTION_HINT, GL2.GL_NICEST);
 }

Aşağıda, derinlik testi ile bir 3B üçgen çizme programı verilmiştir.

import javax.media.opengl.GL2;
import javax.media.opengl.GLAutoDrawable;
import javax.media.opengl.GLCapabilities;
import javax.media.opengl.GLEventListener;
import javax.media.opengl.GLProfile;
import javax.media.opengl.awt.GLCanvas;
import javax.media.opengl.glu.GLU;

import javax.swing.JFrame;

import com.jogamp.opengl.util.FPSAnimator;

public class Triangledepthtest implements GLEventListener {

   private GLU glu = new GLU();
   private float rtri = 0.0f; 
	
   @Override
   public void display( GLAutoDrawable drawable ) {
	
      final GL2 gl = drawable.getGL().getGL2();
		
      gl.glShadeModel( GL2.GL_SMOOTH );
      gl.glClearColor( 0f, 0f, 0f, 0f );
      gl.glClearDepth( 1.0f );
      gl.glEnable( GL2.GL_DEPTH_TEST );
      gl.glDepthFunc( GL2.GL_LEQUAL );
      gl.glHint(GL2.GL_PERSPECTIVE_CORRECTION_HINT, GL2.GL_NICEST);

      // Clear The Screen And The Depth Buffer
      gl.glClear(GL2.GL_COLOR_BUFFER_BIT | GL2.GL_DEPTH_BUFFER_BIT); 
      gl.glLoadIdentity(); // Reset The View
      gl.glTranslatef( -0.5f,0.0f,-6.0f ); // Move the triangle
      gl.glRotatef( rtri, 0.0f, 1.0f, 0.0f );
      gl.glBegin( GL2.GL_TRIANGLES ); 

      //drawing triangle in all dimensions
      //front
      gl.glColor3f( 1.0f, 0.0f, 0.0f ); // Red
      gl.glVertex3f( 1.0f, 2.0f, 0.0f ); // Top
		
      gl.glColor3f( 0.0f, 1.0f, 0.0f ); // Green
      gl.glVertex3f( -1.0f, -1.0f, 1.0f ); // Left
		
      gl.glColor3f( 0.0f, 0.0f, 1.0f ); // Blue
      gl.glVertex3f( 1.0f, -1.0f, 1.0f ); // Right)

      //right
      gl.glColor3f( 1.0f, 0.0f, 0.0f );
      gl.glVertex3f( 1.0f, 2.0f, 0.0f ); // Top
		
      gl.glColor3f( 0.0f, 0.0f, 1.0f );
      gl.glVertex3f( 1.0f, -1.0f, 1.0f ); // Left
		
      gl.glColor3f( 0.0f, 1.0f, 0.0f );
      gl.glVertex3f( 1.0f, -1.0f, -1.0f ); // Right

      //left
      gl.glColor3f( 1.0f, 0.0f, 0.0f );
      gl.glVertex3f( 1.0f, 2.0f, 0.0f ); // Top
		
      gl.glColor3f( 0.0f, 1.0f, 0.0f );
      gl.glVertex3f( 1.0f, -1.0f, -1.0f ); // Left 
		
      gl.glColor3f( 0.0f, 0.0f, 1.0f );
      gl.glVertex3f( -1.0f, -1.0f, -1.0f ); // Right 

      //top
      gl.glColor3f( 0.0f, 1.0f, 0.0f );
      gl.glVertex3f( 1.0f, 2.0f, 0.0f ); // Top
		
      gl.glColor3f( 0.0f, 0.0f, 1.0f );
      gl.glVertex3f( -1.0f, -1.0f, -1.0f ); // Left
		
      gl.glColor3f( 0.0f, 1.0f, 0.0f );
      gl.glVertex3f( -1.0f, -1.0f, 1.0f ); // Right
		
      gl.glEnd(); // Done Drawing 3d triangle (Pyramid)

      gl.glFlush();
      rtri += 0.2f;
   }
      
   @Override
   public void dispose( GLAutoDrawable drawable ) {
   }
   
   @Override
   public void init( GLAutoDrawable drawable ) {
	
      final GL2 gl = drawable.getGL().getGL2();
		
      gl.glShadeModel( GL2.GL_SMOOTH );
      gl.glClearColor( 0f, 0f, 0f, 0f );
      gl.glClearDepth( 1.0f );
      gl.glEnable( GL2.GL_DEPTH_TEST );
      gl.glDepthFunc( GL2.GL_LEQUAL );
      gl.glHint(GL2.GL_PERSPECTIVE_CORRECTION_HINT, GL2.GL_NICEST );
   }
   
   @Override
   public void reshape(GLAutoDrawable drawable, int x, int y, int width, int height ) {
	
      // TODO Auto-generated method stub
      final GL2 gl = drawable.getGL().getGL2();
      if( height <= 0 ) 
         height = 1;
			
      final float h = ( float ) width / ( float ) height;
      gl.glViewport( 0, 0, width, height );
      gl.glMatrixMode( GL2.GL_PROJECTION );
      gl.glLoadIdentity();
		
      glu.gluPerspective( 45.0f, h, 1.0, 20.0 );
      gl.glMatrixMode( GL2.GL_MODELVIEW );
      gl.glLoadIdentity();
   }
      
   public static void main( String[] args ) {
	
      // TODO Auto-generated method stub
      final GLProfile profile = GLProfile.get( GLProfile.GL2 );
      GLCapabilities capabilities = new GLCapabilities( profile );
		
      // The canvas
      final GLCanvas glcanvas = new GLCanvas( capabilities );
      Triangledepthtest triangledepthtest = new Triangledepthtest();
		
      glcanvas.addGLEventListener( triangledepthtest );
      glcanvas.setSize( 400, 400 );
		
      final JFrame frame = new JFrame ( "3d Triangle (solid)" );
      frame.getContentPane().add(glcanvas);
      frame.setSize( frame.getContentPane().getPreferredSize() );
      frame.setVisible( true );
      final FPSAnimator animator = new FPSAnimator( glcanvas, 300,true);
		
      animator.start();
   }
	
}

Yukarıdaki programı derleyip yürüttüğünüzde aşağıdaki çıktı üretilir.

Burada, dönen bir 3B üçgenin anlık görüntülerini görebilirsiniz. Bu program derinlik testi için kod içerdiğinden, üçgen tam olarak oluşturulur.

Önceki bölümlerde 3 boyutlu üçgenin nasıl çizilip döndürüleceğini gördük. Şimdi bu bölümde 3 boyutlu bir küpün nasıl yapıldığını, nasıl döndürüleceğini, üzerine nasıl bir görüntü ekleneceğini öğrenebilirsiniz. Aynı şekilde, Bu bölüm bir 3B küp çizmek ve ona renkler uygulamak ve ona görüntü eklemek için örnekler sağlar.

Aşağıda, 3 boyutlu bir küp çizmek ve ona renk uygulamak için program verilmiştir.

import java.awt.DisplayMode;
import javax.media.opengl.GL2;
import javax.media.opengl.GLAutoDrawable;
import javax.media.opengl.GLCapabilities;
import javax.media.opengl.GLEventListener;
import javax.media.opengl.GLProfile;
import javax.media.opengl.awt.GLCanvas;
import javax.media.opengl.glu.GLU;

import javax.swing.JFrame;

import com.jogamp.opengl.util.FPSAnimator;

public class Cube implements GLEventListener {

   public static DisplayMode dm, dm_old;
   private GLU glu = new GLU();
   private float rquad = 0.0f;
      
   @Override
   public void display( GLAutoDrawable drawable ) {
	
      final GL2 gl = drawable.getGL().getGL2();
      gl.glClear(GL2.GL_COLOR_BUFFER_BIT | GL2.GL_DEPTH_BUFFER_BIT );
      gl.glLoadIdentity();
      gl.glTranslatef( 0f, 0f, -5.0f ); 

      // Rotate The Cube On X, Y & Z
      gl.glRotatef(rquad, 1.0f, 1.0f, 1.0f); 
 
      //giving different colors to different sides
      gl.glBegin(GL2.GL_QUADS); // Start Drawing The Cube
      gl.glColor3f(1f,0f,0f); //red color
      gl.glVertex3f(1.0f, 1.0f, -1.0f); // Top Right Of The Quad (Top)
      gl.glVertex3f( -1.0f, 1.0f, -1.0f); // Top Left Of The Quad (Top)
      gl.glVertex3f( -1.0f, 1.0f, 1.0f ); // Bottom Left Of The Quad (Top)
      gl.glVertex3f( 1.0f, 1.0f, 1.0f ); // Bottom Right Of The Quad (Top)
		
      gl.glColor3f( 0f,1f,0f ); //green color
      gl.glVertex3f( 1.0f, -1.0f, 1.0f ); // Top Right Of The Quad
      gl.glVertex3f( -1.0f, -1.0f, 1.0f ); // Top Left Of The Quad
      gl.glVertex3f( -1.0f, -1.0f, -1.0f ); // Bottom Left Of The Quad
      gl.glVertex3f( 1.0f, -1.0f, -1.0f ); // Bottom Right Of The Quad 

      gl.glColor3f( 0f,0f,1f ); //blue color
      gl.glVertex3f( 1.0f, 1.0f, 1.0f ); // Top Right Of The Quad (Front)
      gl.glVertex3f( -1.0f, 1.0f, 1.0f ); // Top Left Of The Quad (Front)
      gl.glVertex3f( -1.0f, -1.0f, 1.0f ); // Bottom Left Of The Quad
      gl.glVertex3f( 1.0f, -1.0f, 1.0f ); // Bottom Right Of The Quad 

      gl.glColor3f( 1f,1f,0f ); //yellow (red + green)
      gl.glVertex3f( 1.0f, -1.0f, -1.0f ); // Bottom Left Of The Quad
      gl.glVertex3f( -1.0f, -1.0f, -1.0f ); // Bottom Right Of The Quad
      gl.glVertex3f( -1.0f, 1.0f, -1.0f ); // Top Right Of The Quad (Back)
      gl.glVertex3f( 1.0f, 1.0f, -1.0f ); // Top Left Of The Quad (Back)

      gl.glColor3f( 1f,0f,1f ); //purple (red + green)
      gl.glVertex3f( -1.0f, 1.0f, 1.0f ); // Top Right Of The Quad (Left)
      gl.glVertex3f( -1.0f, 1.0f, -1.0f ); // Top Left Of The Quad (Left)
      gl.glVertex3f( -1.0f, -1.0f, -1.0f ); // Bottom Left Of The Quad
      gl.glVertex3f( -1.0f, -1.0f, 1.0f ); // Bottom Right Of The Quad 

      gl.glColor3f( 0f,1f, 1f ); //sky blue (blue +green)
      gl.glVertex3f( 1.0f, 1.0f, -1.0f ); // Top Right Of The Quad (Right)
      gl.glVertex3f( 1.0f, 1.0f, 1.0f ); // Top Left Of The Quad
      gl.glVertex3f( 1.0f, -1.0f, 1.0f ); // Bottom Left Of The Quad
      gl.glVertex3f( 1.0f, -1.0f, -1.0f ); // Bottom Right Of The Quad
      gl.glEnd(); // Done Drawing The Quad
      gl.glFlush();
      rquad -= 0.15f;
   }
   
   @Override
   public void dispose( GLAutoDrawable drawable ) {
      // TODO Auto-generated method stub
   }
   
   @Override
   public void init( GLAutoDrawable drawable ) {
	
      final GL2 gl = drawable.getGL().getGL2();
      gl.glShadeModel( GL2.GL_SMOOTH );
      gl.glClearColor( 0f, 0f, 0f, 0f );
      gl.glClearDepth( 1.0f );
      gl.glEnable( GL2.GL_DEPTH_TEST );
      gl.glDepthFunc( GL2.GL_LEQUAL );
      gl.glHint( GL2.GL_PERSPECTIVE_CORRECTION_HINT, GL2.GL_NICEST );
   }
      
   @Override
   public void reshape( GLAutoDrawable drawable, int x, int y, int width, int height ) {
	
      // TODO Auto-generated method stub
      final GL2 gl = drawable.getGL().getGL2();
      if( height lt;= 0 )
         height = 1;
			
      final float h = ( float ) width / ( float ) height;
      gl.glViewport( 0, 0, width, height );
      gl.glMatrixMode( GL2.GL_PROJECTION );
      gl.glLoadIdentity();
		
      glu.gluPerspective( 45.0f, h, 1.0, 20.0 );
      gl.glMatrixMode( GL2.GL_MODELVIEW );
      gl.glLoadIdentity();
   }
      
   public static void main( String[] args ) {
	
      final GLProfile profile = GLProfile.get( GLProfile.GL2 );
      GLCapabilities capabilities = new GLCapabilities( profile );
      
      // The canvas
      final GLCanvas glcanvas = new GLCanvas( capabilities );
      Cube cube = new Cube();
		
      glcanvas.addGLEventListener( cube );
      glcanvas.setSize( 400, 400 );
		
      final JFrame frame = new JFrame ( " Multicolored cube" );
      frame.getContentPane().add( glcanvas );
      frame.setSize( frame.getContentPane().getPreferredSize() );
      frame.setVisible( true );
      final FPSAnimator animator = new FPSAnimator(glcanvas, 300,true);
		
      animator.start();
   }
	
}

Yukarıdaki programı derleyip yürüttüğünüzde aşağıdaki çıktı üretilir. Renkli bir 3B küp gösterir.

Küp'e Doku Uygulama

Bir kübe doku uygulamak için aşağıdaki adımlar verilmiştir -

  • Gerekli dokuyu küpü kullanarak bağlayabilirsiniz. gl.glBindTexture(GL2.GL_TEXTURE_2D.texture) Çizilebilir arayüz yöntemi.

  • Bu yöntem, doku (int) bağımsız değişkeninin yanı sıra GL2.GL_TEXTURE_2D(int).

  • Sen yürütmeden önce Display(), doku değişkeni oluşturmanız gerekir

  • İçinde init() yöntem veya başlangıç ​​satırlarında glDisplay() yöntem, dokuyu etkinleştir using gl.glEnable(GL2.GL_TEXTURE_2D) yöntem.

  • Parametre olarak bir dosya nesnesine ihtiyaç duyan ve dolayısıyla nesneye doku olarak kullanılan görüntünün yoluna ihtiyaç duyan doku nesnesini oluşturun.

File file = new File(“c:\\pictures\\boy.jpg”);
Texture t = textureIO.newTexture(file, true);
texture = t.getTextureObject(gl);
  • 'Dosya bulunamadı' istisnasını işleyin

Aşağıda, bir küp üzerine görüntü eklemek için program verilmiştir.

import java.awt.DisplayMode;

import java.io.File;
import java.io.IOException;

import javax.media.opengl.GL2;
import javax.media.opengl.GLAutoDrawable;
import javax.media.opengl.GLCapabilities;
import javax.media.opengl.GLEventListener;
import javax.media.opengl.GLProfile;
import javax.media.opengl.awt.GLCanvas;
import javax.media.opengl.glu.GLU;

import javax.swing.JFrame;

import com.jogamp.opengl.util.FPSAnimator;
import com.jogamp.opengl.util.texture.Texture;
import com.jogamp.opengl.util.texture.TextureIO;

public class CubeTexture implements GLEventListener {

   public static DisplayMode dm, dm_old;
   private GLU glu = new GLU();
   private float xrot,yrot,zrot;
   private int texture;
   
   @Override
   public void display(GLAutoDrawable drawable) {
   
      // TODO Auto-generated method stub
      final GL2 gl = drawable.getGL().getGL2();
      gl.glClear(GL2.GL_COLOR_BUFFER_BIT | GL2.GL_DEPTH_BUFFER_BIT);
      gl.glLoadIdentity(); // Reset The View
      gl.glTranslatef(0f, 0f, -5.0f);
		
      gl.glRotatef(xrot, 1.0f, 1.0f, 1.0f);
      gl.glRotatef(yrot, 0.0f, 1.0f, 0.0f);
      gl.glRotatef(zrot, 0.0f, 0.0f, 1.0f);
		
      gl.glBindTexture(GL2.GL_TEXTURE_2D, texture);
      gl.glBegin(GL2.GL_QUADS);

      // Front Face
      gl.glTexCoord2f(0.0f, 0.0f); gl.glVertex3f(-1.0f, -1.0f, 1.0f);
      gl.glTexCoord2f(1.0f, 0.0f); gl.glVertex3f( 1.0f, -1.0f, 1.0f);
      gl.glTexCoord2f(1.0f, 1.0f); gl.glVertex3f( 1.0f, 1.0f, 1.0f);
      gl.glTexCoord2f(0.0f, 1.0f); gl.glVertex3f(-1.0f, 1.0f, 1.0f);

      // Back Face
      gl.glTexCoord2f(1.0f, 0.0f); gl.glVertex3f(-1.0f, -1.0f, -1.0f);
      gl.glTexCoord2f(1.0f, 1.0f); gl.glVertex3f(-1.0f, 1.0f, -1.0f);
      gl.glTexCoord2f(0.0f, 1.0f); gl.glVertex3f( 1.0f, 1.0f, -1.0f);
      gl.glTexCoord2f(0.0f, 0.0f); gl.glVertex3f( 1.0f, -1.0f, -1.0f);

      // Top Face
      gl.glTexCoord2f(0.0f, 1.0f); gl.glVertex3f(-1.0f, 1.0f, -1.0f);
      gl.glTexCoord2f(0.0f, 0.0f); gl.glVertex3f(-1.0f, 1.0f, 1.0f);
      gl.glTexCoord2f(1.0f, 0.0f); gl.glVertex3f( 1.0f, 1.0f, 1.0f);
      gl.glTexCoord2f(1.0f, 1.0f); gl.glVertex3f( 1.0f, 1.0f, -1.0f);

      // Bottom Face
      gl.glTexCoord2f(1.0f, 1.0f); gl.glVertex3f(-1.0f, -1.0f, -1.0f);
      gl.glTexCoord2f(0.0f, 1.0f); gl.glVertex3f( 1.0f, -1.0f, -1.0f);
      gl.glTexCoord2f(0.0f, 0.0f); gl.glVertex3f( 1.0f, -1.0f, 1.0f);
      gl.glTexCoord2f(1.0f, 0.0f); gl.glVertex3f(-1.0f, -1.0f, 1.0f);

      // Right face
      gl.glTexCoord2f(1.0f, 0.0f); gl.glVertex3f( 1.0f, -1.0f, -1.0f);
      gl.glTexCoord2f(1.0f, 1.0f); gl.glVertex3f( 1.0f, 1.0f, -1.0f);
      gl.glTexCoord2f(0.0f, 1.0f); gl.glVertex3f( 1.0f, 1.0f, 1.0f);
      gl.glTexCoord2f(0.0f, 0.0f); gl.glVertex3f( 1.0f, -1.0f, 1.0f);

      // Left Face
      gl.glTexCoord2f(0.0f, 0.0f); gl.glVertex3f(-1.0f, -1.0f, -1.0f);
      gl.glTexCoord2f(1.0f, 0.0f); gl.glVertex3f(-1.0f, -1.0f, 1.0f);
      gl.glTexCoord2f(1.0f, 1.0f); gl.glVertex3f(-1.0f, 1.0f, 1.0f);
      gl.glTexCoord2f(0.0f, 1.0f); gl.glVertex3f(-1.0f, 1.0f, -1.0f);
      gl.glEnd();
      gl.glFlush();

      //change the speeds here
      xrot += .1f;
      yrot += .1f;
      zrot += .1f;
   }
   
   @Override
   public void dispose(GLAutoDrawable drawable) {
      // method body
   }
   
   @Override
   public void init(GLAutoDrawable drawable) {
	
      final GL2 gl = drawable.getGL().getGL2();
		
      gl.glShadeModel(GL2.GL_SMOOTH);
      gl.glClearColor(0f, 0f, 0f, 0f);
      gl.glClearDepth(1.0f);
      gl.glEnable(GL2.GL_DEPTH_TEST);
      gl.glDepthFunc(GL2.GL_LEQUAL);
      gl.glHint(GL2.GL_PERSPECTIVE_CORRECTION_HINT, GL2.GL_NICEST);
      
      //
      gl.glEnable(GL2.GL_TEXTURE_2D);
      try{
		
         File im = new File("E:\\office\\boy.jpg ");
         Texture t = TextureIO.newTexture(im, true);
         texture= t.getTextureObject(gl);
          
      }catch(IOException e){
         e.printStackTrace();
      }
   }
      
   @Override
   public void reshape(GLAutoDrawable drawable, int x, int y, int width, int height) {
   
      // TODO Auto-generated method stub
      final GL2 gl = drawable.getGL().getGL2();
      if(height lt;= 0)
         height = 1;
			
      final float h = (float) width / (float) height;
      gl.glViewport(0, 0, width, height);
      gl.glMatrixMode(GL2.GL_PROJECTION);
      gl.glLoadIdentity();
		
      glu.gluPerspective(45.0f, h, 1.0, 20.0);
      gl.glMatrixMode(GL2.GL_MODELVIEW);
      gl.glLoadIdentity();
   }
   
   public static void main(String[] args) {
   
      // TODO Auto-generated method stub
      final GLProfile profile = GLProfile.get(GLProfile.GL2);
      GLCapabilities capabilities = new GLCapabilities(profile);
      
      // The canvas
      final GLCanvas glcanvas = new GLCanvas(capabilities);
      CubeTexture r = new CubeTexture();
		
      glcanvas.addGLEventListener(r);
      glcanvas.setSize(400, 400);
		
      final JFrame frame = new JFrame (" Textured Cube");
      frame.getContentPane().add(glcanvas);
      frame.setSize(frame.getContentPane().getPreferredSize());
      frame.setVisible(true);
      final FPSAnimator animator = new FPSAnimator(glcanvas, 300, true);
		
      animator.start();
   }
	
}

Yukarıdaki programı derleyip yürüttüğünüzde aşağıdaki çıktı üretilir. Üzerine istenen doku uygulanmış bir 3B küp görebilirsiniz.

GPU - Grafik işlem ünitesi, görüntülerin oluşturulmasını hızlandıran özel bir elektronik cihazdır.

JNI- Java Yerel Arayüzü. Hangisini kullanarak, java yerel yöntemlere erişim.

Model - Noktalar, çizgiler ve çokgenler gibi temel grafik ilkellerinden oluşturulan nesnelerdir.

Pixel - Ekranda görülen en küçük ekran birimi.

Projection - Bir nesnenin koordinatlarını iki boyutlu bir düzleme eşleme yöntemine projeksiyon denir.

Projection matrix - 2D yüzey üzerindeki bir nesnenin doğrusal bir dönüşümüdür.

Rendering - Bilgisayarın modellerden görüntüler oluşturduğu bir işlem.

Viewport - Görüntü alanı, bilgisayar grafiklerinde ekranda görüntülenen bir bölgedir.