用户:
一个哈密瓜查看: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版本的教程
一个哈密瓜#抱歉,第一行换行错误,现更正:
#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
评论