1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
|
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()
|