【问题标题】:Assigning a 2D image for every face of a 3D cube: MATLAB为 3D 立方体的每个面分配 2D 图像:MATLAB
【发布时间】:2015-10-28 04:16:02
【问题描述】:

我想在 MATLAB 中构建一个立方体并为其面分配不同的 2D 图像。我认为这称为纹理映射。我已经搜索过这样的代码,但我发现了一个能够将单个图像分配给所有立方体面的代码,该代码可在此处获得 (http://www.mathworks.com/matlabcentral/answers/32070-rgb-images-on-a-3d-cube)。这是代码,

cdata = flipdim( imread('peppers.png'), 1 );
cdatar = flipdim( cdata, 2 );

% bottom
surface([-1 1; -1 1], [-1 -1; 1 1], [-1 -1; -1 -1], ...
    'FaceColor', 'texturemap', 'CData', cdatar );
% top
surface([-1 1; -1 1], [-1 -1; 1 1], [1 1; 1 1], ...
    'FaceColor', 'texturemap', 'CData', cdata );

% font
surface([-1 1; -1 1], [-1 -1; -1 -1], [-1 -1; 1 1], ...
    'FaceColor', 'texturemap', 'CData', cdata );
% back
surface([-1 1; -1 1], [1 1; 1 1], [-1 -1; 1 1], ...
    'FaceColor', 'texturemap', 'CData', cdatar );

% left
surface([-1 -1; -1 -1], [-1 1; -1 1], [-1 -1; 1 1], ...
    'FaceColor', 'texturemap', 'CData', cdatar );
% right
surface([1 1; 1 1], [-1 1; -1 1], [-1 -1; 1 1], ...
    'FaceColor', 'texturemap', 'CData', cdata );

view(3);

我想为不同的人脸分配不同的图片,我尝试设置不同的cdata变量为cdata1,cdata2,...,cdata6每个都有不同的图像路径,但是我得到一个错误,表明cdata1没有定义.

编辑:这是我尝试仅使用 2 张图像作为示例,

cdata1 = flipdim( imread('face1.jpg'), 1 );
cdatar1 = flipdim( cdata1, 2 );

cdata2 = flipdim( imread('interface 1.png'), 1);
cdatar2 = flipdim( cdata2, 2 );

% bottom
surface([-1 1; -1 1], [-1 -1; 1 1], [-1 -1; -1 -1], ...
    'FaceColor', 'texturemap', 'CData1', cdatar1 );
% top
surface([-1 1; -1 1], [-1 -1; 1 1], [1 1; 1 1], ...
    'FaceColor', 'texturemap', 'CData2', cdata2 );

% font
surface([-1 1; -1 1], [-1 -1; -1 -1], [-1 -1; 1 1], ...
    'FaceColor', 'texturemap', 'CData1', cdata1 );
% back
surface([-1 1; -1 1], [1 1; 1 1], [-1 -1; 1 1], ...
    'FaceColor', 'texturemap', 'CData2', cdatar2 );

% left
surface([-1 -1; -1 -1], [-1 1; -1 1], [-1 -1; 1 1], ...
    'FaceColor', 'texturemap', 'CData1', cdatar2 );
% right
surface([1 1; 1 1], [-1 1; -1 1], [-1 -1; 1 1], ...
    'FaceColor', 'texturemap', 'CData1', cdata1 );

view(3);

上面的代码产生一个错误,指出 CData1 没有定义。

谁能告诉我如何让上面的代码能够为立方体的不同面分配不同的图像?

谢谢。

【问题讨论】:

  • 也看看这个question,问题的标题不同,但答案基本上告诉你如何做你所问的。
  • 太棒了!非常感谢。

标签: matlab image-processing 3d 2d texture-mapping


【解决方案1】:

应该是直截了当的!

cdata1 = flipdim( imread('peppers.png'), 1 );
cdata2 = rgb2gray(flipdim( imread('peppers.png'), 1 ));

看来您只是没有创建具有正确名称的变量(cdata1cdata2cdata3,...)

另外:

您希望在每个surface 调用中设置的属性名称不会改变。您总是想将CData 设置为某些东西。表面中没有名为 CData1 的属性,因为没有名为 PutImageHere 的属性!将所有调用替换为'CData',如下所示:

surface([1 1; 1 1], [-1 1; -1 1], [-1 -1; 1 1], ...
    'FaceColor', 'texturemap', 'CData', yourvariablename); 
% in this case yourvariablename is cdata1

【讨论】:

  • 对不起,我还是个初学者,我试过了,但还是不行。请看一下问题,我已经更新了问题并发布了我尝试过的代码。我还尝试在第二个变量中添加 rgb2gray,但它仍然给出错误。你能告诉我我在做什么错误吗?谢谢。
  • 抱歉安德,我真的没有意识到这一点,感谢@rayryeng 指出:)
猜你喜欢
  • 1970-01-01
  • 2015-11-10
  • 2011-08-25
  • 2021-06-05
  • 1970-01-01
  • 1970-01-01
  • 2014-07-21
  • 2011-05-20
  • 1970-01-01
相关资源
最近更新 更多