急求高手改程序!光线追踪算法的实现,用vc++上的opengl

急!!求高手改程序!光线追踪算法的实现,用vc++下的opengl!



我想写一个画两个不透明的球的光线追踪算法,但不知道哪里出了问题,画出来的是黑白相间的直线条纹。求高手帮忙看一下!不胜感谢!

//下面针对反射实现光线跟踪算法


#include "stdafx.h"


//*******************************************************************
//三维向量的定义、两种构造函数及运算符+、-、*、/的重载
class vector
{
public:
int x;
int y;
int z;
vector(){x=0;y=0;z=0;}
vector(float a,float b,float c){x=a;y=b;z=c;}
friend vector operator +(vector &c1,vector &c2)//重载+使其能完成两个向量的求和
{
return vector(c1.x+c2.x,c1.y+c2.y,c1.z+c2.z);
}
friend float operator *(vector &c1,vector &c2)//重载*使其能完成两个向量的点积
{
return c1.x*c2.x+c1.y*c2.y+c1.z*c2.z;
}
friend vector operator *(vector &c1,float a)//重载*使其能完成向量和数的相乘
{
    return vector(c1.x*a,c1.y*a,c1.z*a);
}
friend vector operator /(vector &c1,float a)//重载/使其能完成向量和数值的除法
{
return vector(c1.x/a,c1.y/a,c1.z/a);
}
friend vector operator -(vector &c1,vector &c2)//重载-使其能完成向量相减
{
return vector(c1.x-c2.x,c1.y-c2.y,c1.z-c2.z);
}
};

//颜色定义、两种构造函数及运算符+、-的重载
class color
{
public:
float R;
float G;
float B;
color(){R=0;G=0;B=0;}//黑
color(float a,float b,float c){R=a;G=b;B=c;}
friend color operator +(color &c1,color &c2)//重载+使其能完成两个向量的求和
{
return color(c1.R+c2.R,c1.G+c2.G,c1.B+c2.B);
}
friend color operator -(color &c1,color &c2)
{
return color(c1.R-c2.R,c1.G-c2.G,c1.B-c2.B);
}
friend color operator *(color &c1,float z)
{
return color(c1.R*z,c1.G*z,c1.B*z);
}
friend color operator *(color &c,vector &v)
{
return color(c.R*v.x,c.G*v.y,c.B*v.z);
}
friend color operator /(color &c1,float z)
{
return color(c1.R/z,c1.G/z,c1.B/z);
}
};

//光线定义:光色、传播矢量、起点
class light//光线的定义
{
public:
color lightcolor;//光色
vector L;//传播方向的单位矢量
vector loc;//“相对光源”位置(起点位置)
};

//单色光滑球体的定义:球心、半径、材料的光反射属性
class sphere
{
public:
vector heart;//球心位置
float r;//半径
float Ka;//环境光反射属性
float Kdr;//漫反射光(红光分量)
float Kdg;
float Kdb;
float Ks;//镜面反射
float light_n;//高光系数
sphere(float hx,float hy,float hz,float rl
,float ka,float kdr,float kdg,float kdb,float ks,float n)
{
heart.x=hx;heart.y=hy;heart.z=hz;r=rl;Ka=ka;
Kdr=kdr;Kdr=kdr;Kdg=kdg;Kdb=kdb;Ks=ks;light_n=n;
}
};


///////////////////////////////////////////////////////////////////////////


//求两点间的距离
float distance(vector c1,vector c2)
{
return sqrt((c1-c2)*(c1-c2));
}

//求两点间的单位矢量
vector view(vector c,vector v)
{
return (v-c)/sqrt((v-c)*(v-c));
}


//求球体a和光线v的交点
vector intersection(sphere a,light v)
{
float b=v.L*(v.loc-a.heart)*2;
float c=(v.loc-a.heart).x*(v.loc-a.heart).x+(v.loc-a.heart).y*(v.loc-a.heart).y+(v.loc-a.heart).z*(v.loc-a.heart).z-a.r*a.r;
float d=b*b-4*c;//判断是否有交点的量

if(d<0)
return v.loc;//无交点
if(d==0)
if(b<=0)
return v.loc-v.L*b/2;//R=V-b/2*d即为光线与球的交点。