Bilgisayar Grafikleri(2015) – OpenGL Hafta-14
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); } }