I am trying to define a planet using spherical corrdinates (rho, phi, theta). The sphere is centered on the origin, and I have my camera defined by a second set of spherical coordinates. What I want to do is clip away all geometry on the sphere that is not visible (the sphere has a radius of ~5000, the camera is at rho 5020). How can i avoid the cost of converting from Spherical to cartesian coordinates, and clip off all that extra geometry?
I will assume that your camera is located on the positive z axis at a point zc, such that zc > zp (where zc is the radius of the sphere the camera lies on and zp is the radius of the planet). If you're camera lies elsewhere on the sphere, then it is a trivial transformation of coordinates to adjust the solution to your exact problem.
Given that zc > zp, then the visible part of the planet will be the locus of all points within the 'cap' of the sphere defined by the intersection of the sphere and a tangent cone with origin at zc. In other words, all vectors that pass through zc and are tangent to the sphere define a 'tangent cone' and it is only points on the planet within this cone that will be visible at zc. I believe that finding this set of points is the problem you have asked. Please correct me if I am wrong.
Assuming this is the case...
A vector from the origin of the sphere to zc is given by c = <0,0,zc> and the vector function defining the surface of the sphere is given by r (theta,phi) = zp(cos(theta)sin(phi)i + sin(theta)sin(phi)j + cos(phi)k ). Hence, the tangent cone is defined by t = c -r such that t.r = 0; and so we can solve this to find that cos(phi)=zp/zc, thus defining the boundary of our set of points by the angle phi (which is the (angle of) declination from the z axis of the point on the sphere).
So, you can clip all points on the sphere for which phi>cos-1(zp/zc)
I hope this is what you were looking for!
Edited by - Timkin on October 15, 2001 12:18:02 AM