仅仅为了画张图,懒得详细渲染到图片了,想到用meshlab帮忙算法向量,然后用meshlab 可视化出来。
meshlab 保存的时候保存normal就会帮你算了, 然后脚本主要是处理把法向量转化成0-1之间,这样附在 顶点后面,meshlab就会显示出顶点的颜色了。
脚本用的ruby。
require '_chj/chj'
include CHJmethod
lines = readlines "shape.obj"
v = lines.select{|e| e[0..1]=="v "}.map{|e|e.split[1..3]}
vn = lines.select{|e| e[0..1]=="vn"}.map{|e|e.split[1..3].map{|e| e.to_f}}.map do |e|
len = Math.sqrt e.inject(0){|sum, x| sum+x*x}
e.map{|x| x/len*0.5+0.5}
end
f = lines.select{|e| e[0..1]=="f "}.map{|e|e.split[1..3].map{|e|e.split("//")[0]}}
nV, nF = v.size, f.size
File.open("normal.obj", "w") do |fp|
0.upto(nV-1).each do |id|
fp.puts "v "+v[id].join(" ")+" "+vn[id].join(" ")
end
0.upto(nF-1).each do |id|
fp.puts "f "+f[id].join(" ")
end
end
->