
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