我想知道如何将投影仪显示的整个Android UI扭曲(进行几何校正)到曲面屏幕上。
OpenGL是Android平台上的核心库,我知道OpenGL ES允许将每个屏幕框架作为纹理映射到用户定义的网格网格。
如何利用它来转换整个用户界面(跨所有应用和主题),如下图所示?
我也研究了可穿戴设备的API,但这似乎仅限于个别应用,并且不会翘曲。
如果我无法扭曲整个用户界面,那么我想要扭曲并显示来自Android TV HDMI-In的每一帧。 SDK似乎没有利用Open GL。我可以覆盖它并进行转换吗?
答案 0 :(得分:0)
Google Cardboard做了类似的事情来纠正镜头失真。谷歌尚未正式发布消息来源,但他们在允许的开源许可下发布了二进制文件,因此人们可以自由地反编译它。
大多数魔法发生的类称为DistortionRenderer
。基本上,场景被渲染到纹理缓冲区中,然后用于纹理 public class testSearch {
public static void main(String[] args){
// input array size from user
Scanner input = new Scanner(System.in);
System.out.print("Enter array size: ");
int size = input.nextInt();
System.out.println();
// create the array (the numbers do not really matter)
int[] numbers = new int[size];
for(int i=0; i<numbers.length; i++){
// we want the numbers sorted for binary search
// so why not just the numbers 0,1,...,size-1
numbers[i]=i;
}
// store the time now
long startTime = System.nanoTime();
// linear search for size (which is not in the array)
linearSearch(numbers,size);
// display the time elapsed
System.out.println("The time taken by Linear Search is " + (System.nanoTime() - startTime) + "nanoseconds.");
// prepare to measure the time elapsed again
startTime = System.nanoTime();
// binary search for size
binarySearch(numbers,size);
// display the time elapsed
System.out.println("The time taken by Binary Search is " + (System.nanoTime() - startTime) + "nanoseconds.");
}
public static boolean linearSearch(int[] a, int key) {
for(int i=0; i<a.length; i++){
if(a[i]==key) return true;
}
return false;
}
public static boolean binarySearch(int[] a, int key) {
int low = 0;
int high = a.length -1;
int mid;
while (low <= high) {
mid = (low + high) / 2;
if (a[mid]>key) {
high = mid - 1;
} else if (a[mid]<key) {
low = mid + 1;
} else {
return true;
}
}
return false;
}
}
。这听起来像是同样的技术对你有用,但是你必须想出自己的方法来生成与投影仪屏幕相对应的失真网格。