嵌套循环显然不是PyOpenGL中的循环

2024-09-30 16:31:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我不确定Python的语法在我的生活中是错误的。在

我在OSX上使用Python和PyOpenGL和GLUT来实现一个非常基本的程序:它的目的是在(0,0,0)周围绘制一个三维网格。我已经成功地在给定的高度生成了二维网格(所以在y=10处有一个网格,从x=-10到x=10,从z=-10到z=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

Tags: 代码fromimport网格rangegridopengllines
1条回答
网友
1楼 · 发布于 2024-09-30 16:31:58

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

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

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”循环更简单。这样的方法应该有效:

^{pr2}$


下面是一些关于python循环的额外背景知识,以防有帮助:

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

相关问题 更多 >