I've got a simple test program with a camera within a cubemap (skybox). You can look around, and it feels like you're in a 3D room, but really it's just a cubemap image.
Now I want to draw a point (well, ultimately, a large number of points) on the screen, such that it appears to be anchored at a point on the cubemap. For example, if the cubemap is of a room, then I want to put a point on the "wall", and have it appear to be stationary when you look around.
Given that there is no actual environment, it's just a cubemap, the points I want to project are represented as x/y rotational angles, rather than absolute 3D vertices. I tried calculating the position manually, using the camera x/y angles and interpolating across the screen. However because the cubemap is distorted at the edges due to the camera's projection matrix, my linear calculations don't match up, so the point appears to wobble as you look around.
I know I need to incorporate the camera's projection matrix to get it to appear in the correct position, but I'm not sure how. I'm using the CML math library, and I noticed it has a project_point() function, but it works with absolute 3D coordinates, so I don't know how that helps me when starting with angles instead of coordinates.
If someone could get me pointed in the right direction, I would appreciate it.
Edit: After reading other questions on polar coordinates, I came up with this for converting x/y angles (relative to the camera view angle) into a 3d coordinate that I could project onto the screen:
x = sin(horizontal_angle) * cos(vertical_angle) y = sin(horizontal_angle) * sin(vertical_angle) z = cos(horizontal_angle)
This almost works, I feel like I'm close. I can rotate the camera left and right, and the point appears to remain stationary. However, as soon as I rotate it up or down as well, the point moves rather significantly. However I I haven't been able to figure out why that is so far.