Nebula texture and Ra Dec conversion into xyz

Tips for creating and manipulating planet textures for Celestia.
Topic author
Calculus
Posts: 216
Joined: 19.10.2002
With us: 22 years 1 month
Location: NY

Nebula texture and Ra Dec conversion into xyz

Post #1by Calculus » 08.03.2003, 01:20

This is a question for Grant or Chris, but anyone can help me.
I'm in the process of making some textures for Deep Sky objects (like the M31 you can see in my gallery).
The problem I have is to convert a (Ra, Dec) into a xyz vector that celestia uses. I suppose the origin at Sol center but I get confuse with the sine and cosine functions and the 23.45 degrees of the ecliptic plan.
can someone give me the f g h transformation functions:
x=f(Ra,Dec)
y=g(Ra,Dec)
z=h(Ra,Dec)
Thanks
---Paul
My Gallery of Celestial Phenomena:
http://www.celestiaproject.net/gallery/view_al ... e=Calculus

Avatar
selden
Developer
Posts: 10192
Joined: 04.09.2002
With us: 22 years 2 months
Location: NY, USA

Post #2by selden » 08.03.2003, 02:07

Paul,

Well, I'm neither of them, but here's the formula used internally by Celestia (see http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/celestia/celestia/src/celengine/astro.cpp?rev=1.9&content-type=text/vnd.viewcvs-markup)

Code: Select all

 
// Convert equatorial coordinates to Cartesian celestial (or ecliptical)
// coordinates.
Point3d astro::equatorialToCelestialCart(double ra, double dec, double distance)
{
  double theta = ra / 24.0 * PI * 2 + PI;
    double phi = (dec / 90.0 - 1.0) * PI / 2;
    double x = cos(theta) * sin(phi) * distance;
    double y = cos(phi) * distance;
    double z = -sin(theta) * sin(phi) * distance;

    return (Point3d(x, y, z) * equatorialToCelestiald);
}




Earlier in this file is this definition:

Code: Select all

static Mat3d equatorialToCelestiald = Mat3d::xrotation(degToRad(23.4392911));

The matrix multiplication in the last line of equatorialToCelestialCart does the rotation from equatorial to ecliptic coordinates.

The xrotation operation is defined in http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/celestia/celestia/src/celmath/vecmath.h?rev=1.1&content-type=text/vnd.viewcvs-markup to be

Code: Select all

template<class T> Matrix3<T> Matrix3<T>::xrotation(T angle)
{
    T c = (T) cos(angle);
    T s = (T) sin(angle);

    return Matrix3<T>(Vector3<T>(1, 0, 0),
                      Vector3<T>(0, c, -s),
                      Vector3<T>(0, s, c));
}


Added later:
Here's the code fragment used to do the conversion for DSC objects, which is in http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/celestia/celestia/src/celengine/deepskyobj.cpp?rev=1.4&sortby=date&content-type=text/vnd.viewcvs-markup:

Code: Select all

    // Get position
    Vec3d position(0.0, 0.0, 0.0);
    if (params->getVector("Position", position))
    {
        setPosition(Point3d(position.x, position.y, position.z));
    }
    else
    {
        double distance = 1.0;
        double RA = 0.0;
        double dec = 0.0;
        params->getNumber("Distance", distance);
        params->getNumber("RA", RA);
        params->getNumber("Dec", dec);
        Point3d p = astro::equatorialToCelestialCart(RA, dec, distance);
        setPosition(p);
    }


Added yet later:
And here's the coordinate transform statement used when reading in the stars database in http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/celestia/celestia/src/celengine/stardb.cpp?rev=1.16&content-type=text/vnd.viewcvs-markup.

Code: Select all

    // Convert ra from degrees to hours for eqToCelCart function
    ra /= 15.0;
    star->setPosition(astro::equatorialToCelestialCart((float) ra, (float) dec, (float) distance));


Does this help?

[p.s. I edited this umptyump times, so you may have seen it in some intermediate state with different wording and critical pieces wrong or missing. I'm stopping now.]
Selden

Topic author
Calculus
Posts: 216
Joined: 19.10.2002
With us: 22 years 1 month
Location: NY

Post #3by Calculus » 08.03.2003, 03:12

Thanks Selden,
the first part was easy.
Now I have to figure out this equation:

static Mat3d equatorialToCelestiald = Mat3d::xrotation(degToRad(23.4392911));

do you think it is a rotation only around the x axis ? or is there more ?
---Paul

My Gallery of Celestial Phenomena:

http://www.celestiaproject.net/gallery/view_al ... e=Calculus

Avatar
selden
Developer
Posts: 10192
Joined: 04.09.2002
With us: 22 years 2 months
Location: NY, USA

Post #4by selden » 08.03.2003, 03:36

Paul,

Yes, my understanding is that, by definition, the tilt of the earth's axis is strictly a rotaion about the "x" axis.

To put it another way:

Code: Select all

        x =  x0
        y =     y0*cos(angle) - z0*sin(angle)
        z =     y0*sin(angle) + z0*cos(angle)
Selden

Topic author
Calculus
Posts: 216
Joined: 19.10.2002
With us: 22 years 1 month
Location: NY

Post #5by Calculus » 08.03.2003, 04:06

Thanks Selden. I now have all I was looking for. In a couple days I'll post images of Celestial Phenomena involving deep sky objects.
---Paul

My Gallery of Celestial Phenomena:

http://www.celestiaproject.net/gallery/view_al ... e=Calculus


Return to “Textures”