I'm trying to convert a length (well, a radius) from world coordinates to screen coordinates using an OrthographicCamera. However, the only method I've figured out so far is to do a projection, with some basic vector math before/after, but this seems...expensive.
Here's what I have so far (apologies, written in Kotlin):
val cam: OrthographicCamera = ... val behavior: SteeringBehavior<Vector2> = ... // calculating the center of the circle val coords = Vector3() val wander = behavior as Wander<Vector2> // defined elsewhere above coords.set(wander.wanderCenter, 0F) cam.project(coords) // coords now has wanderCenter in screen coordinates // now, the part I'm interested in, calculating the radius val radiusCoords = Vector3(wander.wanderCenter, 0F).add(wander.wanderRadius, 0F, 0F) cam.project(radiusCoords) radiusCoords.sub(coords) val radius = radiusCoords.x // this is the value I want
The first half of the code snippet is fine, and provided for context. But the second half...I'm basically taking a scalar and plugging it through a Vector3 and a series of Complicated Matrix Math to convert it to another larger scalar. Is there an easier way to do what I'm doing? I've looked around a bit -- like at OrthographicCamera's
combined.getScaleX() field, but it doesn't seem to have the value I need.