以下是一个使用Python和Pygame实现的3D锦鲤屏保示例,基于OpenGL实现3D效果。
需要先安装依赖库:
bash
pip install pygame pyopengl numpy
创建文件 koi_screensaver.py
:
import pygame
from pygame.locals import *
from OpenGL.GL import *
from OpenGL.GLU import *
import numpy as np
import random
import sys
class Koi:
def __init__(self):
self.pos = np.array([random.uniform(-5,5), random.uniform(-3,3), random.uniform(-10,0)])
self.speed = random.uniform(0.3, 0.7)
self.angle = random.uniform(0, 360)
self.body_phase = random.random() * 360
self.color = (random.random(), random.random(), random.random())
def draw_body(self):
glPushMatrix()
glTranslatef(*self.pos)
glRotatef(self.angle, 0, 1, 0)
# 3D鱼身
glColor3f(*self.color)
glBegin(GL_QUAD_STRIP)
for i in range(21):
t = i/20.0
x = 0.5 * np.cos(t * np.pi)
y = 0.2 * np.sin(t * np.pi * 4 + np.radians(self.body_phase))
glVertex3f(x, y, 0.8 - t*1.6)
glVertex3f(x*0.8, y*0.8, 0.8 - t*1.6)
glEnd()
# 鱼鳍
glColor3f(0.9, 0.6, 0.2)
glBegin(GL_TRIANGLES)
glVertex3f(0.3, 0, 0.5)
glVertex3f(0.6, 0, 0.3)
glVertex3f(0.3, 0, 0.1)
glEnd()
glPopMatrix()
def update(self):
self.pos += self.speed * np.array([
np.sin(np.radians(self.angle)),
np.cos(np.radians(self.angle)),
0.1
]) * 0.1
self.body_phase += 5
if abs(self.pos[0]) > 5 or abs(self.pos[1]) > 3:
self.angle += random.uniform(-90, 90)
self.pos[2] = self.pos[2] % 10 - 10
def init_gl():
glEnable(GL_DEPTH_TEST)
glEnable(GL_LIGHTING)
glEnable(GL_LIGHT0)
glLightfv(GL_LIGHT0, GL_POSITION, (5, 5, 5, 1))
glLightfv(GL_LIGHT0, GL_DIFFUSE, (1,1,1,1))
glMaterialfv(GL_FRONT, GL_DIFFUSE, (0.7,0.7,0.7,1))
gluPerspective(45, (16/9), 0.1, 50.0)
glTranslatef(0,0, -10)
def main():
pygame.init()
display = (1920, 1080)
pygame.display.set_mode(display, DOUBLEBUF|OPENGL|FULLSCREEN)
pygame.mouse.set_visible(False)
koies = [Koi() for _ in range(8)]
clock = pygame.time.Clock()
angle = 0
init_gl()
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT or \
event.type == pygame.KEYDOWN or \
event.type == pygame.MOUSEMOTION:
pygame.quit()
sys.exit()
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT)
# 动态视角
angle += 0.1
glLoadIdentity()
gluLookAt(5*np.sin(np.radians(angle)),3,5*np.cos(np.radians(angle)),
0,0,0,
0,1,0)
# 绘制锦鲤
for koi in koies:
koi.draw_body()
koi.update()
# 水底背景
glBegin(GL_QUADS)
glColor3f(0.1,0.2,0.4)
glVertex3f(-10,-2,-10)
glVertex3f(10,-2,-10)
glVertex3f(10,-2,10)
glVertex3f(-10,-2,10)
glEnd()
pygame.display.flip()
clock.tick(30)
if __name__ == "__main__":
main()
安装为屏保的步骤:
-
将文件保存为
koi_screensaver.py
-
安装依赖:
bash
pip install pygame pyopengl numpy
-
创建快捷方式:
-
右键文件 -> 发送到 -> 桌面快捷方式
-
-
重命名快捷方式为
koi_screensaver.scr
-
将.scr文件复制到
C:\Windows\System32
-
设置屏保:
-
右键桌面 -> 个性化 -> 锁屏界面 -> 屏幕保护程序设置
-
选择"koi_screensaver"
-
特点说明:
-
使用OpenGL实现3D渲染
-
多条随机颜色的锦鲤以3D方式游动
-
动态视角缓慢旋转
-
鱼身有波浪形摆动动画
-
支持全屏显示
-
鼠标移动或按键立即退出
注意事项:
-
需要支持OpenGL 2.0以上的显卡
-
首次运行可能需要管理员权限
-
可以通过修改代码中的koies数量调整鱼的数量
-
颜色和速度参数均可自定义调整
可以通过修改Koi类的参数来调整锦鲤的外观和行为特征,比如修改body_phase的变化值可以调整鱼身摆动的速度。