Results 1 to 3 of 3

Thread: Billboarding???

  1. #1


    I was wondering how to use the billboarding effect (where a certain poly always faces the viewer), i am using the LookAt function. So i dont really know the roation does anybody know how to make a certain polygon always face the viewer, while using the LookAt function?

    P.S. any code would be greatly appreciated

  2. #2
    Member Contributor
    Join Date
    Feb 2000
    Brisbane,QLD, Australia

    Re: Billboarding???

    I snapped this some messages back. I found this very helpful information. The answer to your problem lies within. If there is a function to resolve the camera pitch, bank and while using gluLookAt(), I would like to know.

    Alternate option - you could use the details below to write your ownLookAT().

    sine, cosine and tangent are 3 trigonometry functions which relate angles and lengths of sides of a right triangle and are defined this way

    T = the angle of interest
    A = side of triangle Adjacent to T
    O = side of triangle Opposide T
    H = the hypotenuse (sp?) (angle opposite the right angle).
    cos(T) = A/H
    sin(T) = O/H
    tan(T) = O/A
    These functions are useful for all sorts of things. For example if you want to break an arbitrary vector up into x and y components, you find the angle the vector makes with the x-axis of your coordinate system and H = length of the vector and you get:
    x_component_of_H = A = H*cos(T)
    y_component_of_H = O = H*sin(T)

    I had to modify the drawing from the original post. Sorry who posted this, I cannot remember.

    a is your camera
    b is your object

    c.x = object.x; //(a)
    c.y = camera.y; //(b)

    Return T to get your angle. This is in 2D only you can fix for 3D in the same fashion. Once you have created the right angle use pythagoras theorm to solve the whole triangle, assuming you have the x,y coords for a & b.

    2 create the billboard effect (*nearly forgot send the inverted angle of your camera to glRotated(-angle , 0.0f, 1.0f, 0.0f);
    this rotation is across the X,Z axis.


    [This message has been edited by dans (edited 03-09-2000).]

  3. #3
    Junior Member Newbie
    Join Date
    Mar 2000

    Re: Billboarding???

    Here's some linear Algerbra for you! whee
    (in code so its actually useful!!)

    Vector Vo, Vn, Vr;
    double VoMag, VrMag;
    // this will get the vector between camera and object you want to billboard
    Vo[0] = Obj->GetX() - Camera->GetX();
    Vo[1] = Obj->GetY() - Camera->GetY();
    Vo[2] = Obj->GetZ() - Camera->GetZ();
    VoMag = sqrt(Vo[0]*Vo[0] + Vo[1]*Vo[1] + Vo[2]*Vo[2]);
    // distance between object and camera (magnitude of the vector)

    Vn[0] = 0;
    Vn[1] = 0;
    Vn[2] = 1;
    // this is a Normal vector about the vector I want to be billboarded (Z-Axis in this example)

    Vr = Vn ^ Vo;
    // Cross Product give you the perpendicular axis about which you want to rotate to always face the camera coords you just used
    // dont forget to Normalize the size! so you can use it later!
    VrMag = sqrt(Vr[0]*Vr[0] + Vr[1]*Vr[1] + Vr[2]*Vr[2]);
    if(VrMag != 0)
    Vr[0] = Vr[0]/VrMag;
    Vr[1] = Vr[1]/VrMag;
    Vr[2] = Vr[2]/VrMag;

    // ok we have the vector to rotate about, now what degree do we rotate by?
    // this is can be found in any linear algerbra book

    theta = acos((Vn * Vo)/(VoMag)) * 180 /PI;
    // of course the Mag of the Z-Axis is 1, so I left it out of this equation (who wants to multiply by 1?)

    there you go!
    just use
    glRotated(theta, Vr[0], Vr[1], Vr[2]);
    and you will always face the camera!
    (the object billboarded will rotate about the Z on its own... but i am still fixing that..

Similar Threads

  1. billboarding
    By Alessandro_dup1 in forum OpenGL: Advanced Coding
    Replies: 2
    Last Post: 06-15-2003, 08:21 AM
  2. Billboarding
    By Jan in forum OpenGL: Basic Coding
    Replies: 2
    Last Post: 06-10-2002, 10:32 AM
  3. billboarding
    By dmsy in forum OpenGL: Basic Coding
    Replies: 0
    Last Post: 04-21-2000, 03:33 PM
  4. Billboarding???
    By imported_Dan in forum OpenGL: User Software
    Replies: 1
    Last Post: 03-07-2000, 10:10 PM

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
Proudly hosted by Digital Ocean