Untitled
unknown
plain_text
2 years ago
3.6 kB
7
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...