所以我过去几天一直在研究体素游戏引擎,并且遇到了我的立方体模型的一些问题。
以下是正在发生的事情的截图:(已删除,因此我可以将照片链接进一步向下发布)
我所有的剔除似乎都是倒置的。我经历了堆栈溢出寻找答案,但我能找到的只与对象的渲染顺序有关。
我尝试更改我脸部的渲染顺序,但这似乎对剔除没有任何影响。
这是我的代码:
package com.musicalcreeper01.renderer.objects;
import static org.lwjgl.opengl.GL11.*;
public class ModelCube extends Object{
float BLOCK_SIZE = 1;
boolean RenderTop = true;
boolean RenderBottom = true;
boolean RenderBack = true;
boolean RenderFront = true;
boolean RenderLeft = false;
boolean RenderRight = true;
@Override
public void render (){
glPushMatrix();
// set the color of the quad (R,G,B,A)
glColor3f(0.5f,0.5f,1.0f);
glTranslatef(x, y, z);
// draw quad
glBegin(GL_QUADS);
if(texture != null){
texture.bind();
}
if(RenderBack){
//Back
glTexCoord3f(BLOCK_SIZE, 0, 0);
glVertex3f(BLOCK_SIZE, 0, 0);
glTexCoord3f(0, 0, 0);
glVertex3f(0, 0, 0);
glTexCoord3f(0, BLOCK_SIZE, 0);
glVertex3f(0, BLOCK_SIZE, 0);
glTexCoord3f(BLOCK_SIZE, BLOCK_SIZE, 0);
glVertex3f(BLOCK_SIZE, BLOCK_SIZE, 0);
}
if(RenderFront){
//Front
glTexCoord3f(0, 0, BLOCK_SIZE);
glVertex3f(0, 0, BLOCK_SIZE);
glTexCoord3f(0, BLOCK_SIZE, BLOCK_SIZE);
glVertex3f(0, BLOCK_SIZE, BLOCK_SIZE);
glTexCoord3f(BLOCK_SIZE, BLOCK_SIZE, BLOCK_SIZE);
glVertex3f(BLOCK_SIZE, BLOCK_SIZE, BLOCK_SIZE);
glTexCoord3f(BLOCK_SIZE, 0, BLOCK_SIZE);
glVertex3f(BLOCK_SIZE, 0, BLOCK_SIZE);
}
if(RenderRight){
//Right
glTexCoord2f(0,BLOCK_SIZE);
glVertex3f(BLOCK_SIZE,0,BLOCK_SIZE);
glTexCoord2f(BLOCK_SIZE,BLOCK_SIZE);
glVertex3f(BLOCK_SIZE,BLOCK_SIZE,BLOCK_SIZE);
glTexCoord2f(0,BLOCK_SIZE);
glVertex3f(BLOCK_SIZE,BLOCK_SIZE,0);
glTexCoord2f(0,0);
glVertex3f(BLOCK_SIZE,0,0);
}
if(RenderBottom){
//Bottom
glTexCoord2f(0,BLOCK_SIZE);
glVertex3f(BLOCK_SIZE,BLOCK_SIZE,0);
glTexCoord2f(0,0);
glVertex3f(0,BLOCK_SIZE,0);
glTexCoord2f(0,BLOCK_SIZE);
glVertex3f(0,BLOCK_SIZE,BLOCK_SIZE);
glTexCoord2f(BLOCK_SIZE,BLOCK_SIZE);
glVertex3f(BLOCK_SIZE,BLOCK_SIZE,BLOCK_SIZE);
}
if(RenderLeft){
//Left
glTexCoord2f(0,BLOCK_SIZE);
glVertex3f(0,0,BLOCK_SIZE);
glTexCoord2f(0,0);
glVertex3f(0,0,0);
glTexCoord2f(0,BLOCK_SIZE);
glVertex3f(0,BLOCK_SIZE,0);
glTexCoord2f(BLOCK_SIZE,BLOCK_SIZE);
glVertex3f(0,BLOCK_SIZE,BLOCK_SIZE);
}
if(RenderTop){
//Top
glTexCoord2f(0,BLOCK_SIZE);
glVertex3f(BLOCK_SIZE,0,0);
glTexCoord2f(0,0);
glVertex3f(0,0,0);
glTexCoord2f(0,BLOCK_SIZE);
glVertex3f(0,0,BLOCK_SIZE);
glTexCoord2f(BLOCK_SIZE,BLOCK_SIZE);
glVertex3f(BLOCK_SIZE,0,BLOCK_SIZE);
}
glEnd();
glPopMatrix();
}
}
我唯一能想到的就是它,我正在使用四边形而不是三角形。我虽然四边形有四个角,但是每边绘制2个三角形会更容易,更有效。
如果有人愿意给我一些关于优化我的模型的提示,我会非常感激:)
我对openGL相当陌生,我在一两年后做了一些工作,当时我使用了三角形,而且效果很好。所以我猜测四边形是为什么它不起作用,但这对我来说似乎不合逻辑。
编辑:我认为它与法线有关,但我很难找到如何使用普通函数的答案。 编辑2:我刚刚改为使用gl列表渲染我的对象,正如Iggy所建议的那样(感谢;)),它似乎修复了我得到的一些渲染问题。现在,我的一排立方体从外面看起来像这样:http://i.stack.imgur.com/MYLiO.png而这来自内部:http://i.stack.imgur.com/Ckb9i.png编辑3:已更新至最新版本。