Vuforia Virtual Button(虚拟按钮)案例二——按钮事件处理
来源:互联网 发布:网络机顶盒能看卫视吗 编辑:程序博客网 时间:2024/06/05 11:55
原文:http://blog.csdn.net/ggtaas/article/details/38712891
一、利用Unity3d进行开发
查看这个脚本,是对虚拟按钮的事件进行监听控制。相应地修改按钮的触发事件可以通过这个类进行。
- // Add the material corresponding to this virtual button
- // to the active material list:
- switch (vb.VirtualButtonName)
- {
- case "red":
- mActiveMaterials.Add(m_TeapotMaterials[0]);
- break;
- case "blue":
- mActiveMaterials.Add(m_TeapotMaterials[1]);
- break;
- case "yellow":
- mActiveMaterials.Add(m_TeapotMaterials[2]);
- break;
- case "green":
- mActiveMaterials.Add(m_TeapotMaterials[3]);
- break;
- }
- // Apply the new material:
- if (mActiveMaterials.Count > 0)
- mTeapot.renderer.material = mActiveMaterials[mActiveMaterials.Count - 1];
二、在Eclipse中
使用的版本是SDK3.0.9,samples是3.0.5。
虚拟按钮sample包下只有这两个文件,一个主类,一个渲染类。
主类中主要对虚拟按钮进行设置并创建。
渲染类主要对按钮事件进行监听和渲染三维模型。
Vuforia 虚拟按钮案例执行流程:
先调用这个接口方法:
public voidonInitARDone(SampleApplicationException exception)
再在该方法中调用private voidsetSampleAppMenuSettings(),在该方法中设置虚拟按钮的选项:
group =mSampleAppMenu.addGroup("", true);
group.addSelectionItem(getString(R.string.menu_button_red),
CMD_BUTTON_RED, true);
group.addSelectionItem(getString(R.string.menu_button_blue),
CMD_BUTTON_BLUE, true);
group.addSelectionItem(getString(R.string.menu_button_yellow),
CMD_BUTTON_YELLOW, true);
group.addSelectionItem(getString(R.string.menu_button_green),
CMD_BUTTON_GREEN, true);
包含按钮名称、触发指令以及是否开启。
触发之后执行该接口方法:publicboolean menuProcess(int command)
caseCMD_BUTTON_RED:
addButtonToToggle(0);
break;
case CMD_BUTTON_BLUE:
addButtonToToggle(1);
break;
case CMD_BUTTON_YELLOW:
addButtonToToggle(2);
break;
case CMD_BUTTON_GREEN:
addButtonToToggle(3);
break;
再执行这个方法:
private voidaddButtonToToggle(int virtualButtonIdx)
{
Log.d(LOGTAG,"addButtonToToggle");
assert (virtualButtonIdx >= 0&& virtualButtonIdx < NUM_BUTTONS);
switch (virtualButtonIdx)
{
case 0:
buttonMask |= BUTTON_1;
break;
case 1:
buttonMask |= BUTTON_2;
break;
case 2:
buttonMask |= BUTTON_3;
break;
case 3:
buttonMask |= BUTTON_4;
break;
}
updateBtns = true;
}
然后这个方法每帧都会执行,publicvoid onQCARUpdate(State state),因此又执行到
if ((buttonMask & BUTTON_1) != 0)
{
Log.d(LOGTAG, "ToggleButton 1");
toggleVirtualButton(imageTarget, virtualButtonColors[0],
-108.68f, -53.52f, -75.75f,-65.87f);
}
if ((buttonMask & BUTTON_2) !=0)
{
Log.d(LOGTAG, "ToggleButton 2");
toggleVirtualButton(imageTarget,virtualButtonColors[1],
-45.28f, -53.52f, -12.35f,-65.87f);
}
if ((buttonMask & BUTTON_3) !=0)
{
Log.d(LOGTAG, "ToggleButton 3");
toggleVirtualButton(imageTarget,virtualButtonColors[2],
14.82f, -53.52f, 47.75f,-65.87f);
}
if ((buttonMask & BUTTON_4) !=0)
{
Log.d(LOGTAG, "ToggleButton 4");
toggleVirtualButton(imageTarget,virtualButtonColors[3],
76.57f, -53.52f, 109.50f,-65.87f);
}
// Reactivate the data set:
it.activateDataSet(dataSet);
buttonMask = 0;
updateBtns = false;
最后执行到这个方法就成功创建了四个虚拟按钮:
booleantoggleVirtualButton(ImageTarget imageTarget, String name,
float left, float top, float right,float bottom)
注意:在主类中并没有相应的触发事件,只是创建了四个按钮,那么触发事件是在哪里监听的呢?答案就是渲染类。
在渲染类主要工作有两个:一是监听虚拟按钮触发事件,二是渲染三维虚拟模型
在renderFrame()方法中,同样该方法也是会每帧渲染的,所以会一直在监听和渲染。
for (int j = 0; j <VirtualButtons.NUM_BUTTONS; ++j)
{
if(button.getName().compareTo(
mActivity.virtualButtonColors[j])== 0)
{
buttonIndex = j;
break;
}
}
// If the button is pressed,than use this texture:
if (buttonResult.isPressed())
{
textureIndex = buttonIndex+ 1;
}
根据这里可以修改模型,不同的textureIndex对应不同的模型。
研究这个方法的实现可以看出,
public StringgetName() {
returnVuforiaJNI.VirtualButton_getName(this.swigCPtr, this);
}
public booleanisPressed() {
returnVuforiaJNI.VirtualButtonResult_isPressed(this.swigCPtr, this);
}
检测是否按下按钮的方法是本地库中定义的。
^_^本团队专业从事移动增强现实应用开发以及解决方案,有合作请私信联系!^_^
- Vuforia Virtual Button(虚拟按钮)案例二——按钮事件处理
- Vuforia Virtual Button(虚拟按钮)案例二——按钮事件处理
- Vuforia Virtual Button(虚拟按钮)案例一——按钮位置计算
- Vuforia Virtual Button(虚拟按钮)案例一——按钮位置计算
- Vuforia Virtual Button(虚拟按钮)使用技巧
- Vuforia虚拟按钮
- Unity + vuforia 开发虚拟按钮
- 简易的按钮事件----Button事件处理
- 【Unity3D自学记录】Unity3d Virtual Button(虚拟按钮)
- 按钮控件Button和事件处理
- Android学习笔记(七) —— 简易的按钮事件 — Button事件处理
- Java图形界面中单选按钮JRadioButton和按钮Button事件处理
- (Unity3d)Vuforia开发高阶二-虚拟按钮
- 自定义事件虚拟按钮
- UGUI 按钮事件案例
- 鼠标事件案例—按钮切换背景颜色
- 【Button】按钮onTouch事件监听
- Button按钮事件实现方式
- 未能正确加载“Microsoft.VisualStudio.Editor.Implementation.EditorPackage”包
- 7.1.1 使用 F# 记录类型
- Vuforia Virtual Button(虚拟按钮)案例一——按钮位置计算
- c编程:输入一个字符串,求出字符串的最后一个字符,如果是空字符串则返回空字符。
- hdu 5128 广州赛B题题解
- Vuforia Virtual Button(虚拟按钮)案例二——按钮事件处理
- linux下静态库与共享库的生成和使用
- 算法--计算两个绝对路径之间的相对路径
- 每个Java开发者都应该知道的5个JDK工具
- 从字节码角度看String的连接操作
- Longest Increasing Subsequence Show Result My Submissions
- IO流 FileInputStream(字节流) FileReader(字符流能打印出中文)把文件中内容读出来
- 用Swift写个Material Design组件库
- 小心小心再小心-缓冲区溢出