接下来开始创建第一个窗口。
先看效果:
其实也没啥好看的,就是一个黑乎乎的窗口。
主要函数包括三个:
createDispaly();
updateDisplay();
closeDisplay();
很简单是不是,其中LWJGL库帮我们封装了大部分的窗口创建功能,我们只需要调用相应的窗口创建函数即可。
新建DisplayManager类:
package renderEngine;
import org.lwjgl.LWJGLException;
import org.lwjgl.opengl.ContextAttribs;
import org.lwjgl.opengl.Display;
import org.lwjgl.opengl.DisplayMode;
import org.lwjgl.opengl.GL11;
import org.lwjgl.opengl.PixelFormat;
public class DisplayManager {
public static final int WIDTH = 1280;
public static final int HEIGHT = 720;
public static final int FPS_CAP = 120;
public static void createDisplay() {
ContextAttribs attribs = new ContextAttribs(3, 2);
attribs.withProfileCompatibility(true);
attribs.withProfileCore(true);
try {
Display.setDisplayMode(new DisplayMode(WIDTH, HEIGHT));
Display.create(new PixelFormat(), attribs);
Display.setTitle("MyGameEngine");
} catch (LWJGLException e) {
e.printStackTrace();
}
GL11.glViewport(0, 0, WIDTH, HEIGHT);
}
public static void updateDisplay() {
Display.sync(FPS_CAP); // 帧率同步最大值:120
Display.update();
}
public static void closeDisplay() {
Display.destroy();
}
}
添加测试函数:
package engineTester;
import org.lwjgl.opengl.Display;
import renderEngine.DisplayManager;
public class MainGameLoop {
public static void main(String[] args) {
DisplayManager.createDisplay();
while(!Display.isCloseRequested()){
// game logic
// render
DisplayManager.updateDisplay();
}
DisplayManager.closeDisplay();
}
}
测试函数中也是主要做了三件事:
-
创建窗口
-
更新窗口(包括:处理游戏逻辑,渲染,检测窗口关闭消息)
-
关闭窗口
ok,该节结束。
下篇预告:VAO和VBO
欢迎大家关注我的公众号【OpenGL编程】,定期分享OpenGL相关的3D编程教程、算法、小项目。欢迎大家一起交流。