docs: public void processInternal( double[] input, DMatrix leftPoint, DMatrix rightView) {
  		int numRows = getNumOfOutputsM();
  		int numPointParam = structure.points.length*lengthPoint;
  		int numViewParam = numParameters-numPointParam; // view + camera
  
  		((ReshapeMatrix)leftPoint).reshape(numRows,numPointParam);
  		((ReshapeMatrix)rightView).reshape(numRows,numViewParam);
  		leftPoint.zero();
  		rightView.zero();
  
  		int observationIndex = 0;
  		// first decode the transformation
  		for( int viewIndex = 0; viewIndex < structure.views.length; viewIndex++ ) {
  			SceneStructureProjective.View view = structure.views[viewIndex];
  
  			if( !view.known ) {
  				int paramIndex = viewParameterIndexes[viewIndex]+indexFirstView;
  				for (int i = 0; i < 12; i++) {
  					worldToView.data[i] = input[paramIndex++];
  				}
  			} else {
  				worldToView.set(view.worldToView);
  			}
  
  			SceneObservations.View obsView = observations.views[viewIndex];
  
  			for (int i = 0; i < obsView.size(); i++) {
  				int featureIndex = obsView.point.get(i);
  				int columnOfPointInJac = featureIndex*lengthPoint;
  
  				worldPt.x = input[columnOfPointInJac];
  				worldPt.y = input[columnOfPointInJac+1];
  				worldPt.z = input[columnOfPointInJac+2];
  				if( structure.isHomogenous() ) {
  					worldPt.w = input[columnOfPointInJac+3];
  				}
  
  				PerspectiveOps.renderPixel(worldToView,worldPt,cameraPt);
  
  
  				if (view.known) {
  					if( structure.isHomogenous())
  						partialCameraModelH(worldPt.x, worldPt.y, worldPt.z, worldPt.w,
  								worldToView, pointGradX, pointGradY, null, null);
  					else
  						partialCameraModel(worldPt.x, worldPt.y, worldPt.z,
  								worldToView, pointGradX, pointGradY, null, null);
  				} else {
  					if( structure.isHomogenous())
  						partialCameraModelH(worldPt.x, worldPt.y, worldPt.z, worldPt.w,
  								worldToView, pointGradX, pointGradY, camGradX, camGradY);
  					else
  						partialCameraModel(worldPt.x, worldPt.y, worldPt.z,
  								worldToView, pointGradX, pointGradY, camGradX, camGradY);
  				}
  
  				jacRowX = observationIndex*2;
  				jacRowY = jacRowX+1;
  
  				//============ Partial of worldPt
  				// partial of x' = (1/z)*P*X with respect to X is a 2 by 3|4 matrix
  				addToJacobian(leftPoint,columnOfPointInJac,lengthPoint,pointGradX,pointGradY);
  
  				if( !view.known ) {
  					// partial of x' = (1/z)*P*X with respect to P is a 2 by 12 matrix
  					int col = viewParameterIndexes[viewIndex];
  					addToJacobian(rightView,col,12,camGradX,camGradY);
  				}
  
  				observationIndex++;
  			}
  		}
  
  //		left.print();
  //		right.print();
  //		System.out.println("Asdads");
  	}