Я пытаюсь научиться писать код, чтобы нарисовать куб и повернуть его. Я решил нарисовать их, используя треугольники, и после того, как я нарисовал три стороны куба, я быстро понял, что есть проблема, когда белая сторона куба будет перекрывать красные и синие лица, а синий будет перекрывать красное лицо.Проблемы с рисованием куба в LWJGL
Я заметил, что: - белое лицо обращается в последний раз - синее лицо обращается перед белым лицом - красное лицо обращается перед синим лицом
Я подозреваю, что это может быть причиной проблема, так как белый нарисован поверх синего и синего на красном.
Есть ли я на правильном пути? Может ли кто-нибудь помочь мне найти решение этой проблемы?
import org.lwjgl.LWJGLException;
import org.lwjgl.opengl.Display;
import org.lwjgl.opengl.DisplayMode;
import static org.lwjgl.opengl.GL11.*;
public class RubiksCube {
int angle = 0;
public void start() {
final int width = 800;
final int height = 600;
try {
Display.setDisplayMode(new DisplayMode(width, height));
Display.create();
} catch (LWJGLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.exit(0);
}
// init OpenGL here
while (!Display.isCloseRequested()) {
render();
angle = (angle+1)%360;
Display.update();
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
Display.destroy();
}
public void render(){
float edgeLength= 20.0f;
edgeLength /= 2.0f;
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0.0f, Display.getDisplayMode().getWidth(), Display.getDisplayMode().getHeight(), 0.0f, -50.0f, 50.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //clear screen
glPushMatrix();
glTranslatef((Display.getWidth()/2), (Display.getHeight()/2), 0.0f);
glRotatef(angle, 1.0f, 1.0f, 1.0f);
glBegin(GL_TRIANGLES);
//Back
glColor3f(1.0f, 0.0f, 0.0f);
glVertex3f(-edgeLength, edgeLength, edgeLength);
glVertex3f(-edgeLength, -edgeLength, edgeLength);
glVertex3f(edgeLength, -edgeLength, edgeLength);
glVertex3f(-edgeLength, edgeLength, edgeLength);
glVertex3f(edgeLength, edgeLength, edgeLength);
glVertex3f(edgeLength, -edgeLength, edgeLength);
//Front
glColor3f(0.0f, 0.0f, 1.0f);
glVertex3f(-edgeLength, edgeLength, -edgeLength);
glVertex3f(-edgeLength, -edgeLength, -edgeLength);
glVertex3f(edgeLength, -edgeLength, -edgeLength);
glVertex3f(-edgeLength, edgeLength, -edgeLength);
glVertex3f(edgeLength, edgeLength, -edgeLength);
glVertex3f(edgeLength, -edgeLength, -edgeLength);
// Right
glColor3f(1.0f, 1.0f, 1.0f);
glVertex3f(edgeLength, edgeLength, -edgeLength);
glVertex3f(edgeLength, -edgeLength, -edgeLength);
glVertex3f(edgeLength, -edgeLength, edgeLength);
glVertex3f(edgeLength, edgeLength, -edgeLength);
glVertex3f(edgeLength, edgeLength, edgeLength);
glVertex3f(edgeLength, -edgeLength, edgeLength);
glEnd();
glPopMatrix();
}
}