- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经问了一个类似的问题,这让我达到了现在的水平,但我真的需要一些帮助。这是我完成一些很酷的事情的最后一件事(在我看来哈哈)
我有一个 3D 世界,我可以在其中移动,这个世界里有简单的立方体。
使用函数 -(CGPoint)getScreenCoorOfPoint:(IMPoint3D)_point3D 我可以计算出这些立方体在 3D 世界中的 X、Y 位置。但它不是基于我所在的位置,而是基于他们在 3d 区域中的位置。使用相同的功能,我还可以计算出我所在的位置。我还可以找出有人点击了屏幕的位置。
我到底如何将它们映射在一起,以便我可以确定我是否单击了其中一个?
我当然需要一些东西来确定我面对的方向。人们建议将它们渲染出屏幕并做一些事情,但这完全超出了我的想象。我考虑放弃该功能并基于 3d 坐标构建自己的功能(以某种方式)
代码
for (NSDictionary *item in self.players)
{
int x;
int z;
x = [[item objectForKey:@"posX"] floatValue];
z = [[item objectForKey:@"posZ"] floatValue];
IMPoint3D playerPos;
playerPos.x = x;
playerPos.z = z;
playerPos.y = 1;
CGPoint screenPositionOfThisCube ;
screenPositionOfThisCube = [self getScreenCoorOfPoint:playerPos];
#define TUNE 28
CGRect fingerSquish = CGRectMake(
screenPositionOfThisCube.x - TUNE,
screenPositionOfThisCube.y - TUNE,
TUNE * 2,
TUNE * 2);
// now check that the POINT OF THE TOUCH
// is inside the rect fingerSquish
if ( CGRectContainsPoint( fingerSquish, pos ) )
{
NSLog(@"WOOP");
// YOU HAVE FOUND THE TOUCHED CUBEY.
// YOU ARE DONE. this item is the cube being touched.
// make the cube change color or something to test it.
}
}
我也尝试了 gluUnproject 但没有成功(请参阅我的其他帖子)
最佳答案
您正在讨论的概念(通过 2D 坐标在 3D 屏幕上选择对象)称为拾取。
请参阅我的旧帖子以获取一些解决方案:
关于iPhone : OpenGL ES : Detecting if you have tapped a object (cube) on screen,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4365856/
我是一名优秀的程序员,十分优秀!