解决Vuforia Sample中替换Image Target后Virtual Button不能准确改变茶壶颜色

问题的来源是一个任务:调研AR,识别一张名片,弹出3D模型,最好有互动。由于我是AR新手,最好的途径就是修改官方的例子。名片算是平面图像,对应Vuforia就是ImageTarget,而最容易想到的互动就是加入虚拟按键。
查找官方Sample,发现Virtual Button的例子符合我需要的效果,即识别一张Image,然后在Image的上方中间渲染出一个3D模型(此为一把3D茶壶),并且在Image底部均匀的排列着4个button,手指移到这些button,改变茶壶的颜色(纹理)。我只需要将这个Image换成我的名片就好了。
待我将名片上传到TargetImage,并将生成Database下载解压之后放到程序中读取,在解压之后的xml中加入四个VirtualButton标签,指定虚拟按键的位置。所有的修改做完之后开始运行程序,发现能渲染出茶壶和按钮,但是当手指挡住按钮的大部分区域时,茶壶的颜色乱跳,难道程序没有检测到被按下的按钮吗?
带着这个疑问,我找到了检测按钮是否被按下的代码块:

public void renderFrame(State state, float[] projectionMatrix)
{
	...
	if (buttonResult.isPressed())
	{
   		 Log.i(LOGTAG, i + " is pressed, name is: " + button.getName());  // 在此加上log
   		 textureIndex = buttonIndex + 1;
	}
	...
}	

手指覆盖第一个button时,打印输出的log:
解决Vuforia Sample中替换Image Target后Virtual Button不能准确改变茶壶颜色_第1张图片
从log中不难发现,程序认为我依次按了3个按钮,实际上我只按了第一个按钮,那么,为什么会这样呢?隐约觉得是我替换的image的问题,难道是虚拟按钮放置的位置不对?经过查阅官方文档,看到了这篇文章《How To Implement Virtual Buttons》
有这样一些建议:
解决Vuforia Sample中替换Image Target后Virtual Button不能准确改变茶壶颜色_第2张图片
对比上图,其他三条我都符合,只有第三条“Avoid defining buttons on low contrast areas of the targets.”不符合,这句英文翻译过来就是说“按钮应避免放置在目标的低对比度区域上”。我的按钮放置在名片的底部,正好是空白之处,对比度最低的地方。
带着这个思路,我将虚拟按键的位置从
解决Vuforia Sample中替换Image Target后Virtual Button不能准确改变茶壶颜色_第3张图片
调整到
解决Vuforia Sample中替换Image Target后Virtual Button不能准确改变茶壶颜色_第4张图片
再编译运行,虚拟按键能正常改变茶壶的颜色。打印的log如下:
解决Vuforia Sample中替换Image Target后Virtual Button不能准确改变茶壶颜色_第5张图片
由此可见,遇到问题了,还是应该看官方文档。

你可能感兴趣的:(Vuforia,Android,Virtual,Button,虚拟按键,Vuforia)