LWJGL GL_DEPTH_TEST

26 Eylül 2010

LWJGL üzerinde çalışırken bazı rotate işlemlerinde birşeyler ters gittiğini anladım. Mesela en basidinden 4 duvarı döndürürken bir duvar görünmüyordu. Problemin GL_DEPTH_TEST olduğunu sonradan anladım. Örnek kod üzerinde görüleceği gibi GL_DEPTH_TEST ile bir görüntünün arkasında kalan başka bir görüntü çizilmiyor. Dolayısıyla çakışmalar engelleniyor. Örnek kod üzerinde GL_DEPTH_TEST değerini kaldırarak iki ayrı şekilde çalıştırdığınızda farkı siz de göreceksiniz. Önce koordinatların olduğu sınıf.

package com.farukbozan.graphic;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)
};

}

Şimdi de çalışabilir sınıfımız.

package com.farukbozan.graphic;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 MainView {static JFRUtility jfrUtility = new JFRUtility();
static JFRGraphic jfrGraphic = new JFRGraphic();

private static void init()
{
GL11.glClearColor(0, 0, 0, 0);
GL11.glEnable(GL11.GL_DEPTH_TEST);
}

private static void drawColormaticQuad()
{
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);
}

public static void main(String[] args) {

try
{
Display.setDisplayMode(jfrUtility.selectDisplayMode(Display.getAvailableDisplayModes(), 800, 600, 60));
Display.create();
init();
while(true)
{
GL11.glClear(GL11.GL_COLOR_BUFFER_BIT | GL11.GL_DEPTH_BUFFER_BIT);
jfrGraphic.drawCoordinateSystem();
drawColormaticQuad();
jfrGraphic.rotateAroundAxis(-0.03f, JFRGraphic.JFR_AXIS_Y);
Display.update();
if(Display.isCloseRequested())
{
break;
}
}
}
catch(Exception ex)
{
Sys.alert(“Hata”, ex.getMessage());
}

}

}

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

VN:F [1.9.22_1171]
Rating: 8.4/10 (11 votes cast)
VN:F [1.9.22_1171]
Rating: +6 (from 12 votes)
LWJGL GL_DEPTH_TEST, 8.4 out of 10 based on 11 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