嵌套循环显然没有在PyOpenGL中循环

时间:2013-03-26 03:47:41

标签: python opengl loops pyopengl

我很确定这是我在Python循环语法中的错误,但我不能为我的生活找出错误。

我在OSX上使用Python和PyOpenGL和GLUT作为一个非常基本的程序:它旨在绘制一个3D网格(0,0,0)。我已经设法在给定的高度生成2D网格(所以在y = 10时有一个网格,从x = -10到x = 10,从z = -10到z = 10),但我无法做到迭代y坐标。

This screenshot should help to show what I mean。我想要的情况是,在y = 0之上会有十个这样的平面网格,而在下面会有十个这样的平面网格,形成一个立方体。后来,我也会把它扩展到y轴上的线,但我之前已经半成就了(和我现在一样的问题)所以没什么大不了的。

有人请让我知道我的代码有什么问题吗?这似乎是一个相当简单的问题,但我已经浪费了几个小时,并且真的很感激一些帮助。

一些免责声明:

我知道GLUT是旧技术并且大部分代码都已被弃用,但这个项目与此不同。

我需要经历并在某些时候改变z和x-coords中的“-10到10”常数,但是一旦我做了这件事,那个方法应该是直截了当的。

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

1 个答案:

答案 0 :(得分:2)

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

这是代码的最小版本,用于打印i和j而不是绘制内容 (下面的'print'适用于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