OpenGL iOS 屏幕坐标到场景坐标
OpenGL iOS screen coordinates to scene coordinates
我正在使用 OpenGl 制作一个小应用程序,但我不知道如何获取触摸的 x , y
和 z
坐标
例如:
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [touches anyObject];
CGPoint touchPoint = [touch locationInView:[self view]];
float X = touchPoint.x;
float Y = touchPoint.y;
}
用这个我只得到 x
和 y
坐标,但我还需要 z
您无法在 OpenGL ES 上读取 z 缓冲区。当我需要进行这种 3D 命中测试时,我会在场景中投影一条 3d 线并自己完成命中测试。
对于 Retina 设备上的 OpenGL,您需要将 x 和 y 乘以比例。要支持 iPhone 6+,您需要在可用时使用 nativeScale。
// Do this when setting up view controller and remember theScale.
if ([[UIScreen mainScreen] respondsToSelector:@selector(nativeScale)])
theScale = [[UIScreen mainScreen] nativeScale];
else if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)])
theScale = [[UIScreen mainScreen] scale];
else
theScale = 1.0;
我正在使用 OpenGl 制作一个小应用程序,但我不知道如何获取触摸的 x , y
和 z
坐标
例如:
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [touches anyObject];
CGPoint touchPoint = [touch locationInView:[self view]];
float X = touchPoint.x;
float Y = touchPoint.y;
}
用这个我只得到 x
和 y
坐标,但我还需要 z
您无法在 OpenGL ES 上读取 z 缓冲区。当我需要进行这种 3D 命中测试时,我会在场景中投影一条 3d 线并自己完成命中测试。
对于 Retina 设备上的 OpenGL,您需要将 x 和 y 乘以比例。要支持 iPhone 6+,您需要在可用时使用 nativeScale。
// Do this when setting up view controller and remember theScale.
if ([[UIScreen mainScreen] respondsToSelector:@selector(nativeScale)])
theScale = [[UIScreen mainScreen] nativeScale];
else if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)])
theScale = [[UIScreen mainScreen] scale];
else
theScale = 1.0;