Помощь в отладке кода по практическому заданию

alexgor

Новичок
Пользователь
Фев 10, 2025
2
0
1
По заданию, нужно написать код для вращающейся пирамиды с квадратным (треугольным) основанием.
Написал код по аналогии с примером и он не работает. В учебном примере кода, с кубом, работает, а мой, аналогичный, пирамида - не работает. Помогите разобраться. Пайтон версия 3.8.8
Код примера, куб, который работает:
import pygame
from pygame.locals import *
from OpenGL.GL import *
from OpenGL.GLU import *
def Cube(vertices, edges):
glBegin(GL_LINES)
for edge in edges:
for vertex in edge:
glVertex3fv(vertices[vertex])
glEnd()

#<img src="http://grafika.me/files/les_screens...2-24-12-22-21-_online-video-cutter.com__0.gif" width="650" height="488" alt="" title="" />

def main():
vertices = (
(1.0, -1.0, -1.0),
(1.0, 1.0, -1.0),
(-1.0, 1.0, -1.0),
(-1.0, -1.0, -1.0),
(1.0, - 1.0, 1.0),
(1.0, 1.0, 1.0),
(-1.0, -1.0, 1.0),
(-1.0, 1.0, 1.0)
)

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

pygame.init()
display = (800, 600)
pygame.display.set_mode(display, DOUBLEBUF|OPENGL)

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

glTranslatef(0.0, -1.0, -10)
glRotatef(20, 10, 0, 0)

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

main()

Код пирамиды, мой, который не работает:

import pygame
from pygame.locals import *
from OpenGL.GL import *
from OpenGL.GLU import *

def Pyramid(vertices, edges):
glBegin(GL_LINES)
for edge in edges:
for vertex in edge:
glVertex3fv(vertices[vertex])
glEnd()

def main():
vertices = (
(1.0, 0.0, 1.0),
(1.0, 0.0, -1.0),
(-1.0, 0.0, -1.0),
(-1.0, 0.0, 1.0),
(0.0, 1.0, 0.0)
)

edges = (
(0, 1),
(0, 2),
(0, 3),
(0, 4),
(1, 2),
(1, 4),
(3, 2),
(3, 4)
)

pygame.init()
display = (800, 600)
pygame.display.set_mode(display, DOUBLEBUF|OPENGL)

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

glTranslatef(0.0, -1.0, -10)
glRotatef(20, 10, 0)

while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
quit()
glRotatef(0, 1, 0)
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT)
Pyramid(vertices, edges)
pygame.display.flip()
pygame.time.wait(10)

main()

Помогите разобраться начинающему :(
 

Вложения

  • Пирамида Код не работает.jpg
    Пирамида Код не работает.jpg
    122,3 КБ · Просмотры: 3
  • Пример, Куб,работает.jpg
    Пример, Куб,работает.jpg
    98 КБ · Просмотры: 3

PYDEV

Модератор
Команда форума
Модератор
Авг 31, 2023
81
22
8
 

4olshoy_blen

Популярный
Пользователь
Ноя 13, 2022
451
126
43
Нужно всего лишь подобрать правильные вершины и ребра к тетраэдру и внимательно переписывать с примера

Python:
import pygame
from pygame.locals import *
from OpenGL.GL import *
from OpenGL.GLU import *


def pyramid(vertices, edges):
    glBegin(GL_LINES)
    for edge in edges:
        for vertex in edge:
            glVertex3fv(vertices[vertex])
    glEnd()


def main():
    vertices = (
        (0, 1, 0),
        (-1, -1, 1),
        (1, -1, 1),
        (0, -1, -1)
    )

    edges = (
        (0, 1), (0, 2), (0, 3),
        (1, 2), (2, 3), (3, 1)
    )

    pygame.init()
    display = (800, 600)
    pygame.display.set_mode(display, DOUBLEBUF | OPENGL)

    gluPerspective(45, (display[0] / display[1]), 0.1, 50.0)
    glTranslatef(0.0, -1.0, -10)

    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                quit()

        glRotatef(1, 0, 1, 0)
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
        pyramid(vertices, edges)
        pygame.display.flip()
        pygame.time.wait(10)


main()
 
  • Мне нравится
Реакции: alexgor

alexgor

Новичок
Пользователь
Фев 10, 2025
2
0
1
спасибо, разобрался!
 

Вложения

  • пирамида.jpg
    пирамида.jpg
    30,9 КБ · Просмотры: 3

Форум IT Специалистов