gpt 3d三角形 重心坐标填充 沿x轴炫赵师傅

clike 复制代码
```go
import pygame
from pygame.locals import *
import sys
import math

# 初始化Pygame
pygame.init()

# 设置窗口大小
width, height = 800, 600
screen = pygame.display.set_mode((width, height))
pygame.display.set_caption('3D Triangle Fill with Barycentric Coordinates')

# 定义三角形的三个顶点坐标(包含z坐标)
v0 = (200, 100, 0)
v1 = (400, 500, 0)
v2 = (600, 200, 0)
img=pygame.image.load("11.jpg").convert_alpha()
# 定义旋转角度
angle_x = 0
angle_y = 0
angle_z = 0
rotation_speed = 0.01  # 每帧旋转的速度

def rotate_x(vertex, angle):
    x, y, z = vertex
    new_y = y * math.cos(angle) - z * math.sin(angle)
    new_z = y * math.sin(angle) + z * math.cos(angle)
    return x, new_y, new_z

def rotate_y(vertex, angle):
    x, y, z = vertex
    new_x = x * math.cos(angle) + z * math.sin(angle)
    new_z = -x * math.sin(angle) + z * math.cos(angle)
    return new_x, y, new_z

def rotate_z(vertex, angle):
    x, y, z = vertex
    new_x = x * math.cos(angle) - y * math.sin(angle)
    new_y = x * math.sin(angle) + y * math.cos(angle)
    return new_x, new_y, z

# 对三角形顶点进行旋转变换
def rotate_triangle():
    global v0, v1, v2, angle_x, angle_y, angle_z
    v0 = rotate_x(v0, angle_x)
    v1 = rotate_x(v1, angle_x)
    v2 = rotate_x(v2, angle_x)

    v0 = rotate_y(v0, angle_y)
    v1 = rotate_y(v1, angle_y)
    v2 = rotate_y(v2, angle_y)

    v0 = rotate_z(v0, angle_z)
    v1 = rotate_z(v1, angle_z)
    v2 = rotate_z(v2, angle_z)

# 渲染三角形
def render_triangle(v0, v1, v2):
    for x in range(int(min(v0[0], v1[0], v2[0])), int(max(v0[0], v1[0], v2[0]))):
        for y in range(int(min(v0[1], v1[1], v2[1])), int(max(v0[1], v1[1], v2[1]))):
            u, v, w = barycentric_coordinates((x, y), v0, v1, v2)
            if u >= 0 and v >= 0 and w >= 0:
                z = u * v0[2] + v * v1[2] + w * v2[2]
                screen.set_at((x, y), (img.get_at((int(u*img.get_width()%img.get_width()),int((v*img.get_height())%img.get_height())))))

def barycentric_coordinates(p, v0, v1, v2):
    u = ((v1[1] - v2[1]) * (p[0] - v2[0]) + (v2[0] - v1[0]) * (p[1] - v2[1])) / \
        ((v1[1] - v2[1]) * (v0[0] - v2[0]) + (v2[0] - v1[0]) * (v0[1] - v2[1]))
    v = ((v2[1] - v0[1]) * (p[0] - v2[0]) + (v0[0] - v2[0]) * (p[1] - v2[1])) / \
        ((v1[1] - v2[1]) * (v0[0] - v2[0]) + (v2[0] - v1[0]) * (v0[1] - v2[1]))
    w = 1 - u - v
    return u, v, w

# 主循环
while True:
    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit()

    # 清空屏幕
    screen.fill((0, 0, 0))

    # 旋转三角形
    rotate_triangle()

    # 渲染并填充三角形
    render_triangle(v0, v1, v2)

    # 更新角度
    angle_x += rotation_speed
    angle_y += rotation_speed
    angle_z += rotation_speed

    pygame.display.flip()
复制代码
相关推荐
西索斯coding5 小时前
gpt-image-2.5-sunburst 和 gemini-3.1-flash-image 差多少?60 组项目素材的成功成本评测框架
java·linux·gpt·ai
一枕槐安4876 小时前
大模型 API 调用封装:统一适配 GPT、文心一言、通义千问
人工智能·gpt·文心一言·大模型api·流式输出·统一封装·多模态路由
暴走约伯7 小时前
【VFX工具链源码拆解 02】告别机械劳动(上):一键统改百个子粒子颜色与批量重命名
3d·unity·c#·材质
Solange__13 小时前
AI世界模型、3D场景生成和游戏引擎怎么选?按5类任务比较交互、物理与导出
开发语言·人工智能·游戏·平面·3d·自然语言处理·游戏引擎
Solange__13 小时前
物流园区怎么用AI生成3D调度预演?从道路底图、车辆转弯到网页评审
图像处理·人工智能·游戏·3d·ai·自然语言处理·关卡设计
最强小杰13 小时前
gpt-image-2.5-sunburst + OpenAI SDK + Cline 怎么接?完整图生图与局部重绘教程
gpt·ios·ai·iphone
richard_first13 小时前
第21章 训练一个简单的 GPT
人工智能·gpt·深度学习
摸鱼的张三1 天前
如何使用 GPT 协议调用 API:从原理到实战
gpt
西索斯coding1 天前
scribe_v2 和 gpt-transcribe 转会议录音差多少?2026 年六项指标实测审计
gpt·ai
言乐61 天前
通过 3D 动画直观演示球形瓶内可滑动半圆机构在倾倒时防粘盖、回正时刮膏体的运动学过程
python·3d·django·virtualenv·pygame