Haskell 在OpenGL中绘制天球

Haskell 在OpenGL中绘制天球,haskell,opengl,glut,opengl-compat,Haskell,Opengl,Glut,Opengl Compat,我试图在OpenGL中从内部(从太阳系的角度)绘制天球。我希望能够转动相机,看到银河系中的星星 我使用OpenGL3(和Glut),因为它在Haskell中得到了很好的支持。我使用的是纹理,因为这对于我的目的来说似乎足够简单。我不想让它变得难以置信的准确,也不想在上面花太多时间。我将此图像用作纹理: 我的代码要点如下: render tex i = do -- Clear background ... -- paint sphere GL.matrixM

我试图在OpenGL中从内部(从太阳系的角度)绘制天球。我希望能够转动相机,看到银河系中的星星

我使用OpenGL3(和Glut),因为它在Haskell中得到了很好的支持。我使用的是纹理,因为这对于我的目的来说似乎足够简单。我不想让它变得难以置信的准确,也不想在上面花太多时间。我将此图像用作纹理:

我的代码要点如下:

render tex i = do
  -- Clear background
  ...            

  -- paint sphere
  GL.matrixMode $= GL.Modelview 0                                               
  GL.loadIdentity                                                               
  GL.texture GL.Texture2D $= GL.Enabled                                         
  GL.textureBinding Texture2D $= Just tex                                       
  GL.rotate (90+i) (Vector3 0.0 1.0 (0.0 :: GLfloat)) -- turn image around
                                                      -- just because
  GL.rotate 90 (Vector3 1.0 0.0 (0.0 :: GLfloat))     -- turn image sideways
                                                      -- to align with ecliptic                          
  GL.preservingMatrix $                                                     
    Quad.renderQuadric myStyle sphere                                           

  GLUT.swapBuffers                                                              
  GL.texture GL.Texture2D $= GL.Disabled                                        
  render tex (i+0.04)
如果球体很小(例如,1个单位,不管这意味着什么),就会画出一些东西:它看起来就像是另一个天体。但是如果我开始把它放大,这样观众就在里面,然后在中间打开一个洞,最后它就消失了。我所看到的只是背景

我想看看球体的内部


我做错了什么?

如果使用
glScalef(-1,-1,-1)将球体翻转过来,会发生任何变化。
?可能还必须执行
glFrontFace(GL_CW)
,因为负比例将翻转所有三角形/四边形绕组。这可能是因为相机的远平面也会剪裁几何体。如果您的意思是在球体的地下,请关闭
GL_CULL_FACE
,否则其Z近平面剪裁。再看看这个:其中的子链接涵盖了您将遇到的所有子任务。。。这可能有点帮助too@Mokosha听起来更像是znear剪辑(问题开始于接近时)发布一个如何?如果使用
glScalef(-1,-1,-1)
将球体翻转过来,会有什么变化吗?可能还必须执行
glFrontFace(GL_CW)
,因为负比例将翻转所有三角形/四边形绕组。这可能是因为相机的远平面也会剪裁几何体。如果您的意思是在球体的地下,请关闭
GL_CULL_FACE
,否则其Z近平面剪裁。再看看这个:其中的子链接涵盖了您将遇到的所有子任务。。。这可能有点帮助too@Mokosha听起来更像是znear剪辑(问题从接近时开始)发布一篇文章怎么样?