Original Post
Can anyone help me with this one? I have a sprite rendered in a 3D scene using billboarding. As I move the camera further from the sprite so it shrinks in apparent size. As I move the camera closer so it grows. By calling (Just before I render the sprite): m_device.Transform.World = Matrix.Scaling(x, y, 1.0f); I want to keep the sprite the same apparent size. I've got this working with a quick rule of thumb for my app, I just call: float x,y; GetScalingFactors(out x, out y, new Vector3(/*Sprite's x,y,z position*/)); m_device.Transform.World = Matrix.Scaling(x, y, 1.0f); Where GetScalingFactors is defined as: private void GetScalingFactors(out float x, out float y,Vector3 position) { x = 0.01f; y = 0.01f; Vector3 pointToEye = m_eye - position; float DistanceToEye = pointToEye.Length(); if (DistanceToEye == 0.0) { DistanceToEye = float.MinValue; } x = DistanceToEye / 600.0f; y = DistanceToEye / 600.0f; } Then I just call: m_sprite.Draw(m_texture, new Vector3(0.0f, 0.0f, 0.0f), new Vector3(1.0f/x, 1.0f/y, -1.0f), Color.White.ToArgb()); But obviously this is not exact. Can anyone point my to a formula that will exactly compensate for the sprite to camera distance so the the sprite maintains the same size on screen? Thanks, Mitch.