Я предполагаю, что координаты (x1
, y1
, z1
) - это минимум куба, а координаты - максимум (x1
, y1
, z1
). e.g.:
self.cuboid(0, 0, 0, 1, 1, 1, self.tex)
Если куб нарисован в пространстве вида, то:
Ось X указывает налево. Текстура left
должна быть размещена там, где координаты x всех вершин x1
, и текстура right
, где координаты x x2
:
self.batch.add(4, GL_QUADS, right, ('v3f',(x1,y1,z1, x1,y1,z2, x1,y2,z2, x1,y2,z1)), tex_coords)
self.batch.add(4, GL_QUADS, left, ('v3f',(x2,y1,z2, x2,y1,z1, x2,y2,z1, x2,y2,z2)), tex_coords)
Ось Y направлена вверх. Таким образом, bottom
- это где координаты y равны y1
, а верхняя часть - там, где координаты y равны y2
:
self.batch.add(4, GL_QUADS, bottom, ('v3f',(x1,y1,z1, x2,y1,z1, x2,y1,z2, x1,y1,z2)), tex_coords)
self.batch.add(4, GL_QUADS, top, ('v3f',(x1,y2,z2, x2,y2,z2, x2,y2,z1, x1,y2,z1)), tex_coords)
В Правосторонней системе ось z указывает за пределы вида. Ось z - это Перекрестное произведение от оси X и оси Y.
Это приводит к тому, что front
необходимо размещать там, где координаты z равны z2
, и back
, где координаты z равны z1
:
.
self.batch.add(4, GL_QUADS, back, ('v3f',(x2,y1,z1, x1,y1,z1, x1,y2,z1, x2,y2,z1)), tex_coords)
self.batch.add(4, GL_QUADS, front, ('v3f',(x1,y1,z2, x2,y1,z2, x2,y2,z2, x1,y2,z2)), tex_coords)
Метод cuboid
:
def cuboid(self, x1,y1,z1, x2,y2,z2, tex):
'''
Draws a cuboid from x1,y1,z1 to x2,y2,z2 and covers each side with tex\n
tex format:\n
(front, back, left, right, top, bottom)
Facing in the -z direction
'''
front = tex[0]
back = tex[1]
left = tex[2]
right = tex[3]
top = tex[4]
bottom = tex[5]
tex_coords = ("t2f", (0,0, 1,0, 1,1, 0,1))
self.batch.add(4, GL_QUADS, right, ('v3f',(x1,y1,z1, x1,y1,z2, x1,y2,z2, x1,y2,z1)), tex_coords)
self.batch.add(4, GL_QUADS, left, ('v3f',(x2,y1,z2, x2,y1,z1, x2,y2,z1, x2,y2,z2)), tex_coords)
self.batch.add(4, GL_QUADS, bottom, ('v3f',(x1,y1,z1, x2,y1,z1, x2,y1,z2, x1,y1,z2)), tex_coords)
self.batch.add(4, GL_QUADS, top, ('v3f',(x1,y2,z2, x2,y2,z2, x2,y2,z1, x1,y2,z1)), tex_coords)
self.batch.add(4, GL_QUADS, back, ('v3f',(x2,y1,z1, x1,y1,z1, x1,y2,z1, x2,y2,z1)), tex_coords)
self.batch.add(4, GL_QUADS, front, ('v3f',(x1,y1,z2, x2,y1,z2, x2,y2,z2, x1,y2,z2)), tex_coords)