gpt4 book ai didi

java - LWJGL glTranslatef 不渲染深度

转载 作者:行者123 更新时间:2023-12-01 12:30:56 26 4
gpt4 key购买 nike

我正在 3D 空间中渲染一个正方形。当我使用 glTranslatef() 方法并添加 z 坐标时,正方形不再可见。当z坐标高于1或低于-1时,不再显示正方形(我通过将z坐标设置为1来测试它。如果并且它不显示)。

Main.java

import java.util.logging.Level;
import java.util.logging.Logger;

import org.lwjgl.LWJGLException;
import org.lwjgl.opengl.Display;
import org.lwjgl.opengl.DisplayMode;

import static org.lwjgl.opengl.GL11.*;

public class Main {

/**
* @param args
*/
public static void main(String[] args) {
initDisplay();
gameLoop();
cleanUp();
}

public static void initDisplay(){
try {
Display.setDisplayMode(new DisplayMode(800, 600));
Display.setTitle("AWESOMENESS!");
Display.create();
} catch (LWJGLException e) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, e);
}
}

public static void gameLoop(){
Camera cam = new Camera(70, (float)Display.getWidth() / (float)Display.getHeight(), 0.3f, 1000);


while(!Display.isCloseRequested()){

glClear(GL_COLOR_BUFFER_BIT);
glLoadIdentity();
cam.useView();

glPushMatrix();{
glColor3f(1.0f, 0.5f, 0f);
//This is the problematic line. When the 3rd param goes above 1 or below -1 the
//square disappers.
glTranslatef(0,0,-10);
glBegin(GL_QUADS);{
glVertex3f(0,0,0);
glVertex3f(0,1,0);
glVertex3f(1,1,0);
glVertex3f(1,0,0);
}
glEnd();
}
glPopMatrix();

Display.update();
}
}

public static void cleanUp(){
Display.destroy();
}

}

Camera.java

import static org.lwjgl.opengl.GL11.*;
import static org.lwjgl.util.glu.GLU.*;

public class Camera {

//Position
private float x;
private float y;
private float z;
//Rotation
private float rx;
private float ry;
private float rz;

private float fov;
private float aspect;
private float near;
private float far;

public Camera(float fov, float aspect, float near, float far) {
x = 0;
y = 0;
z = 0;
rx = 0;
ry = 0;
rz = 0;
this.fov = fov;
this.aspect = aspect;
this.near = near;
this.far = far;
initProjection();
}

private void initProjection(){
glMatrixMode(GL_PROJECTION_MATRIX);
glLoadIdentity();
gluPerspective(fov, aspect, near, far);
glMatrixMode(GL_MODELVIEW);
}

public void useView(){
glRotatef(rx, 1, 0, 0);
glRotatef(ry, 0, 1, 0);
glRotatef(rz, 0, 0, 1);
glTranslatef(x, y, z);
}

public float getX() {
return x;
}

public float getY() {
return y;
}

public float getZ() {
return z;
}

public float getRx() {
return rx;
}

public float getRy() {
return ry;
}

public float getRz() {
return rz;
}

public float getFov() {
return fov;
}

public float getAspect() {
return aspect;
}

public float getNear() {
return near;
}

public float getFar() {
return far;
}

public void setX(float x) {
this.x = x;
}

public void setY(float y) {
this.y = y;
}

public void setZ(float z) {
this.z = z;
}

public void setRx(float rx) {
this.rx = rx;
}

public void setRy(float ry) {
this.ry = ry;
}

public void setRz(float rz) {
this.rz = rz;
}

public void setFov(float fov) {
this.fov = fov;
}

public void setAspect(float aspect) {
this.aspect = aspect;
}

public void setNear(float near) {
this.near = near;
}

public void setFar(float far) {
this.far = far;
}

}

最佳答案

glMatrixMode(GL_PROJECTION_MATRIX);

应该是:

 glMatrixMode(GL_PROJECTION);

GL_PROJECTION_MATRIX 不渲染第三维。没有关于此事的进一步文档。

关于java - LWJGL glTranslatef 不渲染深度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25926409/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com