在matlab中创建一个完全不透明的六面体

creating in matlab a fully opaque hexahedron

我想使用补丁函数创建一个完全不透明的六面体(一个 6 面 3d 对象,如扭曲的立方体)。下面是我的代码,(使点 #1 的 3 个相邻面,然后使其他 3 个面与其对映点相邻,因此所有 6 "patched")。但是,您所看到的透明度并没有达到预期效果。知道为什么会发生这种情况,或者有什么方法可以绕过这个问题吗?

vec=[1,2,4,3,1;1,5,6,2,1;1,5,7,3,1];
vec2=[8,4,3,7,8;8 4 2 6 8;8 6 5 7 8];
cube = [0 0 0;0 0 1;0 1 0;0 1 1; 1 0 0; 1 0 1; 1 1 0; 1 1 1];
figure
patch('Faces',[vec(1,:),vec(2,:),vec(3,:)],'Vertices',cube,'FaceColor','white','FaceAlpha',1); axis equal; cameratoolbar;
hold on
patch('Faces',[vec2(1,:),vec2(2,:),vec2(3,:)],'Vertices',cube,'FaceColor','white','FaceAlpha',1); axis equal; cameratoolbar;

这是生成的图:

(Matlab 2017a)。

您以正确的方式创建了 vec 数组,但是在将它传递给 patch() 函数时搞砸了。您可以在一个变量中连接 vecvec2。那么您的代码如下所示:

vec=[1,2,4,3,1;1,5,6,2,1;1,5,7,3,1; ...
     8,4,3,7,8;8 4 2 6 8;8 6 5 7 8];
cube = [0 0 0;0 0 1;0 1 0;0 1 1; 1 0 0; 1 0 1; 1 1 0; 1 1 1];
patch('Faces',vec,'Vertices',cube,'FaceColor','white','FaceAlpha',1);
axis equal
view(-41,33);

结果显示在这里。
注意:立方体的左前侧在屏幕显示中透明。这是八度图转PNG导出的一个bug。