OpenGl valoluokka, käytä miten tykkäät, jos haluut että ei oo dll niin poista __declspec(dllexport).
LVector on vektori jne.
// LLight.h
class __declspec(dllexport) LLight
{
public:
LLight();
~LLight() {};
void Setup(int number);
void Disable();
void SetPosition(LVector pos, LVector dir);
void Render();
void SetColour(LColor diffuse, LColor ambient);
void SetRays(int num, float angle, float siz);
LVector GetPosition() { return position; }
LVector GetDirection() { return direction; }
private:
bool VisibleRays;
int NumRays, GlobalOrder;
float FalloffAngle;
float Size;
int numb;
LColor dif, amb;
LVector position, direction;
};#include "L_Light.h"
LLight::LLight()
{
VisibleRays=false;
NumRays=0;
GlobalOrder=0;
}
void LLight::Setup(int number)
{
unsigned int val=GL_LIGHT0+number;
numb=number;
float Ambient[4]={amb.r,amb.g,amb.b,amb.a};
float Diffuse[4]={dif.r,dif.g,dif.b,dif.a};
float Position[4]={position.x, position.y, position.z, 1};
glLightfv(val, GL_AMBIENT, Ambient);
glLightfv(val, GL_DIFFUSE, Diffuse);
glLightfv(val, GL_SPECULAR, Diffuse);
glLightfv(val, GL_POSITION, Position);
direction.Normalize();
glEnable(val);
}
void LLight::SetColour(LColor diffuse, LColor ambient)
{
dif=diffuse;
amb=LColor(ambient.r,ambient.g,ambient.b,1);
}
void LLight::SetPosition(LVector pos, LVector dir)
{
position=pos;
direction=dir;
}
void LLight::SetRays(int num, float angle, float siz)
{
VisibleRays=true;
NumRays=num;
FalloffAngle=angle;
Size=siz;
}
void LLight::Render()
{
glDisable(GL_TEXTURE_2D);
glDisable(GL_LIGHTING);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA,GL_ONE);
for(int i=0;i<NumRays;i++)
{
float fractality=(float)(((rand()%100)/(float)100)-0.5f)*FalloffAngle;
float fractality2=(float)(((rand()%100)/(float)100)-0.5f)*FalloffAngle;
float fractality3=(float)(((rand()%100)/(float)100)-0.5f)*FalloffAngle;
glBegin(GL_LINES);
glColor4f(dif.r,dif.g,dif.b,0.5f);glVertex3f(position.x,position.y,position.z);
glColor4f(0,0,0,0.0f);glVertex3f(position.x+direction.x*Size+fractality,position.y+direction.y*Size+fractality2,
position.z+direction.z*Size+fractality3);
glEnd();
}
glEnable(GL_DEPTH_TEST);
glDisable(GL_BLEND);
glEnable(GL_LIGHTING);
}
void LLight::Disable()
{
unsigned int val=GL_LIGHT0+numb;
glDisable(val);
}Aihe on jo aika vanha, joten et voi enää vastata siihen.