猫史档案馆


3D基础教程

用户:一个哈密瓜一个哈密瓜查看:8 回复:3 评论:8 创建时间:2023-03-15T23:09:52


#py - turtle 的3D效果实现(核心代码各种编辑器都通用):import turtle as t
3D = 359 #3D常量,可随意更改,效果不同,当非常小时会产生惊人的广角效果
#核心代码 :
def_3Ddrop(x,y,z)
    #x -> 3D世界中的x坐标
    #y -> 3D世界中的y坐标
    #z -> 3D世界中的x坐标
    t.goto(x*350/z,y*350/z)
#注意事项:
    #z绝不可以 <= 8,会出BUG

简单示例:

import turtle as t

p = t.Pen()
p.speed(0)
p.ht()

camyx = 100 #摄像头的x值
camyy = 100 #摄像头的y值
camyz = 500 #摄像头的z值

_3Dconstant = 350 #3D常量

def _3Ddrop(x, y, z, pen=p): #绘制3D点函数

    if (z + camyz > 0):
        pen.goto((((x + camyx) * _3Dconstant) / (z + camyz)),(((y + camyy) * _3Dconstant) / (z + camyz)))
        print((((x + camyx) * _3Dconstant) / (z + camyz)),(((y + camyy) * _3Dconstant) / (z + camyz)))
    else :
        pen.goto((((x + camyx) * _3Dconstant) / 1),(((y + camyy) * _3Dconstant) / 1))
        print(1)

def _3Dsegment(x, y, z, x1, y1, z1, pen=p): #绘制3D线段函数

    pen.up()
    _3Ddrop(x, y, z)
    pen.down()
    _3Ddrop(x1, y1, z1)

def zfx_3D(): #绘制示例正方体

    t.tracer(False)
    p.clear()
    _3Dsegment(-50, -50, -50, -50, 100, -50)
    _3Dsegment(-50, 100, -50, 100, 100, -50)
    _3Dsegment(100, 100, -50, 100, -50, -50)
    _3Dsegment(100, -50, -50, -50, -50, -50)
    _3Dsegment(-50, -50, -50, -50, -50, 100)
    _3Dsegment(-50, 100, -50, -50, 100, 100)
    _3Dsegment(100, 100, -50, 100, 100, 100)
    _3Dsegment(100, -50, -50, 100, -50, 100)
    _3Dsegment(-50, -50, 100, -50, 100, 100)
    _3Dsegment(-50, 100, 100, 100, 100, 100)
    _3Dsegment(100, 100, 100, 100, -50, 100)
    _3Dsegment(100, -50, 100, -50, -50, 100)
    t.tracer(True)
def up():

    global camyz
    camyz += 1
    zfx_3D()
def down():

    global camyz
    if camyz > 1:
        camyz -= 1
    zfx_3D()

def w():

    global camyy
    camyy += 1
    zfx_3D()

def s():

    global camyy
    camyy -= 1
    zfx_3D()

def a():

    global camyx
    camyx -= 1
    zfx_3D()

def d():

    global camyx
    camyx += 1
    zfx_3D()
#链接函数与事件
p.screen.onkey(w, 'w')
p.screen.onkey(s, 's')
p.screen.onkey(a, 'a')
p.screen.onkey(d, 'd')

p.screen.onkey(up, "Up")
p.screen.onkey(down, "Down")

zfx_3D() #初始绘制

p.screen.listen() #开始监听事件

t.done()

PS:本贴主要是嘲讽某个靠运气上首页的垃圾3D教程

喜欢的话我会出后续以及K4版本的教程


回复

上一页1 页 / 共 1下一页
一个哈密瓜一个哈密瓜

#抱歉,第一行换行错误,现更正:
#py - turtle 的3D效果实现(核心代码各种编辑器都通用):
import turtle as t
3D = 359 #3D常量,可随意更改,效果不同,当非常小时会产生惊人的广角效果
#核心代码 :
def_3Ddrop(x,y,z)
    #x -> 3D世界中的x坐标
    #y -> 3D世界中的y坐标
    #z -> 3D世界中的x坐标
    t.goto(x*350/z,y*350/z)
#注意事项:
    #z绝不可以 <= 8,会出BUG

点赞0


评论


ENEMyENEMy

良帖无人

点赞0


评论


亿个小孩亿个小孩

用ursina模块好像也可以创造一个3d画面emotion_编程猫_点赞

点赞0


评论