🎉 Celebrating 25 Years of GameDev.net! 🎉

Not many can claim 25 years on the Internet! Join us in celebrating this milestone. Learn more about our history, and thank you for being a part of our community!

Vectors math programming...

Started by
1 comment, last by ogracian 22 years, 10 months ago
Hello I am building a simple vector math class to support basic vector operations, currently I only use a simple 3 floats to represent each vector''s component, but I have seen some implementations wich use unions, and structs for that, so I really appreciate if anyone explainme why use unions for that, and how implement a really optimized vector and matrices class? Thanks in advance!
Advertisement
There''s no single way to do what you want: it depends a lot on your choice of language, target platform/processor and tools/compiler. But there are some general points which may be of use.

First I would recoomend structs over unions: you don''t need unions to implement vectors and I think you''re more likely to trip up with them.

The advantages of structures [for vectors] are:
Simpler code: e.g. only one line to add two vectors, not three.
Easier to work with and debug: because it''s easier to tell what you are dealing with. Without structs you use the same types for vectors and scalars and it can be difficult to tell them apart.
Quicker code: this depends on how they are implemented, but often you can take advantage of processor features such as a vector/SIMD unit to accelerate vector operations.
John BlackburneProgrammer, The Pitbull Syndicate
unions are quite useful in a vector implementation, especially if you''re using opengl which lets you specify your arguments as an array. As a quick example, here''s some code:

  class Vector{public:    union    {        struct { float x, y, z; };        float v[3];    }    // blah, blah, blah....};  


This way, you can access the members of the vector with either:

      Vector v = {0,0,1};    v.x = ...;    v.v[0] = ...;    glVertex3fv( v.v );    glVertex3f( v.x, v.y, v.z );    ...  


It''s really just a convenience thing though. There''s no real need for it. Also, you can define an operator like this:

  float *Vector::operator float *(){    return v;}  
;

That way, you can do stuff like this:

      Vector v = {0,0,1};    glVertex3fv( v );  


Pretty nifty, eh?

War Worlds - A 3D Real-Time Strategy game in development.

This topic is closed to new replies.

Advertisement