2013-03-26 4 views
1

필자는 이것이 파이썬의 루핑 구문에서의 구체적 오류라고 확신하지만, 내 인생에서 틀린 것이 무엇인지 파악할 수는 없습니다.PyOpenGL에서 중첩 루프가 분명히 루핑되지 않음

저는 아주 기본적인 프로그램을 위해 PyXpen과 GLUT를 사용하여 OSX에서 파이썬을 사용하고 있습니다 : 그것은 (0,0,0) 주위에 3D 그리드를 그리기위한 것입니다. 주어진 높이에서 2D 그리드를 생성했습니다. (그래서 x = -10에서 x = 10까지, z = -10에서 z = 10까지 y = 10에 그리드가 있습니다.) 그러나 나는 그것을 만들 수 없습니다. y 좌표를 반복합니다.

This screenshot should help to show what I mean. 내 의도 된 시나리오는 큐브를 형성하는 y = 0 및 10 아래에 이러한 평면 그리드가 10 개 존재한다는 것입니다. 나중에 역시 y 축의 선으로 확장하겠습니다. 그러나 이전에 같은 문제가 발생하지 않았으므로 큰 문제는 없습니다.

내 코드에 어떤 문제가 있는지 알려주십시오. 그것은 꽤 간단한 문제처럼 보이지만, 이것에 대해 몇 시간을 낭비했고, 정말로 도움이 될 것입니다.

부인의 몇 :

내가 그 GLUT이 코드의 대부분이 사용되지 않습니다 오래된 기술이며, 알고 있어요,하지만이 프로젝트가 그것에 대해하지 않습니다.

어떤 시점에서 z- 및 x- 좌표에서 "-10-10"상수를 변경해야하지만이 y가 작동하면 해당 방법은 간단해야합니다. 당신은 당신의 루프에서 제로로 당신의 '난'변수를 재설정해야처럼

from OpenGL.GL import * 
from OpenGL.GLUT import * 
from OpenGL.GLU import * 

grid_range = 10 

def DrawGLScene(): 

    i = 0 
    j = 0 
    fl_range = float(grid_range) 

    while (j <= (grid_range*2)): 
     while (i <= (grid_range*2)): 
      # x grid 
      glColor3f(0.0, 1.0, 0.0) 
      glBegin(GL_LINES) 
      glVertex3f(grid_range - i, grid_range - j, -10) 
      glVertex3f(grid_range - i, grid_range - j, 10) 
      glEnd() 

      # z grid 
      glColor3f(0.0, 0.0, 1.0) 
      glBegin(GL_LINES) 
      glVertex3f(-10, grid_range - j, grid_range - i) 
      glVertex3f(10, grid_range - j, grid_range - i) 
      glEnd() 

     i += 1 
    j += 1 

답변

2

는 것 같습니다. 당신의 i + = 1과 j + = 1은 들여 쓰기가 충분하지 않을 수도 있지만 복사/붙여 넣기 문제 일 수도 있습니다. 이와 같은 문제를 디버깅하려면 종종 인쇄물을 추가하고 가능한 한 코드를 간소화하십시오.

그림을 그리는 대신 i 및 j를 인쇄하는 코드의 최소 버전입니다.
, 그것은에 간단 귀하의 예제에서 루프를 들어,

grid_range = 10 

i = 0 
j = 0 

while (j <= (grid_range * 2)): 

    # Reset i to 0 after completing each loop below. 
    i = 0 

    while (i <= (grid_range * 2)): 

     # OpenGL calls go here. 

     print j, i 

     i += 1 
    j += 1 


또한합니다 ('인쇄'다음은 파이썬 3을 사용하는 경우 인쇄 줄에 괄호를 추가 파이썬 2.x 또는 3.0와 함께 작동) 'for'루프를 사용하십시오. 이런 식으로 뭔가 작업을해야합니다 : 여기

grid_range = 10 

for j in range(grid_range * 2 + 1): 

    for i in range(grid_range * 2 + 1): 

     # OpenGL calls go here. 

     print j, i 


은 도움이 경우 루프 파이썬에 대한 몇 가지 여분의 배경입니다 :

http://docs.python.org/2/tutorial/controlflow.html
http://wiki.python.org/moin/ForLoop

+0

당신은 첫 번째 줄에 즉시 그것을 해결. 고맙습니다! "j = 1"다음에 "i = 0"을 추가 했으므로 지금은 완벽합니다. 나는 내가 무언가를 놓치고 있다는 것을 알았다. 파이썬 루핑 문서를 보내 주셔서 감사합니다. 아마 어느 시점에서 유용 할 것이기 때문에 그 문서를 읽을 것입니다. –

+0

좋아요! 다행스럽게도 코드에서 그래픽 출력을 얻는 것이 항상 재미 있습니다. –