import sys from OpenGL.GL import * from OpenGL.GLUT import * from OpenGL.GLU import * from PIL import Image from time import time from transition import Transition display_time = 2.0 transition_duration = 0.5 # Load image as a texture using PIL def load_texture(image_path): img = Image.open(image_path) img = img.convert("RGBA") # Ensure the image is in RGBA mode (4 channels: R, G, B, A) img_data = img.tobytes("raw", "RGBA", 0, -1) # Convert image data to bytes texture_id = glGenTextures(1) glBindTexture(GL_TEXTURE_2D, texture_id) glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, img.width, img.height, 0, GL_RGBA, GL_UNSIGNED_BYTE, img_data) glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR) glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR) return texture_id # Main display function transition = Transition() def display(): global start_time, image_time, last_time, alpha, texture_id1, texture_id2 current_time = time() alive_time = current_time - start_time delta_time = current_time - last_time last_time = current_time image_time += delta_time if (image_time < display_time): return glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) glLoadIdentity() # Get window size window_width, window_height = glutGet(GLUT_WINDOW_WIDTH), glutGet(GLUT_WINDOW_HEIGHT) # DRAW transition_time = image_time - display_time complete = transition.draw(texture_id1, texture_id2, window_width, window_height, delta_time, transition_time, transition_duration) glClearColor(0.0, 0.0, 0.0, 1.0) # Set the background color to black glutSwapBuffers() if (complete): image_time = 0 texture_id1, texture_id2 = texture_id2, texture_id1 # Initialization and main loop def main(): global texture_id1, texture_id2, alpha, last_time, start_time, image_time # Initialize the window glutInit(sys.argv) glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB) glutCreateWindow("Image Viewer with Fade Transition") glEnable(GL_TEXTURE_2D) # Load two images for transition texture_id1 = load_texture("image1.jpg") texture_id2 = load_texture("image2.jpg") alpha = 0.0 # Start with fully transparent image_time = 0 start_time = time() last_time = time() # Set up the OpenGL viewport and projection glMatrixMode(GL_PROJECTION) glLoadIdentity() glOrtho(-1, 1, -1, 1, -1, 1) glMatrixMode(GL_MODELVIEW) glutDisplayFunc(display) glutIdleFunc(display) glutMainLoop() if __name__ == "__main__": main()