2012-04-05 2 views
2

지금 glutSolidSphere를 사용하여 50k + 구인 다중 구 속도가 매우 낮습니다.OpenGL을 사용하여 50k 구를 그리는 속도를 향상시키는 방법

속도를 높이는 방법이나 제안이 있습니까?

아래

내 코드는 ... 자세한 내용은

void COpenGlWnd::OnPaint() 
{ 
    CPaintDC dc(this); 
    ::wglMakeCurrent(m_hDC, m_hRC); 
    for(int k = 0; k < m_nCountZ; k++) 
    { 
     for(int j = 0; j < m_nCountY; j ++) 
     { 
      for(int i = 0; i < m_nCountX; i ++) 
      { 
      ::glPushMatrix(); 
      ........ 
      ::glutSolidSphere(Size[i][j][k], 36, 36); 
      ........ 
      ::glPopMatrix(); 
      } 
     } 
    } 
    ::SwapBuffers(m_hDC); 
} 

: 구 항상 특정 위치에있을 것입니다 만, 사용자가 회전 차이보기에서 모든 영역을 볼 마우스를 사용할 수 있습니다.

+0

자세한 내용은 – Nick

답변

5

여기에서 몇 가지 제안 사항입니다 :

  1. 이 영역이 포함 된 버텍스 버퍼 오브젝트 (VBO)를 만들고 glutSolidSphere을 사용하는 대신이 렌더링.
  2. 인스 턴싱을 살펴보십시오. 즉, 한 번의 드로 콜로 많은 영역을 그리는 것입니다.

다음 글 거의 정확하게 당신이 원하는 것을 : http://sol.gfxile.net/instancing.html

+0

고마워요. – Nick

+0

구체가 모두 정적 인 경우 (게시 한 후에 작성 됨) VBO가 분명히 방법입니다. 가능한 많은 수의 영역을 포함하는 버퍼 모음입니다. – GManNickG

+0

@ NicolBolas : Hm? 전 수백 또는 수천 개의 미리 생성되고 사전 변환 된 구체를 꼭지점 버퍼에 압축하여 (빈 공간을 가로 지르는 축퇴 삼각형을 사용하는) 말한 다음 한 번만 호출하면됩니다. – GManNickG

관련 문제