出于一些不虔诚的原因,我试图用Turtle库制作一个纯Python3.6.3的线框图形显示程序。我已经到了一个地步,我想跳过绘制不必要的tris优化的目的。不必要的tris意味着tris应该被模型的其他部分遮住,也就是说,从三维相机的正常面对。
程序正在处理的模型数据只是一个巨大的三维数组,每个tri的格式如下。
[[Vert],[Vert],[Vert],[Normal]]
我当前版本的代码只有一个模型(多维数据集),如下所示:
from turtle import *
Cube = [[[-50,50,-50],[-50,50,50,],[50,50,50],[0,1,0]],
[[-50,50,-50],[50,50,50,],[50,50,-50],[0,1,0]],
[[-50,50,-50],[-50,50,50],[-50,-50,50],[1,0,0]],
[[-50,50,-50],[-50,-50,-50],[-50,-50,50],[1,0,0]],
[[-50,50,50],[50,50,50],[50,-50,50],[0,0,1]],
[[-50,50,50],[50,-50,50],[-50,50,50],[0,0,1]],
[[-50,-50,-50],[-50,-50,50,],[50,-50,50],[0,-1,0]],
[[-50,-50,-50],[50,-50,50,],[50,-50,-50],[0,-1,0]],
[[50,50,-50],[50,50,50],[50,-50,50],[-1,0,0]],
[[50,50,-50],[50,-50,-50],[50,-50,50],[-1,0,0]],
[[-50,50,-50],[50,50,-50],[50,-50,-50],[0,0,-1]],
[[-50,50,-50],[50,-50,-50],[-50,50,-50],[0,0,-1]]]
CamVector = [0,1,0]
def DrawModel(Model):
for i in range(0,len(Model)):
goto(Model[i][0][0],Model[i][0][1])
pd()
goto(Model[i][1][0],Model[i][1][1])
goto(Model[i][2][0],Model[i][2][1])
goto(Model[i][0][0],Model[i][0][1])
pu()
Model = Cube
DrawModel(Model)
但是我想把每个tri的法向和camvector进行比较,这样代码就变成这样了:
def DrawModel(Model):
for i in range(0,len(Model)):
AngleAwayFromCamera = *Math voodoo*
if AngleAwayFromCamera <= 90:
*draw tri*
如果有人对如何帮助有任何想法,可以向像我这样有核桃大小大脑的人解释,那就太好了。我看了很多文件,但大多数都飞到了我的头上——可能是因为我没有通过GCSE数学考试。