That code is confusing...the ws-vector is calculated, but never used...if you remove that part, the only thing that isn't needed anymore when using the ...WS-method instead, is this:
Matrix mat = theCamera.getBack();
mat = mat.invert3x3();
norm.matMul(mat);
You can simply remove this. So the result should be:
private void moveByMouse() {//WALKBYMOUSE; CALLED ONCE TO SETUP THE WALK DIRECTION
mouseWalk = true;
SimpleVector ray = Interact2D.reproject2D3DWS(theCamera, buffer, mouseX, mouseY);
currentRoom.plane.setVisibility(true);
if (ray != null) {
SimpleVector norm = ray.normalize();
float f = theWorld.calcMinDistance(theCamera.getPosition(), norm, 1000);
if (1==1/*f != Object3D.COLLISION_NONE*/) {
SimpleVector offset = new SimpleVector(norm);
norm.scalarMul(f);
norm = norm.calcSub(offset);
SimpleVector heroCenter = hero.getTransformedCenter();
SimpleVector destination = new SimpleVector(norm);
destination.x += theCamera.getPosition().x;
destination.z += theCamera.getPosition().z;
destination.y = heroCenter.y; // Make y the same as for the hero to avoid moving up/down.
hero.setRotationMatrix(destination.calcSub(heroCenter).getRotationMatrix());
target = new SimpleVector(destination);
}
}
}
BTW: If you don't want to do it with collisions, you have to do it with math like i did in the other thread about mouse-following, but that approach is limited to some special situations.