gpt4 book ai didi

python - 尝试创建 3x3x3 立方体,但在 OpenGL 中创建了 4x4x4

转载 作者:行者123 更新时间:2023-12-01 07:42:13 25 4
gpt4 key购买 nike

我正在尝试创建 3d rubiks 立方体,但是尺寸与尺寸集不对齐。当我将尺寸设置为 3 并创建一个 3x3x3 立方体时,我最终创建了一个 4x4x4 立方体。但是,当我将维度设置为 2 时,它会创建一个 3x3x3 的立方体,而当维度设置为 1 时,会创建一个 1x1x1 的立方体。有人可以帮忙吗?谢谢!

立方体代码:

#imports
dim = 3
cube = [[['#' for c in range(dim)] for c in range(dim)] for r in range(dim)]

for i in range(dim):
for j in range(dim):
for k in range(dim):
print(cube[i][j][k], end='')
print()
print()

for i in range(dim):
for j in range(dim):
for k in range(dim):
scale = 0.5
cube[i][j][k] = Piece(i * scale, j * scale, k * scale, scale)

def Cube():
for i in range(dim):
for j in range(dim):
for k in range(dim):
p = cube[i][j][k]
p.draw()


def main():
pygame.init()
display = (1200, 1000)
pygame.display.set_mode(display, DOUBLEBUF | OPENGL)

gluPerspective(45, (display[0] / display[1]), 0.1, 50)

glClearColor(0.6, 0.6, 0.6, 0)
glTranslatef(0.0, 0.0, -5)
glRotatef(45, 1, 1, 0)

while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
quit()
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
Cube()
pygame.display.flip()
pygame.time.wait(10)


main()

单件代码:

from OpenGL.GL import *

colors = (
# white
(1, 1, 1),
# blue
(1, 1, 0),
# orange
(1, 0, 0),
# red
(1, 0.5, 0.1),
# green
(0, 1, 0),
# yellow
(0, 0, 1),
)

edges = [(0, 1), (1, 2), (2, 3), (3, 0), (4, 5), (5, 6),
(6, 7), (7, 4), (0, 4), (1, 5), (2, 6), (3, 7)]
surfaces = [(0, 1, 2, 3), (5, 4, 7, 6), (4, 0, 3, 7), (1, 5, 6, 2),
(4, 5, 1, 0), (3, 2, 6, 7)]


class Piece:

def __init__(self, x, y, z, length):
self.x = x
self.y = y
self.z = z
self.len = length

self.v = [
(self.x - self.len, self.y - self.len, self.z - self.len),
(self.x + self.len, self.y - self.len, self.z - self.len),
(self.x + self.len, self.y + self.len, self.z - self.len),
(self.x - self.len, self.y + self.len, self.z - self.len),
(self.x - self.len, self.y - self.len, self.z + self.len),
(self.x + self.len, self.y - self.len, self.z + self.len),
(self.x + self.len, self.y + self.len, self.z + self.len),
(self.x - self.len, self.y + self.len, self.z + self.len),
]


def getVertices(self):
return self.x, self.y, self.z

def draw(self):
glEnable(GL_DEPTH_TEST)

glLineWidth(5)
glColor3fv((0, 0, 0))
glBegin(GL_LINES)
for edge in edges:
glVertex3fv(self.v[edge[0]])
glVertex3fv(self.v[edge[1]])
glEnd()

glEnable(GL_POLYGON_OFFSET_FILL)
glPolygonOffset(1.0, 1.0)

glBegin(GL_QUADS)
for i, quad in enumerate(surfaces):
glColor3fv(colors[i])
for iv in quad:
glVertex3fv(self.v[iv])
glEnd()

glDisable(GL_POLYGON_OFFSET_FILL)

最佳答案

看起来可能是这样,因为您的作品重叠。

您可以按照规模的距离创作作品。如果我们将其可视化为一维,我们会得到(s 代表 scale):

          o         o         o  
`-- s --´ `-- s --´

这些片段在 pos - lenpos + len 之间延伸。您设置len = scale。因此,您得到的是:

           ---------o--------- 
---------o--------- ---------o----------
`-- s --´ `-- s --´

要解决此问题,您应该指定间距一半的长度。所以,要么:

cube[i][j][k] = Piece(2 * i * scale, 2 * j * scale, 2 * k * scale, scale)

cube[i][j][k] = Piece(i * scale, j * scale, k * scale, 0.5 * scale)

关于python - 尝试创建 3x3x3 立方体,但在 OpenGL 中创建了 4x4x4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56640083/

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