找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

查看: 562|回复: 12

[Vuforia] 虚拟实际 用户界面(VR UI): CrossApp的测验考试

[复制链接]

该用户从未签到

1

主题

16

帖子

3

积分

LV.1

Rank: 1

积分
3
QQ
发表于 2016-5-23 20:46:53 | 显示全部楼层 |阅读模式
起首讲一下, Android端 GLSu***ceView的衬着机制ARial">        CrossApp是基于Cocos2d-x引擎的,    而Cocos2d-x是完整基于 OpenGL的 。
        一般基于OpenGL的引擎 全部衬着机制 为:
         1 用EGL 库创立 窗口,联系关系OpenGL 高低文到该窗口
         2 设置窗口巨细 以及 glViewPort(...)
         3 while轮回里 , 写OpenGL衬着法式,衬着你想要的工具


       那么, 在Android端以上进程,都包括在了GLSu***ceView中。它供给了一个 Renderer接口, 此中应用最频仍的onDrawFrame就是用来,衬着我们想要的工具的。
       具体可以看 我的另一篇>        实在,编译成Android 版本的全部CrossApp都是 运行在 这个GLSu***ceView里面的, 此中 的衬着以及 触屏机制 都是  经由过程jni来挪用的, jni所应用的类都 在CrossApp/platform/android/jni/在目次下。 这些 jni native方式再往挪用引擎里的其它方式,从而, 在OnDrawFrame里经由过程 native CocosRender()方式衬着到GLSu***ceView上,浮现在我们的面前


CrossApp创立一个ListView的例子,
       若何 设置装备摆设CrossApp, 及创立Android工程,并运行工程的默认Demo,以及若何写一个简略的ListView请参考,>

       假如,以上您都胜利了,那么,我们重要讲授下若何将App的画面分屏。  
       起首,看一下,Android工程目次
        HelloCApp是我用 CrossApp创立的工程, 它依靠于CrossApp\platform\android\下的工程,重要是org.CrossApp.lib下的文件,它有
        为我们创立好的 Cocos2dxActivity, Cocos2dxGLSu***ceView, 和 Cocos2dxRenderer。
      

点击查看原图

点击查看原图

                    
        HelloCApp 与 org.CrossApp.lib的依靠关系如下:
        

点击查看原图

点击查看原图
    file:///C:/Users/can/AppData/Local/Temp/enhtmlclip/Image(1).png   





        其次,看一下, org.CrossApp.lib下的 类
        Cocos2dxActivity 是我们法式的主界面, 在这个类中 init方式里,会将Cocos2dxGLSu***ceView 视图添加到 一个frameLayout, 然后将该frameLayout作为界面的主视图。
        Cocos2dxGLSu***ceView 会经由过程setRenderer 将Cocos2dxRenderer 设置它的衬着接口。如许,当全部法式运行起来时, Cocos2dxRenderer的 onDrawFrame 会经由过程nativeRender()方式将 CrossApp创立的UI 衬着出来
        
      最后,若何分屏
         看到这里,我们基础已经知道,CrossApp的UI 都是 经由过程nativeRender()衬着出来的,即 在Cocos2dxRender.java 类的 onDrawFrame方式里:


        

点击查看原图

点击查看原图

   Cocos2dxRender.nativeRender() 是终极衬着到屏幕的纹理。
     我们假如可以或许拿到该纹理,则可以将纹理衬着到我们本身的面板上,
     即  先创立一个纹理依靠的 FrameBuffer, 然后nativeRender()将纹理衬着到这个依靠的纹理上,这个依靠的纹理就是我们想要的纹理,然后我们本身将屏幕分为摆布两个面板,将该纹理分辨衬着在这两个面板上,就到达了摆布分屏的目标
  
   VRSDK 是我本身写的SDK, bindOffSFrame() 就是绑定到纹理依靠的FrameBuffer上, showStereo() 是分屏的操纵。
   
   
若何应用VrSDK。
起首,>

  然后, 让 org.CrossApp.lib地点的工程,依靠于 VrSDK工程。
  

点击查看原图

点击查看原图

      
  最后, 在 Cocos2dxActivity的 onCreate(...)方式里,添加 VrSDK.getInstance().setContext(sContext);
              在 Cocos2dxRenderer里 的 onSu***ceChanged(...)方式里添加VrSDK.getInstance().init(pWidth, pHeight);


  
Okay,  看一下后果:
      

点击查看原图

点击查看原图




  如许就分屏了。  可以带上VR盒子体验了。


  提醒: 因为CrossApp是 App级的衬着引擎,不是游戏级的。是以,它在我们对App没有操纵时, 在C++ 层,是不再衬着的, UI会固定在最新的衬着出来的画面上。 可是,在Java层onDrawFrame仍是在不断的绘制的,这时,我们本身树立的FrameBuffer是拿不到图的,会呈现黑屏的现象。鄙人一贴,我会剖析,CrossApp的衬着机制,来解决这一题目。

该用户从未签到

0

主题

5

帖子

0

积分

LV.1

Rank: 1

积分
0
QQ
发表于 2016-5-24 08:43:57 | 显示全部楼层
支持一下

该用户从未签到

0

主题

5

帖子

0

积分

LV.1

Rank: 1

积分
0
QQ
发表于 2016-5-24 11:11:08 | 显示全部楼层
帮帮顶顶!!

该用户从未签到

1

主题

23

帖子

8

积分

LV.1

Rank: 1

积分
8
QQ
发表于 2016-5-24 15:00:52 | 显示全部楼层
有竞争才有进步嘛

该用户从未签到

2

主题

44

帖子

17

积分

LV.1

Rank: 1

积分
17
QQ
发表于 2016-5-24 17:27:46 | 显示全部楼层
帮帮顶顶!!

该用户从未签到

3

主题

17

帖子

17

积分

LV.1

Rank: 1

积分
17
QQ
发表于 2016-5-24 21:14:03 | 显示全部楼层
有竞争才有进步嘛

该用户从未签到

0

主题

5

帖子

0

积分

LV.1

Rank: 1

积分
0
QQ
发表于 2016-5-24 22:30:02 | 显示全部楼层
帮你顶下哈!!

该用户从未签到

3

主题

47

帖子

38

积分

LV.1

Rank: 1

积分
38
QQ
发表于 2016-7-28 10:43:38 | 显示全部楼层
想了解下AR增强现实的相关内容来看看

该用户从未签到

4

主题

18

帖子

16

积分

LV.1

Rank: 1

积分
16
QQ
发表于 2016-8-1 10:46:38 | 显示全部楼层
看帖怎么能不会呢??

该用户从未签到

1

主题

12

帖子

3

积分

LV.1

Rank: 1

积分
3
QQ
发表于 2016-11-10 07:33:31 | 显示全部楼层
楼主辛苦了。。回帖是一种美德
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

关闭

站长推荐上一条 /1 下一条

快速回复 返回顶部 返回列表