PDA

View Full Version : developing OpenGL mid level api



ScottManDeath
03-30-2001, 01:11 PM
I started programming OpenGL in last november
using c++ on win32. While doing so it got nasty for me to use the OpenGL functions to setup lighting for example. So I tried to "develop" an "api" (well it sounds big, but perhaps it could get so) to avoid this
using c++ with some classes loosely built around glFunctions();
but I think it would be better if some guys could help me, because if more people participate more ideas are realised and less errors occur.
If some people are interested i could send them the main header via email (21k)
here is a "snippet"( comments are in german but classes all in english)
(template <class number,dimension>VVector is my selfmade vector mathmatics "library")
but please pay attention: this isn't meant as a concurrence to OpenInventor , ist just my way to handle glFuncrions() more easy !!!

// Vektoren
template <class number> class OGLVector2; // x, y
template <class number> class OGLVector3; // x, y, z
template <class number> class OGLVector4; // x, y, z, w

// Matrix
class OGLMatrix; // 4x4Matrix

// Farben
template <class number> class OGLColor3; // RGB
template <class number> class OGLColor4; // RGBA
// OGLVector
typedef OGLVector3<GLfloat> OGLVector3f;
typedef OGLVector4<GLdouble> OGLVector4d;

//OGLColor
typedef OGLColor3<GLfloat> OGLColor3f;

typedef OGLColor4<GLbyte> OGLColor4b;
// Funktionen

// oglColor typunabhängig
void oglColor( OGLColor3f color);
void oglColor( OGLColor3d color);
void oglColor( OGLColor3i color);

void oglVertex(OGLVector3f vertex);
void oglVertex(OGLVector3d vertex);
void oglNormal(OGLVector3i normal);
void oglNormal(OGLVector3s normal);

// Transformationen

void oglRotate(GLfloat angle, OGLVector3f axis);
void oglRotate(GLdouble angle, OGLVector3d axis);

// OGLVector3
template <class number> class OGLVector3: public VVector3D<number>
{
public:
OGLVector3(); // Default Constructor

OGLVector3(number x,number y,number z); // Constructor
OGLVector3(number x1,number y1,number z1,number x2,number y2, number z);// 3 Punkte

OGLVector3(const OGLVector3& other); // Copy Constructor
OGLVector3(const OGLVector3& p1,const OGLVector3& p3); // zwei Punkte

OGLVector3(const VVector3D<number>& other); // Cast Constructor
OGLVector3(const VVector<number,3>& other); // Cast Constructor

void Set(number x, number y, number z);

number& X(); // X
number& Y(); // Y
number& Z(); // Z
number W(); // 1

operator OGLVector4<number>()
{
OGLVector4<number> tmp;
tmp.Set(X(),Y(),Z(),1);
return tmp;
}


private:
};