gpt4 book ai didi

python - 在 OpenGL 中近似一个球体

转载 作者:太空宇宙 更新时间:2023-11-03 15:27:30 25 4
gpt4 key购买 nike

我正在尝试使用 http://local.wasp.uwa.edu.au/~pbourke/miscellaneous/sphere_cylinder/ 中的说明来近似球体,但它看起来根本不对。这是我的代码:

def draw_sphere(facets, radius=100):
"""approximate a sphere using a certain number of facets"""

dtheta = 180.0 / facets
dphi = 360.0 / facets

global sphere_list
sphere_list = glGenLists(2)
glNewList(sphere_list, GL_COMPILE)

glBegin(GL_QUADS)

for theta in range(-90, 90, int(dtheta)):
for phi in range(0, 360, int(dphi)):
print theta, phi
a1 = theta, phi
a2 = theta + dtheta, phi
a3 = theta + dtheta, phi + dphi
a4 = theta, phi + dphi

angles = [a1, a2, a3, a4]

print 'angles: %s' % (angles)


glColor4f(theta/360.,phi/360.,1,0.5)

for angle in angles:
x, y, z = angle_to_coords(angle[0], angle[1], radius)
print 'coords: %s,%s,%s' % (x, y, z)
glVertex3f(x, y, z)



glEnd()

glEndList()


def angle_to_coords(theta, phi, radius):
"""return coordinates of point on sphere given angles and radius"""

x = cos(theta) * cos(phi)
y = cos(theta) * sin(phi)
z = sin(theta)

return x * radius, y * radius, z * radius

似乎有些四边形并不简单,即边是交叉的,但改变顶点的顺序似乎没有任何区别。

最佳答案

我这里没有可以同时运行 Python 和 OpenGL 的系统,但无论如何我可以看到一些问题:

您在 range 语句中舍入 dphidtheta。这意味着小平面总是从一个完整的角度开始,但是当您添加未舍入的增量值时,远边不能保证这样做。这是重叠的可能原因。

最好让范围值从 0 .. facets-1 开始,然后将这些索引乘以 360/facets(或 180 对于纬度线)。这将避免舍入错误,例如:

dtheta = 180.0 / facets
dphi = 360.0 / facets

for y in range(facets):
theta = y * dtheta - 90
for x in range(facets):
phi = x * dphi
...

此外,您是否在其他地方转换为弧度? Python 的默认三角函数采用弧度而不是度数。

关于python - 在 OpenGL 中近似一个球体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4727048/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com