我很确定这是我在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
答案 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