我正在尝试翻译空间中的对象,我有这个函数应该翻译对象,它存储在.js文件中
JSC3D.Matrix3x4.prototype.translate = function(tx, ty, tz) {
this.m03 += tx;
this.m13 += ty;
this.m23 += tz;
};
但是在另一个js文件中我试图实现实数并移动对象,如何调用此函数并更改其参数?
答案 0 :(得分:0)
当然你可以做到!
通过添加如下方法扩展JSC3D.Mesh类:
JSC3D.Mesh.prototype.translate = function(translX, translY, translZ) {
var xformMat = new JSC3D.Matrix3x4;
xformMat.translate(translX, translY, translZ);
JSC3D.Math3D.transformVectors(xformMat, this.vertexBuffer, this.vertexBuffer);
this.calcAABB();
this.compiled = null;
};
但是你必须知道要移动哪个网格,例如,你可以通过点击查看器画布中已经加载的网格来选择一个网格:
var currentMesh;
function onViewerMouseDown(x, y, button, depth, mesh) {
if(button == 0/*left button down*/ && mesh != null) {
currentMesh = mesh;
}
}
// standard jsc3d code, set the canvas used for the 3d viewer
var canvas = document.getElementById('cv');
var viewer = new JSC3D.Viewer(canvas);
// viewer initialization parameters...
viewer.setParameter('SceneUrl', 'test.stl');
viewer.setParameter('RenderMode', 'texturesmooth');
viewer.init();
// at this time, you should have at least one mesh loaded ...
viewer.onmousedown = onViewerMouseDown;
然后,在你的"另一个js文件"你可以称这个新的实现:
currentMesh.translate(10, 20, 0);
viewer.update;
值10,20,0取决于你的网格有多大,以及它在观察者世界中占据多少空间,也许你应该增加这个值来看到明显的移动。
答案 1 :(得分:0)
JSC3D.Matrix3x4.prototype.translate = function(tx, ty, tz) {
var t=0;
var g=0;
var h=0;
t = parseFloat(document.getElementById('translate_x').value);
g = parseFloat(document.getElementById('translate_y').value);
h = parseFloat(document.getElementById('translate_z').value);
console.log(t);
if(t!=0 || g!=0 || h!=0)
{
console.log(this.m03);
this.m03 += tx;
this.m13 += ty;
this.m23 += tz;
tx=t;
ty=g;
tz=h;
this.m03 += tx;
this.m13 += ty;
this.m23 += tz;
}
else
{
this.m03 += tx;
this.m13 += ty;
this.m23 += tz;
}
};