Krpano全景开发教程-汉化VR设置界面

Krpano 1.19支持WebVR / MobileVR,MAKE VTOUR生成器内置对VR的支持。配合VR设备使用,可以实现VR效果。默认Web VR主界面和Customize界面为英文,需要汉化。

VR主界面.png
Customize界面.png

krpano使用简单的xml文本文件来存储相关的设置等,包括提示信息和界面文字。汉化,其实是把英文提示信息和界面文字替翻译替换成中文。
步骤:
下面以krpano-1.19-pr8为例:

  1. 找到全景项目文件夹vtour\plugins的webvr.xml(或者直接把krpano-1.19-pr8文件夹下\templates\xml\plugins的webvr.xml,这样以后生成的webvr.xml都是已经汉化过的)
  2. 编辑工具(例如sublime)打开webvr.xml。
  3. 将英文对应替换成中文。以下是中英文对比:
英文 中文
No Distortion 无扭曲
[i][u]Simulated WebVR Mode![/u][/i][br]For real WebVR with headset tracking, either use a [a href="http://webvr.info" target="_blank" style="color:#FFFFFF;"]WebVR-API-capable[/a] desktop browser or a mobile device and a VR headset. [i][u]模拟WebVR模式![/u][/i][br]需要体验头显设备跟踪的真正的WebVR,请使用支持[a href="http://webvr.info" target="_blank" style="color:#FFFFFF;"]WebVR-API[/a]的桌面浏览器或手机和VR头显设备。
Enter VR 进入VR模式
Exit VR 退出VR模式
VR Setup VR模式设置
inch 英寸
mm 毫米
Custom 自定义
MOBILE VR SETUP VR设置
Device 设备
Screensize 屏幕尺寸
IPD 瞳距
VR Headset VR头显或VR头戴设备
Customize 自定义设置
Calibrate Gyroscope 陀螺仪校准
SAVE 保存
RESET 恢复默认值
CLOSE 关闭
VR HEADSET VR头显设备
FOV 垂直视域
Distortion 扭曲参数
Dist2 附加扭曲参数
CA Corr 色差校正
Vignette 镜头晕影
Overlap 视野重叠
GYROSCOPE 陀螺仪
Place the device on a flat and[br]stable surface and tab calibrate[br]to correct a gyroscope drifting. 将设备放置在[br]水平面上,点击校准[br]修正陀螺仪偏移.
CALIBRATE 校准
Calibrating... 校准中...
Calibration okay. 校准完成.
Calibration failed! 校准失败!
         
            
            

        
        
        
        
        
        
        
        
        
        

        
        

       
          
        if(webvr.isenabled,
            if(%1 != null, set(vr_aclk_timeout, %1), set(vr_aclk_timeout, 2000));
            copy(vr_aclk_t1, timertick);
            set(vr_aclk_waiting, true);
            copy(vr_aclk_hotspot, name);
            set(hotspot[vr_cursor].crop,'0|0|80|80');

            asyncloop(vr_aclk_waiting AND vr_aclk_hotspot == name,
                sub(dt, timertick,vr_aclk_t1);

                if(!hovering,
                    set(vr_aclk_waiting, false);
                    set(hotspot[vr_cursor].crop,'0|0|80|80');
                  ,
                    div(f, dt, vr_aclk_timeout);
                    mul(f, 16);
                    roundval(f);
                    Math.min(f, 16);
                    mul(f, 80);

                    txtadd(hotspot[vr_cursor].crop,get(f),'|0|80|80');

                    
                    sub(dt, 100);
                    if(dt GT vr_aclk_timeout,
                        set(vr_aclk_waiting,false);
                        set(hotspot[vr_cursor].crop,'0|0|80|80');
                        
                        onclick();
                      );
                  );
                );
          );
        

        
        

        
        
        webvr.loadsettings();
        delayedcall(0.5, tween(layer[webvr_enterbutton].alpha,1.0); );
        
    
        
        if(webvr.isfake AND device.desktop AND webvr.havesettings == false,
            
            set(webvr.mobilevr_lens_overlap, 1.0);
            set(webvr.mobilevr_lens_fov, 96.0);
            set(webvr.mobilevr_lens_dist, 0.0);
            set(webvr.mobilevr_lens_dist2, '1|0|0|0');
            set(webvr.mobilevr_lens_ca, 0.0);
            set(webvr.mobilevr_lens_vign, 100);
          ,
            set(ask_user_for_screensize,true);
          );
        

        
        tween(layer[webvr_enterbutton].alpha,0,0);

        webvr_showbuttons();
        webvr_hide_all_non_vr_layers();

        
        if(webvr.ismobilevr == true AND !webvr.isfake AND ask_user_for_screensize == true AND webvr.mobilevr_screensize == 'auto',
            set(ask_user_for_screensize, false);
            vr_setup();
          );
        if(webvr.isfake,
            webvr_show_fakemode_info(true);
          );
        

        
        stopdelayedcall(vr_button_fadeout);

        tween(layer[webvr_enterbutton].alpha,1);
        tween(layer[webvr_exitbutton].alpha,0);
        tween(layer[webvr_setupbutton].alpha,0);
        
        webvr_show_fakemode_info(false);

        webvr_restore_layers();
        

        
        for(set(i,0), i LT layer.count, inc(i),
            copy(lr, layer[get(i)]);
            if(lr.vr !== true,
                copy(lr.vr_backup_visible, lr.visible);
                set(lr.visible, false);
              );
          );
        

        
        for(set(i,0), i LT layer.count, inc(i),
            copy(lr, layer[get(i)]);
            if(lr.vr_backup_visible,
                copy(lr.visible, lr.vr_backup_visible);
                delete(lr.vr_backup_visible);
              );
          );
        
    
        
        if('%1' == 'true',
            addlayer(webvr_fakemode_info);
            set(layer[webvr_fakemode_info].url, '%SWFPATH%/plugins/textfield.swf');
            set(layer[webvr_fakemode_info].keep, true);
            set(layer[webvr_fakemode_info].align, 'bottom');
            set(layer[webvr_fakemode_info].y, 80);
            set(layer[webvr_fakemode_info].background, false);
            set(layer[webvr_fakemode_info].css, 'color:#FFFFFF;text-align:center;');
            set(layer[webvr_fakemode_info].html, '[i][u]模拟WebVR模式![/u][/i][br]需要体验头显设备跟踪的真正的WebVR,请使用支持[a href="http://webvr.info" target="_blank" style="color:#FFFFFF;"]WebVR-API[/a]的桌面浏览器或手机和VR头显设备。');
          ,
            removelayer(webvr_fakemode_info);
          );