Untitled

 avatar
unknown
plain_text
a year ago
3.6 kB
5
Indexable
from OpenGL.GL import *
from OpenGL.GLUT import *
from OpenGL.GLU import *
from PIL import Image
import pygame
import sys

# Положение фигур по оси Y
cone_y = 0.0
cube_y = 0.0
cylinder_y = 0.0

texture_id = None

def load_texture(filename):
    img = Image.open(filename)
    img_data = img.tobytes()
    width, height = img.size

    global texture_id
    texture_id = glGenTextures(1)  # Генерируем идентификатор текстурного объекта
    glBindTexture(GL_TEXTURE_2D, texture_id)  # Привязываем текстурный объект
    glTexParameter(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR)
    glTexParameter(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR)
    glTexParameter(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT)
    glTexParameter(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT)

    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, img_data)

def draw_cube():
    glPushMatrix()
    glTranslatef(0, cube_y, 0)

    glScalef(2.0, 2.0, 2.0)

    glEnable(GL_TEXTURE_2D)
    glBindTexture(GL_TEXTURE_2D, texture_id)  # Привязываем текстурный объект

    set_material()  # Установка свойств материала для куба

    glBegin(GL_QUADS)

    # Грань 1
    glTexCoord2f(0.0, 0.0)
    glVertex3f(-1, -1, -1)
    glTexCoord2f(1.0, 0.0)
    glVertex3f(1, -1, -1)
    glTexCoord2f(1.0, 1.0)
    glVertex3f(1, 1, -1)
    glTexCoord2f(0.0, 1.0)
    glVertex3f(-1, 1, -1)

    # Грань 2
    glTexCoord2f(0.0, 0.0)
    glVertex3f(1, -1, -1)
    glTexCoord2f(1.0, 0.0)
    glVertex3f(1, -1, 1)
    glTexCoord2f(1.0, 1.0)
    glVertex3f(1, 1, 1)
    glTexCoord2f(0.0, 1.0)
    glVertex3f(1, 1, -1)

    # Грань 3
    glTexCoord2f(0.0, 0.0)
    glVertex3f(1, -1, 1)
    glTexCoord2f(1.0, 0.0)
    glVertex3f(-1, -1, 1)
    glTexCoord2f(1.0, 1.0)
    glVertex3f(-1, 1, 1)
    glTexCoord2f(0.0, 1.0)
    glVertex3f(1, 1, 1)

    # Грань 4
    glTexCoord2f(0.0, 0.0)
    glVertex3f(-1, -1, 1)
    glTexCoord2f(1.0, 0.0)
    glVertex3f(-1, -1, -1)
    glTexCoord2f(1.0, 1.0)
    glVertex3f(-1, 1, -1)
    glTexCoord2f(0.0, 1.0)
    glVertex3f(-1, 1, 1)

    # Грань 5
    glTexCoord2f(0.0, 0.0)
    glVertex3f(-1, 1, -1)
    glTexCoord2f(1.0, 0.0)
    glVertex3f(1, 1, -1)
    glTexCoord2f(1.0, 1.0)
    glVertex3f(1, 1, 1)
    glTexCoord2f(0.0, 1.0)
    glVertex3f(-1, 1, 1)

    # Грань 6
    glTexCoord2f(0.0, 0.0)
    glVertex3f(-1, -1, 1)
    glTexCoord2f(1.0, 0.0)
    glVertex3f(1, -1, 1)
    glTexCoord2f(1.0, 1.0)
    glVertex3f(1, -1, -1)
    glTexCoord2f(0.0, 1.0)
    glVertex3f(-1, -1, -1)

    glEnd()

    glDisable(GL_TEXTURE_2D)

    glPopMatrix()

def set_material():
    mat_ambient = (0.2, 0.2, 0.2, 1.0)
    mat_diffuse = (0.8, 0.8, 0.8, 1.0)
    mat_specular = (0.0, 0.0, 0.0, 1.0)
    mat_shininess = 0.0  # Матовое покрытие

    glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient)
    glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse)
    glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular)
    glMaterialf(GL_FRONT, GL_SHININESS, mat_shininess)

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

    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)
        load_texture("/home/bersiv/Labs/CG/images.jpg")
        draw_cube()

        pygame.display.flip()
        pygame.time.wait(10)

main()
Editor is loading...