简单地说:
- window3d控制的是三维空间的边界盒
- window控制的是三维空间边界盒里的内容按照
viewdir投影到纸张平面后,2D平面的边界
luadraw在绘制的过程中,_大致_经历了下面的过程:
- 根据3D盒子的边界确定3D空间盒子的边界,一些在盒子外的内容可能会被某些方法切去
- 基于viewdir确定3D物体投影到屏幕投影面的方法和角度
- 基于adjust2d,window和bbox以及size等参数调整屏幕投影面的最终显示效果
(AI总结,仅供参考)

在你的例子中,3D盒子大小是不影响的最终投影结果的,因此:
local g = ld.graph3d:new{
window3d = {0,1.5,0,5.5,0,0.6},
-- window3d = {0,3,0,11,0,1.2},
window={-1.1,5.5,-1.1,1.5},
bbox=false,size={9,9},
viewdir={"yz",0.5,45}
}和
local g = ld.graph3d:new{
-- window3d = {0,1.5,0,5.5,0,0.6},
window3d = {0,3,0,11,0,1.2},
window={-1.1,5.5,-1.1,1.5},
bbox=false,size={9,9},
viewdir={"yz",0.5,45}
}的表现都是相同的:

我们可以通过 Dboxaxes3d 方法来更好地可视化这种差距:
\documentclass[border=8pt]{standalone}
\usepackage[3d]{luadraw}
\usepackage[svgnames]{xcolor}
\usepackage{fourier-otf}
\begin{document}
\begin{tabular}{cc}
\begin{luadraw}{name=cube_small}
local ld = luadraw
local pt3d = ld.pt3d
local M = pt3d.M
local g = ld.graph3d:new{
window3d = {0, 1, 0, 1, 0, 1},
bbox = false, size = {10, 10},
viewdir = {"yz", 0.5, 45}
}
local Origin, vecI, vecJ, vecK = pt3d.Origin, pt3d.vecI, pt3d.vecJ, pt3d.vecK
local C = ld.parallelep(Origin, 1.5*vecI, 1.5*vecJ, 1.5*vecK)
g:Dboxaxes3d({grid = true, gridcolor = "cyan!50", fillcolor = "cyan!20", drawbox = true})
g:Dpoly(C, {mode = ld.mWireframe})
g:Show()
\end{luadraw}
&
\begin{luadraw}{name=cube_large}
local ld = luadraw
local pt3d = ld.pt3d
local M = pt3d.M
local g = ld.graph3d:new{
window3d = {0, 2, 0, 2, 0, 2},
bbox = false, size = {10, 10},
viewdir = {"yz", 0.5, 45}
}
local Origin, vecI, vecJ, vecK = pt3d.Origin, pt3d.vecI, pt3d.vecJ, pt3d.vecK
local C = ld.parallelep(Origin, 1.5*vecI, 1.5*vecJ, 1.5*vecK)
g:Dboxaxes3d({grid = true, gridcolor = "cyan!50", fillcolor = "cyan!20", drawbox = true})
g:Dpoly(C, {mode = ld.mWireframe})
g:Show()
\end{luadraw}
\\
\texttt{window3d = \{0, 1, 0, 1, 0, 1\}} &
\texttt{window3d = \{0, 2, 0, 2, 0, 2\}}
\end{tabular}
\end{document}
如果不左右对比,同时不画盒子,只能感受到缩放的差距,因为立方体和2D画布的相对关系是相同的。因为我不怎么会用到那种「盒子外的内容可能会被切去」的方法,所以其实保持默认的 window3d={-5,5,-5,5,-5,5,1,1,1},只调整window和size其实也是够的...
无论我怎么改变window3d里面的6个参数值,都没有影响到输出的图形,不知道window3d的设置还有什么价值?
是因为只改变「window3d里面的6个参数值」,只会影响3D盒子边界和真实物体的相对大小关系,但是绘制结果是经过上述流程2D投影后得到的,投影后的纸张和物体的投影相对大小关系还是相同
而window的设置可以截取部分图形。我将设置window的代码那行删除,结果右侧显示不完全。
这是因为不写window,就相当使用的是默认值window={-5,5,-5,5},如果3D投影到2D后还超出了window,那么就会「显示不完全」
我希望是取消留白,只有图形区域,类似border=0pt那么也许应该使用类似bbox=false的方法....





















问 我理解了window, 但是无法理解luadraw的window3d