gnuplot:如何避免观看依赖角度的半透明3D曲面?
我绊倒在下面。 如果我使用gnuplot:如何避免观看依赖角度的半透明3D曲面?,3d,gnuplot,transparency,3d,Gnuplot,Transparency,我绊倒在下面。 如果我使用pm3d绘制一个立方体,并将侧面定义为半透明,则如果我将立方体旋转90度,我希望立方体看起来是一样的。 但是,显然,根据观察角度的不同,某个特定表面会比其他表面更亮或更暗。在下面的示例中,30度和120度的视图有3种不同的红色阴影,而210度和300度的视图只有2种红色阴影。不涉及pm3d照明 问题: 这怎么解释呢?如何避免这种情况?我对立方体的定义有问题吗? 我是否遗漏了帮助pm3d或帮助pm3d算法或帮助pm3d颜色分配下文档中的任何内容?我使用的是太旧的gnupl
pm3d
绘制一个立方体,并将侧面定义为半透明,则如果我将立方体旋转90度,我希望立方体看起来是一样的。
但是,显然,根据观察角度的不同,某个特定表面会比其他表面更亮或更暗。在下面的示例中,30度和120度的视图有3种不同的红色阴影,而210度和300度的视图只有2种红色阴影。不涉及pm3d照明
问题:
这怎么解释呢?如何避免这种情况?我对立方体的定义有问题吗?
我是否遗漏了帮助pm3d
或帮助pm3d算法
或帮助pm3d颜色分配
下文档中的任何内容?我使用的是太旧的gnuplot版本(5.2.8)还是“错误”的终端(wxt)
代码:
### semitransparent 3D surfaces
reset session
$Cube <<EOD
0 0 0
0 0 1
0 1 1
0 1 0
0 0 0
1 0 0
1 0 1
1 1 1
1 1 0
1 0 0
0 0 0
1 0 0
1 1 0
0 1 0
0 0 0
0 0 1
1 0 1
1 1 1
0 1 1
0 0 1
EOD
set view equal xyz
set cbrange [0.9:1]
set palette defined (1 'red')
set pm3d depthorder hidden3d
set pm3d implicit
unset hidden3d
unset label
unset tics
unset border
unset key
unset colorbox
set multiplot layout 2,3
a=75
b=30
r=1.3
set title sprintf("opaque view: %d, %d",a,b)
set view a,b,r
set style fill transparent solid 1
splot $Cube u 1:2:3:(1) w l lw 0.5 lc "black"
set style fill transparent solid 0.3
do for [i=30:300:90] {
set title sprintf("transparent view: %d, %d",a,i)
set view a,i
replot
}
unset multiplot
### end of code
半透明3D曲面
重置会话
$Cube这里发生了很多事情
(background ∘ 0.3red) ∘ 0.3red ?=? background ∘ (0.3red ∘ 0.3red)
unset pm3d
splot $Cube u 1:2:3 w polygons
,程序试图将顶点解释为定义曲面的一组扫描线。这真的不管用。我不完全确定最终结果是什么,但我怀疑有些区域被画了两次。你可以通过用画笔再画一次来感觉这里出了什么问题
set pm3d interpolate 2,2
set view equal xyz
unset hidden3d
unset tics
unset border
unset key
set multiplot layout 2,3
a=75
b=30
r=1.3
set title sprintf("opaque view: %d, %d",a,b)
set view a,b,r
set style fill transparent solid 1
set pm3d border lw 0.5 lc "black"
splot $Cube u 1:2:3 w polygons fc "red"
set style fill transparent solid 0.3
do for [i=30:300:90] {
set title sprintf("transparent view: %d, %d",a,i)
set view a,i
replot
}
unset multiplot
非常感谢您的解释。应该提到的是,使用多边形的
需要gnuplot 5.4。我想我还是不完全理解pm3d
。当绘制不透明立方体(如您所说,缺少两个面)并手动旋转它时,我无法“查看内部”,因为“内部”线是隐藏的,所以我假设立方体由6个曲面闭合。但显然,事实并非如此。那是另一个问题。原来的问题得到了回答,再次感谢。