出于某种原因,当我尝试运行此代码时,我得到的只是黑屏。我怎样才能真正让它显示我想要显示的内容?
我正在使用Eclipse,并且已将lwjgl.jar和lwjgl_utils.jar添加到构建路径中。
import org.lwjgl.opengl.Display;
import org.lwjgl.opengl.DisplayMode;
import org.lwjgl.opengl.GL11;
import org.lwjgl.util.glu.GLU;
import org.lwjgl.input.Keyboard;
public class game {
private boolean done = false;
private boolean fullscreen = false;
private final String windowTitle = "Lesson 1";
private boolean f1 = false;
private DisplayMode displayMode;
/**
* Everything starts and ends here. Takes 1 optional command line argument.
* If fullscreen is specified on the command line then fullscreen is used,
* otherwise windowed mode will be used.
* @param args command line arguments
*/
public static void main(String args[]) {
boolean fullscreen = false;
if (args.length > 0) {
if (args[0].equalsIgnoreCase("fullscreen")) {
fullscreen = true;
}
}
game gamez = new game();
gamez.run(fullscreen);
}
/**
* Launch point
* @param fullscreen boolean value, set to true to run in fullscreen mode
*/
public void run(boolean fullscreen) {
this.fullscreen = fullscreen;
try {
init();
while (!done) {
mainloop();
render();
Display.update();
}
cleanup();
} catch (Exception e) {
e.printStackTrace();
System.exit(0);
}
}
/**
* All updating is done here. Key and mouse polling as well as window closing and
* custom updates, such as AI.
*/
private void mainloop() {
if (Keyboard.isKeyDown(Keyboard.KEY_ESCAPE))
done = true;
if (Display.isCloseRequested())
done = true;
if (Keyboard.isKeyDown(Keyboard.KEY_F1)) {
f1 = true;
switchmode();
}
if (!Keyboard.isKeyDown(Keyboard.KEY_F1))
f1 = false;
}
private void switchmode() {
fullscreen = !fullscreen;
try {
Display.setFullscreen(fullscreen);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* For rendering all objects to the screen
* @return boolean for success or not
*/
private void render() {
GL11.glClear(GL11.GL_COLOR_BUFFER_BIT | GL11.GL_DEPTH_BUFFER_BIT);
GL11.glLoadIdentity();
GL11.glTranslatef(-1.5f, 0.0f, -6.0f);
GL11.glBegin(GL11.GL_TRIANGLES);
GL11.glVertex3f(0.0f, 1.0f, 0.0f);
GL11.glVertex3f(-1.0f, -1.0f, 0.0f);
GL11.glVertex3f(1.0f, -1.0f, 0.0f);
GL11.glEnd();
GL11.glTranslatef(3.0f, 0.0f, 0.0f);
GL11.glBegin(GL11.GL_QUADS);
GL11.glVertex3f(-1.0f, 1.0f, 0.0f);
GL11.glVertex3f(1.0f, 1.0f, 0.0f);
GL11.glVertex3f(1.0f, -1.0f, 0.0f);
GL11.glVertex3f(-1.0f, -1.0f, 0.0f);
GL11.glEnd();
}
/**
* Create a window depending on whether fullscreen is selected
* @throws Exception Throws the window.create() exception up the stack.
*/
private void createWindow() throws Exception {
Display.setFullscreen(fullscreen);
DisplayMode d[] = Display.getAvailableDisplayModes();
for (int i = 0; i < d.length; i++) {
if (d[i].getWidth() == 640 && d[i].getHeight() == 480 && d[i].getBitsPerPixel() == 32) {
displayMode = d[i];
break;
}
}
Display.setDisplayMode(displayMode);
Display.setTitle(windowTitle);
Display.create();
}
/**
* Do all initilization code here. Including Keyboard and OpenGL
* @throws Exception Passes any exceptions up to the main loop to be handled
*/
private void init() throws Exception {
createWindow();
initGL();
}
/**
* Initialize OpenGL
*
*/
private void initGL() {
GL11.glEnable(GL11.GL_TEXTURE_2D);
GL11.glShadeModel(GL11.GL_SMOOTH);
GL11.glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
GL11.glClearDepth(1.0);
GL11.glEnable(GL11.GL_DEPTH_TEST);
GL11.glDepthFunc(GL11.GL_EQUAL);
GL11.glMatrixMode(GL11.GL_PROJECTION);
GL11.glLoadIdentity();
// calculate the apsect ratio of the window
GLU.gluPerspective(45.0f,
(float)displayMode.getWidth() / (float)displayMode.getHeight(),
0.1f,
100.0f);
GL11.glHint(GL11.GL_PERSPECTIVE_CORRECTION_HINT, GL11.GL_NICEST);
}
/**
* Cleanup all the resources
*
*/
private void cleanup() {
Display.destroy();
}
}
答案 0 :(得分:1)
在渲染中,这个glColor3f(1,1,1)看起来像你的三角形是黑色的。