另制作了更立体版本,将其放在文章最后,效果如下:
做了一个简易JK裙绘制器 使用按键R选择贴图 推荐尺寸1:1或3:5 绘制效果:
当然也可以来些恐怖的配色。。。。
完整代码:
function fillJK
fig=figure('units','pixels',...
'position',[350 100 500 500],...
'Numbertitle','off',...
'name','JK',...
'Color',[1 1 1],...
'resize','off',...
'menubar','none');
ax=axes('Units','pixels',...
'parent',fig,...
'Color',[1 1 1],...
'Position',[0 0 500 500],...
'XLim',[0 100],...
'YLim',[0 100],...
'XGrid','on','YGrid','on');
hold(ax,'on')
[Lu_X,Lu_Z]=pwLine(0:0.1:120,7,3,asin(0.1/3));
[Ld_X,Ld_Z]=pwLine(0:0.1:120,9,1,asin(0.1/1));
Lu_Y=(60+20).*ones(1,length(0:0.1:120));
Ld_Y=20.*ones(1,length(0:0.1:120));
Lu_X=Lu_X+(max(Ld_X)-max(Lu_X))/2;
%plot3(Lu_X,Lu_Y,Lu_Z)
%plot3(Ld_X,Ld_Y,Ld_Z)
Xset=inter3D(Lu_X',Ld_X',length(Lu_X));
Yset=inter3D(Lu_Y',Ld_Y',length(Lu_Y));
Zset=inter3D(Lu_Z',Ld_Z',length(Lu_Z));
Pic=[];
try
Pic=imread('示例.png');
catch
end
h=surface(ax,Xset,Yset,Zset,'FaceColor','texturemap','EdgeColor','texturemap');
if isempty(Pic)
else
PicR=Pic(:,:,1);PicR=PicR';
PicG=Pic(:,:,2);PicG=PicG';
PicB=Pic(:,:,3);PicB=PicB';
tpPic(:,:,1)=PicR;
tpPic(:,:,2)=PicG;
tpPic(:,:,3)=PicB;
w=fspecial('gaussian',[3 3],3);
flPic=imfilter(tpPic,w);
set(h,'CData',flPic,'FaceColor','texturemap','EdgeColor','texturemap')
end
lightangle(ax,-10,61)
lighting(ax,'gouraud')
shading(ax,'flat')
text(2,96,'JK裙贴图展示器','FontSize',11)
text(2,92,'通过按键"R"更换贴图,建议比例3:5','FontSize',11)
set(gcf, 'KeyPressFcn', @key)
function key(~,event)
if event.Key=='r'
try
[filename, pathname] = uigetfile({'*.jpg;*.tif;*.png;*.gif','All Image Files';...
'*.*','All Files' });
Pic=[];
Pic=imread([ pathname,filename]);
PicR=Pic(:,:,1);PicR=PicR';
PicG=Pic(:,:,2);PicG=PicG';
PicB=Pic(:,:,3);PicB=PicB';
if size(Pic,1)==size(Pic,2)
PicR=repmat(PicR,[5,3]);
PicG=repmat(PicG,[5,3]);
PicB=repmat(PicB,[5,3]);
end
tpPic(:,:,1)=PicR;
tpPic(:,:,2)=PicG;
tpPic(:,:,3)=PicB;
w=fspecial('gaussian',[3 3],3);
flPic=imfilter(tpPic,w);
set(h,'CData',flPic)
catch
end
end
end
function Pset=inter3D(P1,P2,N)
coeMat=linspace(0,1,N);
Pset=P1+(P2-P1)*coeMat;
end
function [newX,newY]=pwLine(X,p1L,p2L,theta)
newX=X(1);
newY=0;
for i=2:length(X)
dX=X(i)-X(i-1);
if mod(X(i),p1L+p2L)
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?