1

我很确定这是我在 Python 循环语法中的错误,但我终生无法弄清楚出了什么问题。

我在 OSX 上将 Python 与 PyOpenGL 和 GLUT 一起用于一个非常基本的程序:它旨在在 (0,0,0) 周围绘制一个 3D 网格。我已经设法在给定的高度生成了 2D 网格(所以在 y=10 从 x=-10 到 x=10 和从 z=-10 到 z=10 有一个网格),但我做不到遍历 y 坐标。

这个屏幕截图应该有助于说明我的意思。我的预期场景是在 y=0 上方有 10 个这些平面网格,在 y=0 下方有 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
4

1 回答 1

2

看起来您只需在循环中将“i”变量重置为零。您的 i+=1 和 j+=1 也可能缩进不够,但这可能只是复制/粘贴问题。为了调试这样的问题,我经常添加打印并尽可能简化代码。

这是打印 i 和 j 而不是绘制东西的代码的最小版本。
(下面的“打印”适用于 python 2.x。如果您使用的是 Python 3,请在打印行添加括号)

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


此外,对于您示例中的循环,使用“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


如果有帮助,这里有一些关于 python 循环的额外背景:

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

于 2013-03-26T05:43:39.043 回答