JSC3D:翻译对象

时间:2015-09-08 09:50:30

标签: javascript jsc3d

我正在尝试翻译空间中的对象,我有这个函数应该翻译对象,它存储在.js文件中

 JSC3D.Matrix3x4.prototype.translate = function(tx, ty, tz) {
this.m03 += tx;
this.m13 += ty;
this.m23 += tz;
 };

但是在另一个js文件中我试图实现实数并移动对象,如何调用此函数并更改其参数?

2 个答案:

答案 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;
   }
};