All pastes #16410 Raw Edit

Unnamed

public text v1 · immutable
#16410 ·published 2005-06-29 21:23 UTC
rendered paste body
	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();
			}
		}