-
Notifications
You must be signed in to change notification settings - Fork 5
/
GenerateObjFunc.m
96 lines (86 loc) · 2.65 KB
/
GenerateObjFunc.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
function GenerateObjFunc(nFramesZ, FOVSizeX, FOVSizeY, stepSizeZ, outputPath, outputFileName)
% This script generates an OBJ and a MAT file
%
% Yonatan Winetraub, Orly Liba, June 2017
% nFramesZ: number of frames (images) in axial dimension
% Slice Size (micro meters)
% FOVSizeX: size of volume, X dimension in um
% FOVSizeY: size of volume, Y dimension in um
% stepSizeZ: spacing between layers in um. If files are orderd top to bottom set to negative step size (i.e. -4 microns)
% outputPath: output path for mat and obj files
% outputFileName: prefix of png files
fileNamePrefix = outputFileName;
fileNameSuffix = '.png';
%% Create a directory
if ~(exist(outputPath,'dir'))
mkdir(outputPath);
end
%% Get layer positions
LayersZPosition = [];
for i=1:nFramesZ
LayersZPosition = [LayersZPosition i*stepSizeZ];
end
%% Create a material file
i = 1;
mt = sprintf([...
'newmtl layer%04d\r\n' ...
'illum 4\r\n' ...
'Kd 0.0 0.0 0.0 \r\n'...
'Ka 0.0 0.0 0.0 \r\n'...
'Tf 1.0 1.0 1.0 \r\n'...
'Ni 1.0 \r\n' ...
'map_Kd %s%04d%s\r\n'], ...
i,fileNamePrefix,i-1,fileNameSuffix);
for i=2:nFramesZ
mt = sprintf([...
'%s' ...
'newmtl layer%04d\r\n' ...
'illum 4\r\n' ...
'Kd 0.0 0.0 0.0 \r\n'...
'Ka 0.0 0.0 0.0 \r\n'...
'Tf 1.0 1.0 1.0 \r\n'...
'Ni 1.0 \r\n' ...
'map_Kd %s%04d%s\r\n'], ...
mt,i,fileNamePrefix,i-1,fileNameSuffix);
end
fid = fopen([outputPath 'Mat.mtl'],'wt');
fprintf(fid,'%s',mt);
fclose(fid);
%% Create obj file
ob = sprintf([...
'mtllib Mat.mtl\r\n'...
'vt 1.000000 1.000000 \r\n'...
'vt 1.000000 0.000000 \r\n'...
'vt 0.000000 0.000000 \r\n'...
'vt 0.000000 1.000000 \r\n'...
]);
vetexText = sprintf([ ...
'v %.7f %.7f %s\r\n'...
'v %.7f %.7f %s\r\n'...
'v %.7f %.7f %s\r\n'...
'v %.7f %.7f %s\r\n'...
],...
FOVSizeX,FOVSizeY,'%.7f',...
FOVSizeX,0,'%.7f',...
0,0,'%.7f',...
0,FOVSizeY,'%.7f');
nPoints=0; %Counter that counts how many points in the obj
for i=1:nFramesZ
ob = sprintf([...
'%s' ...
vetexText ...
'usemtl layer%04d\r\n' ...
'f %d/1 %d/2 %d/3 %d/4\r\n'],...
ob,...
LayersZPosition(i),LayersZPosition(i),LayersZPosition(i),LayersZPosition(i),...
i,...
nPoints+1,nPoints+2,nPoints+3,nPoints+4 ...
);
nPoints = nPoints+4;
end
%Save file
fid = fopen([outputPath,'Ob.obj'],'wt');
fprintf(fid,'%s',ob);
fclose(fid);
%% Prompt user
disp(sprintf('%d layers saved',length(LayersZPosition)));