究极炫酷3D立方体宇宙

演示动画:https://life.mdjsjd.me/2024/12/27/3d-cube-animation/

一个使用Python和Pygame制作的炫酷3D立方体动画效果。结合了多种视觉特效,包括:

  • 动态旋转的3D立方体
  • 炫彩渐变的颜色系统
  • 星空背景粒子效果
  • 动态残影拖尾效果
  • 深度透视投影

主要特性

  • 动态变换: 立方体会进行多维度旋转和形变
  • 颜色系统: 支持多种配色方案的平滑渐变
  • 星空背景: 动态的星空粒子背景效果
  • 视觉特效: 包含残影、脉冲等视觉效果

实现细节

该动画主要由以下几个核心类组成:

  • ColorPalette: 处理颜色渐变
  • StarField: 生成星空背景
  • AdvancedCubeAnimation: 控制立方体变换与渲染

使用了多种数学变换矩阵实现3D效果:

  • 旋转矩阵
  • 错切变换
  • 透视投影

运行方式

1.安装依赖:

pip install pygame numpy opencv-python

2.代码:

import pygame
import math
import numpy as np
import random
import cv2
import os# 初始化Pygame
pygame.init()# 屏幕设置
WIDTH, HEIGHT = 1200, 800
screen = pygame.display.set_mode((WIDTH, HEIGHT), pygame.DOUBLEBUF | pygame.HWSURFACE)
pygame.display.set_caption("🚀 究极炫酷3D立方体宇宙 🌌")
clock = pygame.time.Clock()# 颜色和渐变
class ColorPalette:def __init__(self):self.palettes = [[(255, 50, 50), (50, 255, 50), (50, 50, 255)],  # 经典RGB[(255, 100, 0), (255, 200, 0), (200, 0, 255)],  # 霓虹[(0, 255, 255), (255, 0, 255), (255, 255, 0)],  # 赛博朋克[(100, 0, 255), (0, 255, 100), (255, 0, 100)],  # 科技感]self.current_palette = random.choice(self.palettes)self.transition_speed = 0.02self.color_index = 0self.next_color_index = (self.color_index + 1) % len(self.current_palette)self.color_progress = 0def get_interpolated_color(self):start_color = self.current_palette[self.color_index]end_color = self.current_palette[self.next_color_index]r = start_color[0] + (end_color[0] - start_color[0]) * self.color_progressg = start_color[1] + (end_color[1] - start_color[1]) * self.color_progressb = start_color[2] + (end_color[2] - start_color[2]) * self.color_progressself.color_progress += self.transition_speedif self.color_progress >= 1:self.color_progress = 0self.color_index = self.next_color_indexself.next_color_index = (self.color_index + 1) % len(self.current_palette)return (int(r), int(g), int(b))# 背景星空特效
class StarField:def __init__(self, num_stars=200):self.stars = []for _ in range(num_stars):x = random.randint(0, WIDTH)y = random.randint(0, HEIGHT)z = random.uniform(0, 1)self.stars.append([x, y, z])def move_stars(self):for star in self.stars:star[2] -= 0.05if star[2] <= 0:star[0] = random.randint(0, WIDTH)star[1] = random.randint(0, HEIGHT)star[2] = 1def draw(self, screen):for star in self.stars:size = int((1 - star[2]) * 3)brightness = int(255 * (1 - star[2]))color = (brightness, brightness, brightness)pygame.draw.circle(screen, color, (int(star[0]), int(star[1])), size)# 3D变换矩阵(增加更多变换方式)
def create_transformation_matrices():matrices = {'rotate_x': lambda angle: np.array([[1, 0, 0],[0, math.cos(angle), -math.sin(angle)],[0, math.sin(angle), math.cos(angle)]]),'rotate_y': lambda angle: np.array([[math.cos(angle), 0, math.sin(angle)],[0, 1, 0],[-math.sin(angle), 0, math.cos(angle)]]),'rotate_z': lambda angle: np.array([[math.cos(angle), -math.sin(angle), 0],[math.sin(angle), math.cos(angle), 0],[0, 0, 1]]),'shear_x': lambda s: np.array([[1, s, 0],[0, 1, 0],[0, 0, 1]]),'shear_y': lambda s: np.array([[1, 0, 0],[s, 1, 0],[0, 0, 1]])}return matrices# 立方体生成器(增加随机性和复杂性)
def create_dynamic_cube(size=1, complexity=1):half = size / 2base_vertices = np.array([[-half, -half, -half],[half, -half, -half],[half, half, -half],[-half, half, -half],[-half, -half, half],[half, -half, half],[half, half, half],[-half, half, half]])# 随机扰动顶点if complexity > 0:noise = np.random.uniform(-complexity * 0.1, complexity * 0.1, base_vertices.shape)base_vertices += noisereturn base_vertices# 投影函数(改进的透视投影)
def advanced_project(point, distance=5, width=WIDTH, height=HEIGHT):x, y, z = point# 非线性深度缩放scale_factor = 1 / (1 + math.exp(-z))perspective_factor = distance / (distance + z + 0.1)x_proj = x * perspective_factor * width * 0.3y_proj = y * perspective_factor * height * 0.3return (int(x_proj + width / 2),int(y_proj + height / 2),scale_factor)# 主动画类(增加更多动态效果)
class AdvancedCubeAnimation:def __init__(self):self.matrices = create_transformation_matrices()self.cube = create_dynamic_cube(complexity=1.5)self.color_palette = ColorPalette()self.starfield = StarField()# 多样的动画参数self.rotation_params = {'x': {'angle': 0, 'speed': 0.02, 'amplitude': 1},'y': {'angle': 0, 'speed': 0.015, 'amplitude': 1.2},'z': {'angle': 0, 'speed': 0.01, 'amplitude': 0.8}}# 额外的变形参数self.morph_params = {'shear_x': 0,'shear_y': 0,'morph_speed_x': 0.05,'morph_speed_y': 0.03}# 炫酷特效参数self.effect_params = {'pulse_scale': 1,'pulse_speed': 0.02,'trail_mode': False,'glitch_mode': False}def update_transformations(self):# 更新旋转for axis, params in self.rotation_params.items():params['angle'] += params['speed'] * params['amplitude']# 更新形变self.morph_params['shear_x'] = math.sin(pygame.time.get_ticks() * 0.001) * 0.5self.morph_params['shear_y'] = math.cos(pygame.time.get_ticks() * 0.002) * 0.5# 脉冲效果self.effect_params['pulse_scale'] = 1 + math.sin(pygame.time.get_ticks() * self.effect_params['pulse_speed']) * 0.2def apply_transformations(self):# 组合变换矩阵Rx = self.matrices['rotate_x'](self.rotation_params['x']['angle'])Ry = self.matrices['rotate_y'](self.rotation_params['y']['angle'])Rz = self.matrices['rotate_z'](self.rotation_params['z']['angle'])Sx = self.matrices['shear_x'](self.morph_params['shear_x'])Sy = self.matrices['shear_y'](self.morph_params['shear_y'])# 组合旋转和形变transformation = Rz @ Ry @ Rx @ Sy @ Sxreturn self.cube @ transformation.Tdef draw_cube(self, screen):# 应用变换transformed_cube = self.apply_transformations()# 立方体的边edges = [(0, 1), (1, 2), (2, 3), (3, 0),  # 底面(4, 5), (5, 6), (6, 7), (7, 4),  # 顶面(0, 4), (1, 5), (2, 6), (3, 7)   # 连接边]# 获取动态颜色base_color = self.color_palette.get_interpolated_color()# 绘制边for edge in edges:start = transformed_cube[edge[0]]end = transformed_cube[edge[1]]start_2d = advanced_project(start)end_2d = advanced_project(end)# 根据深度调整线条depth_factor = start_2d[2]line_width = max(1, int(4 * depth_factor))# 应用脉冲和颜色变化pulse_color = tuple(int(c * (0.7 + depth_factor * 0.3)) for c in base_color)pygame.draw.line(screen, pulse_color, start_2d[:2], end_2d[:2], line_width)def main():# 初始化animation = AdvancedCubeAnimation()# 视频导出准备os.makedirs('output', exist_ok=True)# OpenCV视频写入器fourcc = cv2.VideoWriter_fourcc(*'mp4v')out = cv2.VideoWriter('output/3d_cube_animation.mp4', fourcc, 60.0, (WIDTH, HEIGHT))# 创建背景background = pygame.Surface(screen.get_size())background = background.convert()# 总帧数和持续时间frame_count = 0max_frames = 600  # 10秒 * 60帧while frame_count < max_frames:# 背景处理(拖尾效果)background.set_alpha(50)screen.blit(background, (0, 0))# 绘制星空背景animation.starfield.move_stars()animation.starfield.draw(screen)# 绘制立方体animation.update_transformations()animation.draw_cube(screen)# 更新显示pygame.display.flip()# 捕获帧frame_surface = screen.copy()frame_data = pygame.surfarray.array3d(frame_surface)frame_data = frame_data.transpose([1, 0, 2])# 转换为 OpenCV 格式 (BGR)frame_bgr = cv2.cvtColor(frame_data, cv2.COLOR_RGB2BGR)out.write(frame_bgr)frame_count += 1clock.tick(60)# 释放资源out.release()pygame.quit()print("视频导出完成!保存在 output/3d_cube_animation.mp4")if __name__ == "__main__":main()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/64655.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

什么是 Azure OpenAI ?了解微软 Azure OpenAI 和 OpenAI 的关系

一、什么是Azure OpenAI &#xff1f; 微软已与 OpenAI 合作以实现三个主要目标&#xff1a; ⦿利用 Azure 的基础结构&#xff08;包括安全性、合规性和区域可用性&#xff09;&#xff0c;帮助用户构建企业级应用程序。 ⦿在微软产品&#xff08;包括 Azure AI 产品以及以外…

Linux day 1129

家人们今天继续学习Linux&#xff0c;ok话不多说一起去看看吧 三.Linux常用命令 3.1 Linux命令体验 3.1.1 常用命令演示 在这一部分中&#xff0c;我们主要介绍几个常用的命令&#xff0c;让大家快速感 受以下 Linux 指令的操作方式。主要包含以下几个指令&#xff1a; ls命…

SAP HCM 标准报表与前台操作的增强差异逻辑分析(rhgrenz4)

导读 增强差异:SAP的HCM模块组织和人事增强都有标准的增强点&#xff0c;不管你调用标准的函数还是前台操作都会触发对应的增强。所以很多业务不需要考虑那么多分散点&#xff0c;只要找到一个合适的增强点&#xff0c;就能解决很多和外围系统集成的业务逻辑&#xff0c;今天遇…

EZ-USB™ FX3 USB 5 Gbps 外设控制器

EZ-USB™ FX3 USB 5 Gbps 外设控制器 EZ-USB™ FX3 提供 USB 5Gbps 至 32 位数据总线&#xff0c;并配备 ARM9&#xff0c;可为任何系统添加 USB 3.0 连接 英飞凌的 EZ-USB™ FX3 是业界用途最广泛的 USB 外围设备控制器&#xff0c;可以为几乎任何系统添加 USB 5Gbps 连接。 …

【数据仓库】spark大数据处理框架

文章目录 概述架构spark 架构角色下载安装启动pyspark启动spark-sehll启动spark-sqlspark-submit经验 概述 Spark是一个性能优异的集群计算框架&#xff0c;广泛应用于大数据领域。类似Hadoop&#xff0c;但对Hadoop做了优化&#xff0c;计算任务的中间结果可以存储在内存中&a…

数据库容灾备份的意义+分类+执行工具!

数据库容灾解决方案的背景 数据库容灾&#xff08;Disaster Recovery&#xff0c;DR&#xff09;解决方案的背景主要源于企业对数据安全性、业务连续性和系统高可用性的需求。随着数字化转型的加速&#xff0c;企业的数据量迅猛增长&#xff0c;数据库已成为支撑核心业务的关键…

PDF怎么压缩得又小又清晰?5种PDF压缩方法

PDF 文件在日常办公与学习中使用极为频繁&#xff0c;可想要把它压缩得又小又清晰却困难重重。一方面&#xff0c;PDF 格式本身具有高度兼容性&#xff0c;集成了文字、图像、矢量图等多样元素&#xff0c;压缩时难以兼顾不同元素特性&#xff0c;稍不注意&#xff0c;文字就会…

GoldenDB组件及对应的用户和进程

1. GoldenDB组件及对应的用户和进程 GoldenDB数据库由管理节点、全局事务节点GTM、计算节点CN、数据节点DN等组成。 1.1. 管理节点 管理节点分为集群管理、Insight运维管理平台&#xff08;InsightServer、RDB、ZK&#xff09;。 1.1.1. 集群管理 1. 集群管理包括Metadatas…

OpenStack系列第四篇:云平台基础功能与操作(Dashboard)

文章目录 1. 镜像&#xff08;Image&#xff09;添加镜像查看镜像删除镜像 2. 卷&#xff08;Volume&#xff09;创建卷查看卷删除卷 3. 网络&#xff08;虚拟网络&#xff09;创建网络查看网络删除网络 4. 实例类型创建实例类型查看实例类型删除实例类型 4. 密钥对&#xff08…

CSDN编辑器

这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个…

四大自平衡树对比:AVL树、红黑树、B树与B+树

AVL树、红黑树、B树和B树的对比与应用场景 树系列相关文章&#xff08;置顶&#xff09; 1、从链表到平衡树&#xff1a;二叉查找树的退化与优化 2、自平衡二叉查找树&#xff1a;如何让二叉查找树始终保持高效 3、AVL树入门&#xff1a;理解自平衡二叉查找树的基础 4、红黑树全…

Linux下读取Windows下保存的文件,报错信息中出现“^M“时如何解决?【由于Windows和Linux的换行方式不同造成的-提供两种转换方式】

Windows 和 Linux 的文本文件使用的换行符不同&#xff1a; Windows 使用 \r\n &#xff08;回车 换行&#xff09;。Linux 使用 \n &#xff08;换行&#xff09;。 因此&#xff0c;当在 Linux 系统上运行带有 Windows 换行符的脚本或读取相关文件时&#xff0c;可能会出现…

npm ERR! ECONNRESET 解决方法

问题&#xff1a;npm 命令遇到的错误是 ECONNRESET&#xff0c;这通常与网络连接问题相关。设置代理解决问题。 一、查看当前代理设置 npm config get proxy npm config get https-proxy二、设置代理 npm config set proxy http://your-proxy-address:port npm config set h…

【UE5】UnrealEngine源码构建2:windows构建unreal engine 5.3.2

参考大神知乎的文章:UE5 小白也能看懂的源码编译指南 据说会耗费400G的空间。 代码本身并不大,可能是依赖特别多,毕竟看起来UE啥都能干,核心还是c++的, 【UE5】UnrealEngine源码构建1:tag为5.3.2源码clone 本着好奇+ 学习的态度,想着也许有机会能更为深入的熟悉UE的机制…

在Linux上获取MS(如Media Server)中的RTP流并录制为双轨PCM格式的WAV文件

在Linux上获取MS(如Media Server)中的RTP流并录制为双轨PCM格式的WAV文件 一、RTP流与WAV文件格式二、实现步骤三、伪代码示例四、C语言示例代码五、关键点说明六、总结在Linux操作系统上,从媒体服务器(如Media Server,简称MS)获取RTP(Real-time Transport Protocol)流…

Vue3 简介

Vue3 简介 最新版本&#xff1a; v3.5.13 1、性能提升 打包大小减少 41% - 初次渲染快 55%, 更新渲染快 133%内存减少 54% 2、源码的升级 使用 Proxy 代替 defineProperty 实现响应式。重写虚拟 DOM 的实现和 Tree-Shaking 3、拥抱TypeScript Vue3 可以更好的支持 TypeSc…

Oracle Dataguard(主库为 Oracle 11g 单节点)配置详解(1):Oracle Dataguard 概述

Oracle Dataguard&#xff08;主库为 Oracle 11g 单节点&#xff09;配置详解&#xff08;1&#xff09;&#xff1a;Oracle Dataguard 概述 目录 Oracle Dataguard&#xff08;主库为 Oracle 11g 单节点&#xff09;配置详解&#xff08;1&#xff09;&#xff1a;Oracle Data…

北京某新能源汽车生产及办公网络综合监控项目

北京某新能源汽车是某世界500强汽车集团旗下的新能源公司&#xff0c;也是国内首个获得新能源汽车生产资质、首家进行混合所有制改造、首批践行国有控股企业员工持股的新能源汽车企业&#xff0c;其主营业务包括纯电动乘用车研发设计、生产制造与销售服务。 项目现状 在企业全…

大数据系列之:深入理解学习使用腾讯COS和COS Ranger权限体系解决方案,从hdfs同步数据到cos

大数据系列之&#xff1a;深入理解学习使用腾讯COS和COS Ranger权限体系解决方案&#xff0c;从hdfs同步数据到cos 对象存储COS对象存储基本概念COS Ranger权限体系解决方案部署组件COS Ranger Plugin部署COS-Ranger-Service部署COS Ranger Client部署 COSN 从hdfs同步数据到co…

1月第一讲:WxPython跨平台开发框架之前后端结合实现附件信息的上传及管理

1、功能描述和界面 前端&#xff08;wxPython GUI&#xff09;&#xff1a; 提供文件选择、显示文件列表的界面。支持上传、删除和下载附件。展示上传状态和附件信息&#xff08;如文件名、大小、上传时间&#xff09;。后端&#xff08;REST API 服务&#xff09;&#xff1a…