import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.media.opengl.*;
import javax.media.opengl.awt.GLCanvas;
import javax.media.opengl.glu.GLU;
import com.jogamp.opengl.util.FPSAnimator;
import static javax.media.opengl.GL.*; // GL sabitleri
import static javax.media.opengl.GL2.*; //
public class ev extends GLCanvas implements GLEventListener {
private static String BASLIK = "Bilgisayar Grafikleri Hafta-9 - Ev";
private static int CIZIMALANI_GENISLIK = 320;
private static int CIZIMALANI_YUKSEKLIK = 240;
private static int FPS = 60;
private GLU glu;
public ev() { //yapilandirici
this.addGLEventListener(this);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
GLCanvas canvas = new ev(); // upcasting, sınıftan nesne
canvas.setPreferredSize(new Dimension(CIZIMALANI_GENISLIK, CIZIMALANI_YUKSEKLIK)); // cizim alani boyut tanimlamasi
final FPSAnimator animator = new FPSAnimator(canvas, FPS, true); // cizim alani
JFrame frame = new JFrame(BASLIK); // pencere nesnesi
frame.getContentPane().add(canvas); // cizim alaninin pencereye eklenmesi
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) { // program sonlandildiginda
new Thread() {
public void run() {
if (animator.isStarted()) animator.stop(); // calisiyorsa durdur
System.exit(0);
}
}.start();
}
});
frame.pack(); // pencere boyutunu icerige gore ayarla
frame.setVisible(true); // pencereyi gorunur yap
animator.start(); // cizimi baslat
}
});
}
public void dispose(GLAutoDrawable drawable) { }
// baslangic durumlari
public void init(GLAutoDrawable drawable) {
GL2 gl = drawable.getGL().getGL2();
glu = new GLU();
gl.glClearColor(0.0f, 0.0f, 0.0f, 0.0f); // arka plan rengi
gl.glEnable(GL_DEPTH_TEST);
}
// cizim alani degisince cizimi olcekle
public void reshape(GLAutoDrawable drawable, int x, int y, int width, int height) {
GL2 gl = drawable.getGL().getGL2();
float aspect=(float)1.2; // olcek
gl.glViewport(0, 0, 320, 240); // gorunecek sahnenin pencere uzerindeki koordinatlari ve boyutu (gorus alani)
gl.glMatrixMode(GL_PROJECTION); //izdusum matrisini sec
gl.glLoadIdentity(); // matrisi baslangic durumuna getir
glu.gluPerspective(45.0, aspect, 0.1, 100.0); // persipektif goruntu kameranin bulundugu noktan cikan isinlara ait aci, yeni cercevenin en/boy orani, yeni cercevenin bakis noktasina olan yakinlik ve uzakligi
gl.glMatrixMode(GL_MODELVIEW); // model matrisini sec
gl.glLoadIdentity(); // matrisi baslangic durumuna getir
}
// cizim
float aci=0.0f;
public void display(GLAutoDrawable drawable) {
GL2 gl = drawable.getGL().getGL2();
gl.glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //yeniden cizim icin tampon bellek temizligi
gl.glLoadIdentity(); // matrisleri sifirla
// kod kismi baslangic
gl.glTranslatef(0.0f, 0.0f, -50.0f); // koordinat
gl.glRotatef(aci,0.0f,1.0f,0.0f);
gl.glColor3f(0.0f, 0.0f, 1.0f); // mavi
gl.glBegin(GL_QUADS);
gl.glVertex3f(0.0f, 0.0f, 8.0f);
gl.glVertex3f(8.0f, 0.0f, 8.0f);
gl.glVertex3f(8.0f, 4.0f, 8.0f);
gl.glVertex3f(0.0f, 4.0f, 8.0f);
gl.glEnd();
gl.glBegin(GL_QUADS);
gl.glVertex3f(8.0f, 4.0f, 8.0f);
gl.glVertex3f(8.0f, 10.0f, 8.0f);
gl.glVertex3f(3.0f, 10.0f, 8.0f);
gl.glVertex3f(3.0f, 4.0f, 8.0f);
gl.glEnd();
gl.glBegin(GL_QUADS);
gl.glVertex3f(3.0f, 6.0f, 8.0f);
gl.glVertex3f(3.0f, 10.0f, 8.0f);
gl.glVertex3f(0.0f, 10.0f, 8.0f);
gl.glVertex3f(0.0f, 6.0f, 8.0f);
gl.glEnd();
gl.glBegin(GL_QUADS);
gl.glVertex3f(0.0f, 0.0f, 8.0f);
gl.glVertex3f(0.0f, 10.0f, 8.0f);
gl.glVertex3f(-8.0f, 10.0f, 8.0f);
gl.glVertex3f(-8.0f, 0.0f, 8.0f);
gl.glEnd();
gl.glColor3f(1.0f, 0.0f, 0.0f); // kirmizi kapi
gl.glBegin(GL_QUADS);
gl.glVertex3f(-5.0f, 6.0f, 8.01f);
gl.glVertex3f(-8.0f, 6.0f, 8.01f);
gl.glVertex3f(-8.0f, 0.0f, 8.01f);
gl.glVertex3f(-5.0f, 0.0f, 8.01f);
gl.glEnd();
// cati
gl.glColor3f(0.25f, 0.5f, 0.8f); //
gl.glBegin(GL_TRIANGLES);
gl.glVertex3f(8.0f, 10.0f, 8.0f);
gl.glVertex3f(0.0f, 15.0f, 0.0f);
gl.glVertex3f(-8.0f, 10.0f, 8.0f);
gl.glEnd();
// baca
gl.glColor3f(1.0f, 1.0f, 1.0f);
gl.glBegin(GL_QUADS);
gl.glVertex3f(6.0f, 11.0f, 0.5f);
gl.glVertex3f(6.0f, 15.0f, 0.5f);
gl.glVertex3f(5.0f, 15.0f, 0.5f);
gl.glVertex3f(5.0f, 11.0f, 0.5f);
gl.glVertex3f(6.0f, 11.0f, -0.5f);
gl.glVertex3f(6.0f, 15.0f, -0.5f);
gl.glVertex3f(5.0f, 15.0f, -0.5f);
gl.glVertex3f(5.0f, 11.0f, -0.5f);
gl.glVertex3f(6.0f, 11.0f, 0.5f);
gl.glVertex3f(6.0f, 11.0f, -0.5f);
gl.glVertex3f(6.0f, 15.0f, -0.5f);
gl.glVertex3f(6.0f, 15.0f, 0.5f);
gl.glVertex3f(5.0f, 11.0f, 0.5f);
gl.glVertex3f(5.0f, 11.0f, -0.5f);
gl.glVertex3f(5.0f, 15.0f, -0.5f);
gl.glVertex3f(5.0f, 15.0f, 0.5f);
gl.glEnd();
// tavan
gl.glColor3f(1.0f, 1.0f, 1.0f);
gl.glBegin(GL_QUADS);
gl.glVertex3f(8.0f, 10.0f, 8.0f);
gl.glVertex3f(8.0f, 10.0f, -8.0f);
gl.glVertex3f(-8.0f, 10.0f, -8.0f);
gl.glVertex3f(-8.0f, 10.0f, 8.0f);
gl.glEnd();
// taban
gl.glColor3f(1.0f, 1.0f, 1.0f);
gl.glBegin(GL_QUADS);
gl.glVertex3f(8.0f, 0.0f, 8.0f);
gl.glVertex3f(8.0f, 0.0f, -8.0f);
gl.glVertex3f(-8.0f, 0.0f, -8.0f);
gl.glVertex3f(-8.0f, 0.0f, 8.0f);
gl.glEnd();
// diger duvarlar
gl.glRotatef(90.0f,0.0f,1.0f,0.0f);
gl.glColor3f(0.0f, 1.0f, 0.0f);
gl.glBegin(GL_QUADS);
gl.glVertex3f(8.0f, 0.0f, 8.0f);
gl.glVertex3f(8.0f, 10.0f, 8.0f);
gl.glVertex3f(-8.0f, 10.0f, 8.0f);
gl.glVertex3f(-8.0f, 0.0f, 8.0f);
gl.glEnd();
// cati
gl.glColor3f(0.25f, 0.5f, 0.8f); //
gl.glBegin(GL_TRIANGLES);
gl.glVertex3f(8.0f, 10.0f, 8.0f);
gl.glVertex3f(0.0f, 15.0f, 0.0f);
gl.glVertex3f(-8.0f, 10.0f, 8.0f);
gl.glEnd();
gl.glRotatef(90.0f,0.0f,1.0f,0.0f);
gl.glColor3f(0.0f, 1.0f, 1.0f);
gl.glBegin(GL_QUADS);
gl.glVertex3f(8.0f, 0.0f, 8.0f);
gl.glVertex3f(8.0f, 10.0f, 8.0f);
gl.glVertex3f(-8.0f, 10.0f, 8.0f);
gl.glVertex3f(-8.0f, 0.0f, 8.0f);
gl.glEnd();
// cati
gl.glColor3f(0.25f, 0.5f, 0.8f); //
gl.glBegin(GL_TRIANGLES);
gl.glVertex3f(8.0f, 10.0f, 8.0f);
gl.glVertex3f(0.0f, 15.0f, 0.0f);
gl.glVertex3f(-8.0f, 10.0f, 8.0f);
gl.glEnd();
gl.glRotatef(90.0f,0.0f,1.0f,0.0f);
gl.glColor3f(1.0f, 1.0f, 0.0f);
gl.glBegin(GL_QUADS);
gl.glVertex3f(8.0f, 0.0f, 8.0f);
gl.glVertex3f(8.0f, 10.0f, 8.0f);
gl.glVertex3f(-8.0f, 10.0f, 8.0f);
gl.glVertex3f(-8.0f, 0.0f, 8.0f);
gl.glEnd();
// cati
gl.glColor3f(0.25f, 0.5f, 0.8f); //
gl.glBegin(GL_TRIANGLES);
gl.glVertex3f(8.0f, 10.0f, 8.0f);
gl.glVertex3f(0.0f, 15.0f, 0.0f);
gl.glVertex3f(-8.0f, 10.0f, 8.0f);
gl.glEnd();
aci+=0.5f;
// kod kismi bitis
}
}