太阳作为光源使用opengl和c

太阳作为光源使用opengl和c,第1张

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

这是我没有照明的照片.

这是与照明相同的程序.

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

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

这是绘制系统的代码

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,anglePlanet 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);//EARTHPlanet 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 pathdrawCircle(800,720,1,50);//EARTH'S MOONPlanet 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);并将光源的位置设置为太阳的中心. 总结

以上是内存溢出为你收集整理的太阳作为光源使用opengl和c全部内容,希望文章能够帮你解决太阳作为光源使用opengl和c所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1239058.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存