【发布时间】: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