我正在研究太阳系,我正试图让太阳成为这个项目的中心光源,但它并没有像我想象的那样工作.
这是我没有照明的照片.
这是与照明相同的程序.
这里有一个不同的角度,所以你可以看到地球没有它应该的阴影(忽略月球上的红色,这是我的参考)
我不知道你是否能分辨,但看起来光在每个球体中居中,而不是在太阳中.
地球上的阴影仿佛光线来自顶部.与太阳相同.太阳在这里不是一个光源,它只是一个球体,也被一些来源点燃.月球上的地球或地球上的月球都没有阴影.
这是绘制系统的代码
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);并将光源的位置设置为太阳的中心.