Stack Overflow で見つけた次のコードを使用して、Three.js シーンのジオメトリから OBJ をエクスポートしようとしました。ジオメトリは GLSL シェーダーによって置き換えられているため、頂点の置き換えがジオメトリと共にエクスポートされていないようです。OBJ を Blender にインポートすると、変位していない平面のみが得られます。http://kineticvideo.coで変位の動作バージョンを調べることができます。
GLSL シェーダを使用してジオメトリを置き換えているときに OBJ をエクスポートするにはどうすればよいですか? 助けてください。Three.jsジオメトリで頂点の変位が実際にリアルタイムで更新されるという印象を受けましたが、代わりに、geometry.verticesNeedUpdate = true; ディスプレイスメントは、ジオメトリではなくメッシュで実際に発生しています。
その場合、ジオメトリではなくメッシュを使用して OBJ をエクスポートするにはどうすればよいですか?
ジオメトリと頂点シェーダーを宣言する Three.js のコード スニペット:
videoMaterial = new THREE.ShaderMaterial( {
uniforms: {
"tDiffuse": { type: "t", value: texture },
"multiplier": { type: "f", value: 66.6 },
"displace": { type: "f", value: 33.3 },
"opacity": { type: "f", value: 1.0 },
"originX": { type: "f", value: 0.0 },
"originY": { type: "f", value: 0.0 },
"originZ": { type: "f", value: -2000.0 }
},
vertexShader: RuttEtraShader.vertexShader,
fragmentShader: RuttEtraShader.fragmentShader,
depthWrite: true,
depthTest: true,
wireframe: false,
transparent: true,
overdraw: false
});
videoMaterial.renderToScreen = true;
videoMaterial.wireframe = true;
geometry = new THREE.PlaneGeometry(720, 360, 720, 360);
geometry.overdraw = false;
geometry.dynamic = true;
geometry.verticesNeedUpdate = true;
mesh = new THREE.Mesh( geometry, videoMaterial );
これは私が使用した関数で、ジオメトリをエクスポートしますが、変位はエクスポートしません:
THREE.saveGeometryToObj = function (geometry) {
var s = '';
for (i = 0; i < geometry.vertices.length; i++) {
s+= 'v '+(geometry.vertices[i].x) + ' ' +
geometry.vertices[i].y + ' '+
geometry.vertices[i].z + '\n';
}
for (i = 0; i < geometry.faces.length; i++) {
s+= 'f '+ (geometry.faces[i].a+1) + ' ' +
(geometry.faces[i].b+1) + ' '+
(geometry.faces[i].c+1);
if (geometry.faces[i].d !== undefined) {
s+= ' '+ (geometry.faces[i].d+1);
}
s+= '\n';
}
return s;
console.log(s);
}