public void setData (double[][][] data) { this.data = data; normals = new Vector[data.length][data[0].length][2]; for (int j = 0; j < data.length - 1; j++) { for (int i = 0; i < data[j].length - 1; i++) { Vector uu = Vector.sub( new Vector(data[j][i][0], data[j][i][1], data[j][i][2]), new Vector(data[j+1][i][0], data[j+1][i][1], data[j+1][i][2]), null); Vector vv = Vector.sub( new Vector(data[j+1][i+1][0], data[j+1][i+1][1], data[j+1][i+1][2]), new Vector(data[j+1][i][0], data[j+1][i][1], data[j+1][i][2]), null); normals[j][i][0] = Vector.crossProduct(uu, vv, null); Vector.norm(normals[j][i][0], normals[j][i][0]); uu = Vector.sub( new Vector(data[j+1][i+1][0], data[j+1][i+1][1], data[j+1][i+1][2]), new Vector(data[j][i+1][0], data[j][i+1][1], data[j][i+1][2]), null); vv = Vector.sub( new Vector(data[j][i][0], data[j][i][1], data[j][i][2]), new Vector(data[j][i+1][0], data[j][i+1][1], data[j][i+1][2]), null); normals[j][i][1] = Vector.crossProduct(uu, vv, null); Vector.norm(normals[j][i][1], normals[j][i][1]); } } } public double[][][] getData () { return this.data; } void draw(GLDrawable drawable) { GL gl = drawable.getGL(); GLU glu = drawable.getGLU(); if (getStyle().drawsFill) { GLTools.setColor(gl, getStyle().getFillColor()); gl.glEnable(GL.GL_LIGHTING); gl.glMaterialfv( GL.GL_FRONT_AND_BACK, GL.GL_AMBIENT_AND_DIFFUSE, getStyle().getFillColor().getComponents(null)); for (int j = 0; j < data.length - 1; j++) { gl.glBegin(GL.GL_TRIANGLES); for (int i = 0; i < data[j].length - 1; i++) { gl.glNormal3d(normals[j][i][0].x, normals[j][i][0].y, normals[j][i][0].z); gl.glVertex3dv(data[j][i]); gl.glVertex3dv(data[j+1][i]); gl.glVertex3dv(data[j+1][i+1]); gl.glNormal3d(normals[j][i][1].x, normals[j][i][1].y, normals[j][i][1].z); gl.glVertex3dv(data[j+1][i+1]); gl.glVertex3dv(data[j][i+1]); gl.glVertex3dv(data[j][i]); } gl.glEnd(); } }