Bilgisayar Grafikleri(2015) – OpenGL Hafta-14

bilgisayar_grafikleri_2015_hafta14_resim1

bilgisayar_grafikleri_2015_hafta14_resim2

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 sabitlerini import et
import static javax.media.opengl.GL2.*; //

import java.io.*; // dosya okuma islemleri icin
import java.util.*;

public class taslak_sinif extends GLCanvas implements GLEventListener, ActionListener {

   private static String BASLIK = "başlık";
   private static int CIZIMALANI_GENISLIK = 320; 
   private static int CIZIMALANI_YUKSEKLIK = 240;
   private static int FPS = 60; 
   
   private GLU glu;

   public taslak_sinif() { //yapilandirici
      this.addGLEventListener(this);
      dosyaoku("dosya.txt");
   }	

   public static void main(String[] args) {
      SwingUtilities.invokeLater(new Runnable() {
         public void run() {
            GLCanvas canvas = new taslak_sinif(); // 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.setLayout(new FlowLayout());	
            frame.getContentPane().add(canvas); // cizim alaninin pencereye eklenmesi
	    JPanel jpnl= new JPanel();	
	JButton jbtn1 = new JButton("Top");
	JButton jbtn2 = new JButton("Maymun");
	jbtn1.addActionListener( (taslak_sinif) canvas);
	jbtn2.addActionListener( (taslak_sinif) canvas);
	jpnl.add(jbtn1);
	jpnl.add(jbtn2);
	frame.add(jpnl);	
		
            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) { }	// kaynaklari serbest birakma 

   // 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
   }


   java.util.List liste_v,liste_f;

   vertex[] v;		

   public void dosyaoku(String dosyaadi)
   {

	liste_v = new ArrayList();
	liste_f = new ArrayList();

	try{
	FileInputStream fs = new FileInputStream(dosyaadi);
	BufferedReader br = new BufferedReader(new InputStreamReader(fs));
	String line;
	while((line=br.readLine())!=null)
	{
		//System.out.println(line);
		String[] veri= line.split(" ");
		if(veri.length==4 && (veri[0].equals("v") || veri[0].equals("f")))
		{
		
			if(veri[0].equals("v"))
			{
				//liste_v.add(new vertex(,,));
				liste_v.add(veri[1]+";"+veri[2]+";"+veri[3]);
			}
			else
			{
				liste_f.add(veri[1]+";"+veri[2]+";"+veri[3]);
			}

		}	
	}	
	
	int v_boyut=liste_v.size(); // liste uzunlugu
	if(v_boyut>0)
	{
		v=new vertex[v_boyut];
		for(int i =0; i<v_boyut; i++)
		{
		String[] parca=((String)liste_v.get(i)).split(";");
		float x = Float.parseFloat(parca[0]);
		float y = Float.parseFloat(parca[1]);
		float z = Float.parseFloat(parca[2]);
		v[i]= new vertex(x,y,z);
		}
		
		
	}		


	}
	catch(Exception ex){ System.out.println("dosya okunamadi!");}



   } 	

   // cizim
   float aci=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(0f, 0.0f, -6.0f); // koordinat 
      gl.glRotatef(aci,1f,1f,1f);

      gl.glColor3f(1.0f, 1.0f, 1.0f);	
      gl.glBegin(GL_TRIANGLES); // ucgen

	int f_boyut=liste_f.size();
	for(int i=0;i<f_boyut;i++)
	{
		gl.glColor3f(0.1f+(i*0.3f), 0.3f+(i*0.1f), 0.2f+(i*0.2f));

		String[] parca = ((String)liste_f.get(i)).split(";");
		for(int j=0;j<parca.length;j++)
		{
			int ff = Integer.parseInt(parca[j]);
			int index=ff-1;
			v[index].vertex3f(gl);
		}
		
	}
	

      gl.glEnd();
	// kod kismi bitis
	aci+=0.5f;
   }

public void actionPerformed(ActionEvent ae)
{

	if(ae.getActionCommand().equals("Top"))
	{
		dosyaoku("dosya2.txt");
	}
	else
	{
		dosyaoku("dosya.txt");
	}	
}


}

class vertex{
	public float x=0f,y=0f,z=0f;
	vertex(float xx, float yy, float zz)
	{
		x=xx;
		y=yy;
		z=zz;
	}
	public void vertex3f(GL2 gl)
	{
		gl.glVertex3f(x,y,z);	
	}
}

Bilgisayar Grafikleri 2015 Hafta-14 Eklentiler

Share