- Home /
Camera.WorldToScreenPoint strange behaviour
the function returns (110.9,-3.3,28.9) i have 2 questions
1)isn't it supposed to return int? 2) why it returns negative y. it seems that the camera can see it.
Answer by aldonaletto · Jul 08, 2012 at 04:28 PM
1- No, the screen coordinates returned are floats (a Vector3, where the Z component is the distance from the camera);
2- A 3D world point doesn't need to be visible to be converted to screen coordinates - actually, even points behind the camera are returned in the screen space! It's like an infinite line passing through the camera and the 3D point: if the point is behind the camera, the line still crosses the screen space and reports valid screen coordinates.
If you need to avoid off-screen results from WorldToScreenPoint, use a dot product to detect points behind the camera, and Rect.Contains to get only valid screen coordinates (code attached to the camera):
// checking if worldPoint isn't behind the camera:
if (Vector3.Dot(transform.forward, worldPoint-transform.position) >= 0){
var screenPoint: Vector3 = camera.WorldToScreenPoint(worldPoint);
// checking if screenPoint is inside the screen area:
if (Rect(0, 0, Screen.width, Screen.height).Contains(screenPoint){
// screenPoint is a valid screen point
}
}
sorry for not asking a clear question. i use the GetComponent().bounds.$$anonymous$$; to get the lowest point on the mesh. visualy it seems that the mesh is on screen but it returns negative as if it is out of screen. so it really confuse me.
all i want is to translate a position of the object in world to screen .
Note: This does not take into account points which are between the camera and the near plane of the view frustum.
Answer by blackpag · Jul 09, 2012 at 08:01 AM
ok found a fix. my camera was perspective. when I changed it to orthographic it fixed it
Your answer