用JOGL做简单的3D场景
制作3D场景先确定xyz坐标系,本文用的是右手原则的坐标系,如图
然后确定好自己要画的物体在该坐标系中对应的坐标就可以开始了;本文画的是非常简单的房子。
实现
继承GLEventListener,实现它的4个接口
首先画一个地板,在display(GLAutoDrawable drawable)
中用4个glVertex3f()来构建一个平面,参数分别对应x, y, z
//drawfloor
gl.glBegin(GL2.GL_QUADS);
gl.glColor3f(0.35f, 0.16f, 0.14f);
gl.glVertex3f(-100.0f, -1.0f, -100.0f);
gl.glVertex3f(-100.0f, -1.0f, 100.0f);
gl.glVertex3f(100.0f, -1.0f, 100.0f);
gl.glVertex3f(100.0f, -1.0f, -100.0f);
注意:因为OpenGL是C++的库,所以用JAVA写的时候需要导入的是JOGL,而且需要加上GL2 gl = drawable.getGL().getGL2();
才能使用OpenGL的各个方法
然后用相同的方法画房子主体和屋顶,因为需要改变的只有各个点的坐标,所以就只放实现房顶正面的代码(和画地板是一样的)
画图的方法有很多,网上都能找到,注意:在每次画完一个图形之后,如果需要用glTranslatef()移动或者glBegin()画一个新的图形,需要添加gl.glLoadIdentity();
//roof front
gl.glColor3f(1.0f, 0.0f, 0.0f); //
gl.glVertex3f( 2.0f