View Full Version : Boringly enough, I've templated my Vector classes.

07-26-2002, 01:31 AM
ie. CVector3D<double> MyVector or CVector3D<float> MyVector etc.

Still looking for that elusive vector randomizer!

www.orbsoftware.com (http://www.orbsoftware.com)

(the nurd zone).

Questions Burner
07-26-2002, 01:48 AM
Just "Vector" will do, you don't have to use template class for vector in OpenGL. OpenGL uses GLfloat

07-26-2002, 02:03 AM
glVertex3dv, for example, takes a pointer to three GLdoubles.

There are other types than float and double that makes sense in a vector class. For example, to represent a pixel in an image you can use a vector of chars (or any other integer type, depending on required precision). To add two pixels, just add the two vectors representing the pixels.

[This message has been edited by Bob (edited 07-26-2002).]

07-27-2002, 12:18 AM
that elusive vector randomizer:

// Set up the rotation and translation

glTranslate( ... );
glRotate( ... );

// Create a random unit vector within a specified angle of the -Z axis.

a1 = rand( 0., TWOPI );
a2 = rand( 0., limit );

x = cos( a1 ) * sin( a2 );
y = sin( a1 ) * sin( a2 );
z = -cos( a2 );

Now, what was so hard about that?

[This message has been edited by Jambolo (edited 07-27-2002).]

07-27-2002, 01:01 AM
No. That isn't quite right. Firstly, I don't think your spread will be even over the area concerned.

Secondly, glTranslate\glRotate are no-nos. This is purely theoretical - for the vector class - nothing to do with gl.

Thanks anyway!

07-27-2002, 01:28 AM
Actually, daveperman wrote over on flipcode:

float float_rand()
//return a random number between [-1.0f, 1.0f]

void convert_to_cartesian_coords ( float azim, float elev, float radius, vec3* output )
// I hope you know coordinate transformations http://www.opengl.org/discussion_boards/ubb/smile.gif

void convert_to_polar_coords ( vec3 vector, float &azim, float &elev, float &radius)
// I hope you know coordinate transformations http://www.opengl.org/discussion_boards/ubb/smile.gif

randomize ( vec3 input, float variance, vec3 *output )
float azim, elev, radius;
convert_to_polar_coords ( input, azim, elev, radius );
azim += float_rand()*variance;
elev += float_rand()*variance;
radius = radius; //keep the radius same
convert_to_cartesian_coords ( azim, elev, radius, output );