Pracuję nad układem słonecznym i staram się, aby słońce było centralnym źródłem światła tego programu, ale nie działa tak, jak myślałem.Słońce jako źródło światła przy użyciu opengl i C++
Oto zdjęcie tego, co mam bez oświetlenia.
Oto ten sam program z oświetleniem.
inny kąt tutaj, dzięki czemu można zobaczyć, że Ziemia nie ma cienia, jak to ma (zignorować czerwony na Księżycu, to dla mojego odniesienia)
Nie wiem, czy potrafisz powiedzieć, ale wygląda na to, że światło skupia się w każdej sferze, a nie w Słońcu. Cień na Ziemi jest taki, jakby światło nadchodziło od góry. To samo dotyczy Słońca. Słońce tutaj nie jest źródłem światła, jest tylko kulą, która jest również oświetlana przez jakieś źródło. Nie ma cienia z Ziemi na Księżycu lub z Księżyca na Ziemi.
ten oto kod, który czerpie z systemu
GLfloat light_diffuse[] = { 1.0, 1.0, 1.0, 1.0 };
GLfloat pos[] = { 0.0, 0.0, 1.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, 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, 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, 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, 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;
Te kolejne dwie funkcje są odpowiedzialne za współrzędnych i rysunek sfer
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, 0.0, 1.0, 1.0);
glRotatef(rotationSpeed, 0.0, 0.0, 1.0);
}
void Planet::displayPlanet(double orbitSpeed,double rotationSpeed,
double moonOrbitX, 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,0,GL_RGB);
glPushMatrix();
setOrbit(orbitSpeed,rotationSpeed, moonOrbitX, moonOrbitY);
drawSolidPlanet(equatRadius, polarRadius, 1, 40, 40);
glPopMatrix();
}
Jeśli jestem daleko od tego, co robię czy możesz wskazać mi na dobry samouczek? Przeczytałem kilka, ale myślę, że nie rozumiałem ich tak jak myślałem. Jeśli jestem na dobrej drodze, czy możesz pokazać mi, gdzie się mylę i co muszę zrobić dobrze?
Wygląda dobrze dla mnie, co dokładnie próbujesz osiągnąć? Być może nie zrozumiałem poprawnie. –
Podam tutaj inny obraz ... Światło Ziemi nie pochodzi od Słońca. – TRod
Och, masz na myśli cień z księżyca na Ziemi. Trudno było odróżnić od obrazu. –