原文:http://wiki.lwjgl.org/wiki/LWJGL_Basics_3_%28The_Quad%29
Introduction 介绍
本教程教你怎样在LWJGL里使用OpenGL,但是并不教你OpenGL。LWJGL里的OpenGL API和C语言版本完美地一一对应。这样就不用去专门找LWJGL版OpenGL网上教程了,找个其他的OpenGL教程也是可以通用的。
Structure 构造
所有OpenGL方法都在 org.lwjgl.opengl.* 包里,并且有着相应的包名,比如:GL11,GL12,GL13,GL20.ARBVertexShader,ARBFragmentShader等等。
所有OpenGL1.1的方法都会在类GL11里找到,OpenGL1.2的方法在GL12类里可以找到,以此类推。这样可以很方便地找到需要的OpenGL版本或扩展。
Drawing a Quad with OpenGL 用OpenGL画方形
只需要改改Display教程里的代码,就可以画出方形。2D视图足以画出方形了,需要设置一个正交矩阵,尺寸是800x600,修剪范围是1到-1。只需要在循环之外设置一次就可以。
GL11.glMatrixMode(GL11.GL_PROJECTION);
GL11.glLoadIdentity();
GL11.glOrtho(0, 800, 0, 600, 1, -1);
GL11.glMatrixMode(GL11.GL_MODELVIEW);
下面的代码需要在主循环里每帧调用,先清屏,再设置方形颜色,最后画方形的顶点。
// Clear the screen and depth buffer
GL11.glClear(GL11.GL_COLOR_BUFFER_BIT | GL11.GL_DEPTH_BUFFER_BIT);
// set the color of the quad (R,G,B,A)
GL11.glColor3f(0.5f,0.5f,1.0f);
// draw quad
GL11.glBegin(GL11.GL_QUADS);
GL11.glVertex2f(100,100);
GL11.glVertex2f(100+200,100);
GL11.glVertex2f(100+200,100+200);
GL11.glVertex2f(100,100+200);
GL11.glEnd();
Example 例子
以下是完整的例子代码:
import org.lwjgl.LWJGLException;
import org.lwjgl.opengl.Display;
import org.lwjgl.opengl.DisplayMode;
import org.lwjgl.opengl.GL11;
public class QuadExample {
public void start() {
try {
Display.setDisplayMode(new DisplayMode(800,600));
Display.create();
} catch (LWJGLException e) {
e.printStackTrace();
System.exit(0);
}
// init OpenGL
GL11.glMatrixMode(GL11.GL_PROJECTION);
GL11.glLoadIdentity();
GL11.glOrtho(0, 800, 0, 600, 1, -1);
GL11.glMatrixMode(GL11.GL_MODELVIEW);
while (!Display.isCloseRequested()) {
// Clear the screen and depth buffer
GL11.glClear(GL11.GL_COLOR_BUFFER_BIT | GL11.GL_DEPTH_BUFFER_BIT);
// set the color of the quad (R,G,B,A)
GL11.glColor3f(0.5f,0.5f,1.0f);
// draw quad
GL11.glBegin(GL11.GL_QUADS);
GL11.glVertex2f(100,100);
GL11.glVertex2f(100+200,100);
GL11.glVertex2f(100+200,100+200);
GL11.glVertex2f(100,100+200);
GL11.glEnd();
Display.update();
}
Display.destroy();
}
public static void main(String[] argv) {
QuadExample quadExample = new QuadExample();
quadExample.start();
}
}
这样就可以了。LWJGL Javadoc里将列出LWJGL里支持的全部类和方法,可以用来参考寻找相应的OpenGL函数。
Static Import
所有要使用的OpenGL方法都是静态方法,也就是说每次写方法前都要写一遍类名。根据不同人的编码习惯,你可能会觉得每次都写方法名太麻烦。Java的静态引入功能可以解决这个麻烦。
import static org.lwjgl.opengl.GL11.*;
上面一行导入代码将GL11所有方法导入,这样就不用再写类名了。代码可以像下面这样写:
// clear the screen and depth buffer
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
// set the color of the quad (R,G,B,A)
glColor3f(0.5f,0.5f,1.0f);
// draw quad
glBegin(GL_QUADS);
glVertex2f(100,100);
glVertex2f(100+200,100);
glVertex2f(100+200,100+200);
glVertex2f(100,100+200);
glEnd();