- Home /
Voxel raycasting in world space
Hello I need to do a raycast into a voxel chunk.
I've found a method for raycasting (found at http://www.xnawiki.com/index.php?title=Voxel_traversal ) but it takes ray information in chunks coordinates.
My problem is that my chunks can be translated/rotated anywhere anytime in the world (unity's transform coordinates)
What I need so is to translate world coordinates into chunks coordinates by using chunks transform rotation/position so that I can apply this algorithm to find chunks blocks (so, in chunks coordinates) that are traversed by the ray.
I've tried something like this:
public Vector3 RealToChunk(Vector3 real){
Vector3 retVal = new Vector3();
retVal = transform.InverseTransformPoint(real);
retVal.x = (int)(chunkSize.x / 2 + retVal.x);
retVal.y = (int)(chunkSize.y / 2 + retVal.y);
retVal.z = (int)(chunkSize.z / 2 + retVal.z);
return retVal;
}
but I can't get it working correctly...
Any ideas? Thanks all!
Answer by theprophet31337 · Jul 13, 2013 at 03:43 AM
If you have the same kind of coordinate system between your world coordinates and your chunk coordinates, this should work.
public Vector3 RealToChunk(Vector3 real){
int x = (int)Math.Floor(real.x / chunkSize.x);
int y = (int)Math.Floor(real.y / chunkSize.y);
int z = (int)Math.Floor(real.z / chunkSize.z);
return new Vector3(x, y, z);
}
Your answer
Follow this Question
Related Questions
Knowing When a MeshCollider is Done Updating 1 Answer
RayCast Hit Point rounding itself...? 1 Answer
[Unsolved] Raycast isn't casting 0 Answers
Marching cubes raycasting issue 0 Answers
Voxel Raycasting Help 0 Answers