为 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 ));
看来您只是没有使用正确的名称创建变量(cdata1
、cdata2
、cdata3
,...)
另外:
您要在每个 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
我想在 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 ));
看来您只是没有使用正确的名称创建变量(cdata1
、cdata2
、cdata3
,...)
另外:
您要在每个 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