Python 用OpenGL制作太阳系
我试图在OpenGL中创建一个太阳系,但这个星球并没有围绕太阳旋转。这是围绕另一个轴旋转的。如何解决这个问题 首先,我画了一个太阳,然后,第一颗行星旋转,平移,再旋转。所以它应该绕着太阳旋转,绕着它自己的轴旋转,但这并没有发生 我还想画一个行星旋转的圆圈。如何在XZ平面上画圆(可能)Python 用OpenGL制作太阳系,python,opengl,graphics,3d,pyopengl,Python,Opengl,Graphics,3d,Pyopengl,我试图在OpenGL中创建一个太阳系,但这个星球并没有围绕太阳旋转。这是围绕另一个轴旋转的。如何解决这个问题 首先,我画了一个太阳,然后,第一颗行星旋转,平移,再旋转。所以它应该绕着太阳旋转,绕着它自己的轴旋转,但这并没有发生 我还想画一个行星旋转的圆圈。如何在XZ平面上画圆(可能) 这颗行星应该在太阳后面运行(一段时间内是看不见的),然后它回来后就可以看到了,但这并没有发生 必须启用深度测试并清除深度缓冲区 深度测试可通过启用。默认深度函数为GL\u LESS。这会导致跳过之前绘制的片段后面的
这颗行星应该在太阳后面运行(一段时间内是看不见的),然后它回来后就可以看到了,但这并没有发生 必须启用深度测试并清除深度缓冲区 深度测试可通过启用。默认深度函数为
GL\u LESS
。这会导致跳过之前绘制的片段后面的片段:
在每帧之前,必须清除深度缓冲区,以重新启动此过程
在显示的开始处,将以下行添加到代码中:
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT )
glEnable( GL_DEPTH_TEST )
当然,您必须创建具有深度缓冲区()的窗口:
请参见预览:
你能告诉我如何在行星旋转的地方画圆圈吗 我建议使用来设置模拟。以下示例显示了太阳、地球和月球(当然,这是一个非常简单的模拟,其大小和距离关系完全错误):
这颗行星应该在太阳后面(一段时间内看不见),然后它回来后就可以看到,但这并不是真的。如果你想看到真实的东西,可以使用开普勒方程。更好的做法是对每个身体的矩阵进行不同的管理,以获取更多信息,请参见开普勒计算位置、时间和周期的方向,并构建矩阵。。。因为glRotate不会给出椭圆轨迹……你能告诉我如何在行星旋转的地方画一个圆吗?
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT )
glEnable( GL_DEPTH_TEST )
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH)
import time
start_time = time.time()
def display():
t = time.time() - start_time
year_period = 5.0 # 5 seconds for simulating one year
year = (t / year_period)
day = 365 * year
moon_sid = (365 / 27.3) * year
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT )
glEnable( GL_DEPTH_TEST )
glColor4f (1.0, 1.0, 0, 1)
glPushMatrix()
glutSolidSphere(1.0, 20, 16) # sun
glRotatef(year*360.0, 0.0, 1.0, 0.0) # earth rotation around the sun
glTranslatef(3.0, 0.0, 0.0) # earth location
glPushMatrix() # push earth system
glPushMatrix()
glRotatef(day*360.0, 0.0, 1.0, 0.0) # earth spinn
glRotatef(90-23.4, 1.0, 0.0, 0.0) # earth axis
glColor3f (0, 0, 1) # blue
glutWireSphere(0.3, 10, 8) # earth
glPopMatrix()
glPushMatrix()
glRotatef(moon_sid*360.0, 0.0, 1.0, 0.0) # moon sidereal
glTranslatef(1.0, 0.0, 0.0) # distance moon to earth
glRotatef(90, 1.0, 0.0, 0.0)
glColor4f (0.4, 0.5, 0.6, 1)
glutWireSphere(0.1, 10, 8) # moon
glPopMatrix()
glPopMatrix() # pop earth system
glPopMatrix()
glutSwapBuffers()