太阳作为光源使用opengl和c

前端之家收集整理的这篇文章主要介绍了太阳作为光源使用opengl和c前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在研究太阳系,我正试图让太阳成为这个项目的中心光源,但它并没有像我想象的那样工作.

这是我没有照明的照片.

这是与照明相同的程序.

这里有一个不同的角度,所以你可以看到地球没有它应该的阴影(忽略月球上的红色,这是我的参考)

我不知道你是否能分辨,但看起来光在每个球体中居中,而不是在太阳中.
地球上的阴影仿佛光线来自顶部.与太阳相同.太阳在这里不是一个光源,它只是一个球体,也被一些来源点燃.月球上的地球或地球上的月球都没有阴影.

这是绘制系统的代码

GLfloat light_diffuse[] = { 1.0,1.0,1.0 };
GLfloat pos[] = { 0.0,0.0,0.0 };
glEnable(GL_LIGHTING);  
glLightfv(GL_LIGHT0,GL_DIFFUSE,light_diffuse);
glLightf(GL_LIGHT0,GL_POSITION,pos);
//SUN
        //Picture location,major radius,minor radius,major orbit,minor orbit,angle
Planet Sun ("/home/rodrtu/Desktop/SolarSystem/images/Sun.png",100,99,200.0,0.0);
double sunOrbS = 0;
double sunRotS = rotatSpeed/10;
//orbit speed,rotation speed,moon reference coordinates (Parent planet's major and minor Axis)
Sun.displayPlanet(sunOrbS,sunRotS,0.0);

//EARTH
Planet Earth ("/home/rodrtu/Desktop/SolarSystem/images/EarthTopography.png",50,49,500.0,450.0,23.5);
double eaOrbS = orbitSpeed*2;
double eaRotS = rotatSpeed*5;

Earth.displayPlanet(eaOrbS,eaRotS,0.0);
//Orbit path
drawCircle(800,720,1,50);

//EARTH'S MOON
Planet Moon ("/home/rodrtu/Desktop/SolarSystem/images/moonTest.png",25,23,100.0,15);
double moOrbS = rotatSpeed*4;
double moRotS = eaOrbS;

Moon.displayPlanet(moOrbS,moRotS,Earth.getMajorAxis(),Earth.getMinorAxis());

orbitSpeed+=.9;
if (orbitSpeed > 359.0)
 orbitSpeed = 0.0;

rotatSpeed+=2.0;
if (rotatSpeed > 719.0)
 rotatSpeed = 0.0;

接下来的两个函数负责坐标和绘制球体

void Planet::setOrbit(double orbitSpeed,double rotationSpeed,double moonOrbitX,double moonOrbitY) 
{
    majorAxis = orbitSemiMajor * cos(orbitSpeed / 180.0 * Math::Constants<double>::pi);
    minorAxis = orbitSemiMinor * sin(orbitSpeed / 180.0 * Math::Constants<double>::pi);

    glTranslate(majorAxis+moonOrbitX,minorAxis+moonOrbitY,0.0);
    glRotatef(orbitAngle,1.0);
    glRotatef(rotationSpeed,1.0);

}

void Planet::displayPlanet(double orbitSpeed,double moonOrbitY)
{
    GLuint surf;
    Images::RGBImage surfaceImage;
    surfaceImage=Images::readImageFile(texture);
    glEnable(GL_TEXTURE_2D);
    glGenTextures(0,&surf);
    glBindTexture(GL_TEXTURE_2D,surf);
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
    surfaceImage.glTexImage2D(GL_TEXTURE_2D,GL_RGB);

    glPushMatrix();
    setOrbit(orbitSpeed,rotationSpeed,moonOrbitX,moonOrbitY);
    drawSolidPlanet(equatRadius,polarRadius,40,40); 
    glPopMatrix();

}

如果我离开我正在做的事情你能指点我一个好的教程吗?我读了一些,但我想我不理解他们,因为我以为我做了.
如果我走上正轨,你能告诉我我错在哪里以及我需要做什么吗?

解决方法

你需要调用glLightfv(GL_LIGHT0,pos);并将光源的位置设置为太阳的中心.

猜你在找的C&C++相关文章