1

VTK で作成した画像をサーバーからクライアントに送信できる Web アプリケーションに取り組んでいます。しかし、インターネットの速度がファイル システムの速度に依存していることをどうやって知ることができますか。作業を高速化するために、クライアントの webGL に追加することにしました。そして今、データ同期で疑問が生じました。VTK では、オブジェクトの周りでカメラを回転させます。何度も試みた後、クライアント側ではできませんでした。カメラは (カメラの座標を変更すると) うまく機能しますが、オブジェクトの回転を修正することができました。このいくつかの質問: 1. カメラのアイデアはありますか? 2.または、vtkで回転を変更するのは簡単ですか?

アップデート:

私はカメラを作成し、それはvtkと同期していますが、viewUpベクトルに問題があることを知っています。クライアントでは、ファイが90を超えて上昇した後、(0,-1,0)になり、SetViewUp(0,-1,0)を作成すると) 何も変わっていません

Javascript:

    renderer.domElement.addEventListener('mousemove', function(e) {
            e.preventDefault();

            if ( paused ) {
                return;
            }

            if ( !moving ) {
                lastLeft = e.clientX;
                lastTop = e.clientY;
                moving = true;
            }

            // horizontal
            theta = - ( ( event.clientX - lastLeft ) * 360 /window.innerWidth ) + onMouseDownTheta;
            phi = ( ( event.clientY - lastTop ) * 360 /window.innerHeight ) + onMouseDownPhi;



            //phi = Math.min( 90, Math.max( -90, phi ) );
            var cosPhi = Math.cos( phi * Math.PI / 180 );
            var sinPhi = Math.sin( phi * Math.PI / 180 );
            var sinTheta = Math.sin( theta * Math.PI / 180 );
            var cosTheta = Math.cos( theta * Math.PI / 180 );


            //trace('data_move');trace(radious);trace(theta);trace(phi);trace(camera.up);   

            camera.position.x = radious * cosTheta * cosPhi;
            camera.position.y = radious * sinPhi;
            camera.position.z = radious * sinTheta * cosPhi;

            var u;
            if (phi<0)  phi=2*180+phi;
            if (phi>2*180)  phi=phi-2*180;

            if ((phi>180/2)&&(phi<3*180/2))
                u=-1;
            else
                u=1;

            camera.up = new THREE.Vector3(0, u, 0);
            camera.lookAt(new THREE.Vector3(FocalPoint[0],FocalPoint[1],FocalPoint[2]))
            trace('data_move');trace(FocalPoint);trace(camera.up);  

            camera.updateMatrix();

        });
        renderer.domElement.addEventListener('mousedown', function(e) {
            paused = false;
            lastLeft = e.clientX;
            lastTop = e.clientY;
            onMouseDownTheta = theta;
            onMouseDownPhi = phi;

        });
        renderer.domElement.addEventListener('mouseup', function(e) {
            moving = paused = true;
            counter = 0
            trace('data_move');trace(camera.position);trace(camera.up); 
            comm.makeRequest("vtk", {
                mode: curVtkConf.mode,
                command: "set_camera",
                up: {'x': camera.up.x,'y': camera.up.y,'z': camera.up.z},
                position: {'x': camera.position.x,'y': camera.position.y,'z': camera.position.z},
            });
        });

フィトン:

 def set_camera(self, position, up):
    '''
    Поворот в жестко заданную позицию.
    '''
    self.move_to_origin()
    bounds = self.src_actor.GetBounds()
    camera = self.renderer.GetActiveCamera()
    x, y, z = camera.GetPosition()
    edge = None
    camera.SetPosition(position['x'], position['y'], position['z'])
    camera.SetViewUp(up['x'], up['y'], up['z'])
    self.world_coords_to_pixel_ratio = self._get_world_coords_to_pixel_ratio()
    camera.OrthogonalizeViewUp()
    camera.SetRoll(0)
    self.renderer.ResetCameraClippingRange()
    self.renderer.ResetCamera()   

アップデート2:

また、回転に問題があります。モデルは回転中にサイズを変更しました

解決済み: モデルを中央に移動することにより

まったく解決しました))

4

0 に答える 0