LWJGL Random Rotate

06 Eylül 2010

Bu yazıda yine bir rotate örneği üzerinde duracağım; fakar bu örnekte bir kaç nokta önemli olduğu için yeni bir rotate örneği yazmaya ihtiyaç duydum. Örneğimizde kutu olarak da düşünebileceğimiz bir dikdörtgenler prizmasını random bir nokta etrafında rotate edeceğiz. Şimdi kodlara bakalım.

package com.farukbozan.grafik;import com.farukbozan.jfr.opengl.JFRPoint3D;public class Coordinates {

public static final JFRPoint3D[] wall1 = new JFRPoint3D[]
{
new JFRPoint3D(-0.5, 0, 0.5),
new JFRPoint3D(0.5, 0, 0.5),
new JFRPoint3D(0.5, 0.5, 0.5),
new JFRPoint3D(-0.5, 0.5, 0.5)
};

public static final JFRPoint3D[] wall2 = new JFRPoint3D[]
{
new JFRPoint3D(0.5, 0, 0.5),
new JFRPoint3D(0.5, 0, -0.5),
new JFRPoint3D(0.5, 0.5, -0.5),
new JFRPoint3D(0.5, 0.5, 0.5)
};

public static final JFRPoint3D[] wall3 = new JFRPoint3D[]
{
new JFRPoint3D(0.5, 0, -0.5),
new JFRPoint3D(-0.5, 0, -0.5),
new JFRPoint3D(-0.5, 0.5, -0.5),
new JFRPoint3D(0.5, 0.5, -0.5)
};

public static final JFRPoint3D[] wall4 = new JFRPoint3D[]
{
new JFRPoint3D(-0.5, 0, -0.5),
new JFRPoint3D(-0.5, 0, 0.5),
new JFRPoint3D(-0.5, 0.5, 0.5),
new JFRPoint3D(-0.5, 0.5, -0.5)
};

public static final JFRPoint3D[] wall5 = new JFRPoint3D[]
{
new JFRPoint3D(-0.5, 0.5, 0.5),
new JFRPoint3D(0.5, 0.5, 0.5),
new JFRPoint3D(0.5, 0.5, -0.5),
new JFRPoint3D(-0.5, 0.5, -0.5)
};

public static final JFRPoint3D[] wall6 = new JFRPoint3D[]
{
new JFRPoint3D(-0.5, 0, 0.5),
new JFRPoint3D(0.5, 0, 0.5),
new JFRPoint3D(0.5, 0, -0.5),
new JFRPoint3D(-0.5, 0, -0.5)
};

Bu sınıfta sadece koordinatlar bulunmakta. Altı tane duvarın köşe koordinatları bu sınıfta işlendi. Şimdi de main sınıfına bakalım.

package com.farukbozan.grafik;import com.farukbozan.jfr.opengl.JFRGraphic;
import com.farukbozan.jfr.opengl.JFRUtility;
import org.lwjgl.Sys;
import org.lwjgl.opengl.Display;
import org.lwjgl.opengl.GL11;public class MainGrafik {private static void init()
{
GL11.glClearColor(0, 0, 0, 0);
GL11.glMatrixMode(GL11.GL_PROJECTION);
GL11.glLoadIdentity();
GL11.glOrtho(-1f, 1f, -1f, 1f, 1f, -1f);
GL11.glMatrixMode(GL11.GL_MODELVIEW);
GL11.glLoadIdentity();
GL11.glEnable(GL11.GL_DEPTH_TEST);
}

public static void main(String[] args) {

try
{
float rotateValue = 0.5f;
JFRUtility jfrUtility = new JFRUtility();
JFRGraphic jfrGraphic = new JFRGraphic();
Display.setDisplayMode(jfrUtility.selectDisplayMode(Display.getAvailableDisplayModes(), 1280, 800, 60));
Display.setFullscreen(false);
Display.create();
init();
while(true)
{
GL11.glClear(GL11.GL_COLOR_BUFFER_BIT | GL11.GL_DEPTH_BUFFER_BIT);
GL11.glColor3d(1, 1, 1);
jfrGraphic.drawCoordinateSystem();
GL11.glColor3d(1, 0, 0);
jfrGraphic.drawShape(GL11.GL_POLYGON, Coordinates.wall1);
GL11.glColor3d(0, 1, 0);
jfrGraphic.drawShape(GL11.GL_POLYGON, Coordinates.wall2);
GL11.glColor3d(0, 0, 1);
jfrGraphic.drawShape(GL11.GL_POLYGON, Coordinates.wall3);
GL11.glColor3d(1, 1, 1);
jfrGraphic.drawShape(GL11.GL_POLYGON, Coordinates.wall4);
GL11.glColor3d(1, 0.5, 1);
jfrGraphic.drawShape(GL11.GL_POLYGON, Coordinates.wall5);
GL11.glColor3d(1, 1, 0.5);
jfrGraphic.drawShape(GL11.GL_POLYGON, Coordinates.wall6);
GL11.glRotatef(rotateValue, (float)Math.random(), (float)Math.random(), (float)Math.random());
Display.update();
if(Display.isCloseRequested())
{
break;
}
}
}
catch(Exception ex)
{
Sys.alert(“Hata”, ex.getMessage());
}

}

}

Main sınıfında ilk dikkat çekici kısım ayrı bir init metodunun olması. Main bloğu içerisindeki kalabalığı engellemek ve aynı zamanda rotate işlemi için başlangıç koşullarını oluşturmak için bu kod bloğunu oluşturdum.  Daha sonra main bloğu içerisinde duvarları farklı renklerle çizdikten sonra rastgele noktalar etrafında rotate işlemi uyguluyoruz. Bazı ekran görüntülerine bakalım.

random_rotate_1

random_rotate_2

random_rotate_3

Bol Java’ lı günler dileğiyle…

VN:F [1.9.22_1171]
Rating: 8.7/10 (7 votes cast)
VN:F [1.9.22_1171]
Rating: +5 (from 5 votes)
LWJGL Random Rotate, 8.7 out of 10 based on 7 ratings
Paylas
  Facebook  Twitter  Digg  Delicious

Yorum Yapılmamış

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir