Python 在PyOpenGL中嵌套循环显然没有循环
我很确定这就是我在Python循环语法中的错误,但我一辈子都搞不清楚到底出了什么问题 我正在OSX上使用Python和PyOpenGL以及GLUT来实现一个非常基本的程序:它旨在围绕(0,0,0)绘制一个3D网格。我已经设法在给定的高程上生成了二维网格(因此在y=10处有一个网格,从x=-10到x=10,从z=-10到z=10),但我无法使它在y坐标中迭代 。我的设想是,在y=0上方和下方各有十个平面网格,形成一个立方体。稍后,我也会将其扩展到y轴上的直线,但我以前已经半实现了这一点(与我现在遇到的问题相同),所以没什么大不了的 有人能告诉我我的代码有什么问题吗?这似乎是一个相当简单的问题,但我已经在这上面浪费了几个小时,非常感谢您的帮助 以下是一些免责声明: 我知道GLUT是一种古老的技术,并且大多数代码都不推荐使用,但是这个项目并不是这样的 在某个时候,我需要遍历并更改z坐标和x坐标中的“-10到10”常数,但是一旦我让y坐标工作起来,这个方法应该很简单Python 在PyOpenGL中嵌套循环显然没有循环,python,opengl,loops,pyopengl,Python,Opengl,Loops,Pyopengl,我很确定这就是我在Python循环语法中的错误,但我一辈子都搞不清楚到底出了什么问题 我正在OSX上使用Python和PyOpenGL以及GLUT来实现一个非常基本的程序:它旨在围绕(0,0,0)绘制一个3D网格。我已经设法在给定的高程上生成了二维网格(因此在y=10处有一个网格,从x=-10到x=10,从z=-10到z=10),但我无法使它在y坐标中迭代 。我的设想是,在y=0上方和下方各有十个平面网格,形成一个立方体。稍后,我也会将其扩展到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
从OpenGL.GL导入*
从OpenGL.GLUT导入*
从OpenGL.GLU导入*
网格_范围=10
def DrawGLScene():
i=0
j=0
fl_范围=浮动(网格_范围)
虽然(j看起来您只需要在循环中将“i”变量重置为零。也有可能您的i+=1和j+=1缩进不够,但这可能只是一个复制/粘贴问题。
为了调试这样的问题,我经常添加打印并尽可能简化代码。
这是您的代码的最低版本,它打印i和j而不是绘制东西。
(下面的“打印”适用于Python2.x。如果您使用的是Python3,请在打印行中添加括号)
以下是一些关于python循环的额外背景知识,以防有所帮助:
第一行马上就解决了这个问题。谢谢!我在“j+=1”之后添加了“I=0”,现在就完美了。我知道我遗漏了一些基本的东西。还感谢Python循环文档,因为它们在某些时候可能会有用。太好了!很高兴您能使用它-从代码中获取图形输出总是很有趣的
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
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