繁体   English   中英

为3D立方体的每个面分配2D图像:MATLAB

[英]Assigning a 2D image for every face of a 3D cube: MATLAB

我想在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。

谁能告诉我如何获得上述代码,以便将不同的图像分配给多维数据集的不同面?

谢谢。

它应该很简单!

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM