【问题标题】:How can I create a 3D line object in Matlab which I can light using a light object?如何在 Matlab 中创建可以使用灯光对象点亮的 3D 线对象?
【发布时间】:2019-07-29 22:18:32
【问题描述】:

我有 3 个向量,它们指定 3 空间中一条线上各个点的 X、Y 和 Z 坐标。我使用 plot3 绘制它们,即

plot3(X,Y,Z,'go-','LineWidth',4,'MarkerSize',32);
grid on

获取网格上的 3D 线对象。我希望能够使用 lightangle 之类的命令来更改对象上的照明,但它似乎只适用于使用 surf、mesh 等创建的对象。有没有人有一个好方法可以将我的线变成我的对象可以调节灯光吗?

谢谢, 克里斯

【问题讨论】:

  • 我相信在包括 Matlab 在内的大多数 3D 图形引擎中,光照只影响 2D 表面而不影响边缘,因此您不能将光照应用于线条。
  • 创建一个 cylinder 并根据您的矢量应用 3D 旋转

标签: matlab 3d line lighting


【解决方案1】:

线对象在 Matlab 中没有光照属性,但补丁边缘有。

画一条“线”
% NaNs make the patch effectively faceless, with only an edge
p = patch([X,nan], [Y,nan], [Z,nan], 'k', ...
    'EdgeColor', 'g', 'EdgeLighting', 'Gouraud');

你现在有一个名为“line”的属性p

p.VertexNormals % or get(p, 'VertexNormals') in pre-2014b

这定义了线的法线向量,其方向用于计算照明效果。默认情况下,p.VertexNormals 将全部为 [0, 0, 1] 用于边缘,指向 Z 轴。您可以手动替换VertexNormals 以改变每个补丁边缘顶点的光照效果。

指向灯光的法线向量意味着物体上的点会显得更亮,指向远离的点会显得更暗。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-23
    • 1970-01-01
    • 2012-07-19
    • 1970-01-01
    • 1970-01-01
    • 2015-05-23
    • 1970-01-01
    相关资源
    最近更新 更多