Articles of raycasting

(虚幻c ++)即使我把它设置为忽略,多线射线重叠与胶囊对撞机

UpdateRay(); TraceParams = new FCollisionQueryParams(FName("")); TraceParams.bTraceComplex = false; TraceParams.AddIgnoredActor(this); ResponseParams = new FCollisionResponseParams(ECR_Overlap); HitResult.Init(FHitResult(ForceInitToZero), 10); FHitResult result; bool isTrace = World->LineTraceMultiByChannel(HitResult, PlayerLocation, TraceLine, ECollisionChannel::ECC_GameTraceChannel1, TraceParams, *ResponseParams); if (HitResult.Num()>0) { CreateBulletHole(HitResult[0]); TSubclassOf<UDamageType> const ValidDamgeTypeClass = TSubclassOf<UDamageType>(UDamageType::StaticClass()); FDamageEvent DamageEvent(ValidDamgeTypeClass); for (int x=0;x<HitResult.Num();x++) { result = HitResult[x]; AActor* Actorhit = result.GetActor(); UPenetrationComponent* PenetrationComponent = Actorhit->FindComponentByClass<UPenetrationComponent>(); if (PenetrationComponent) { […]

我如何从光线位置移除视图和投影matrix来获取光线模型?

我的采摘模块有点问题,我需要你的帮助。 当我点击某处时,我有一种方法可以将相机中的光线投射到一个固定点。 计算出来的光线看起来不错,它走向问题的方向,并通过尖顶的盒子,所以我在这里想一切都好。 当我试图从原点进一步拾取对象时,找不到交点。 我敢肯定,射线是正确的投影和计算到屏幕(我画),但坐标是不好的在相交testing。 目前,我用这个代码计算射线: const glm::vec3 position = glm::vec3( mouse.x, mouse.y, 0.f ); const glm::mat4& view = camera.getViewMatrix(); const glm::mat4& projection = camera.getProjectionMatrix(); const glm::vec4& viewPort = camera.getViewport(); ray.origin = glm::unProject( glm::vec3(mouse.x, mouse.y, 0.f ), modelView, projection, viewPort ); ray.direction = glm::unProject( glm::vec3( mouse.x, mouse.y, 0.f ), modelView, projection, viewPort ); 所以,我认为射线的起源和方向是计算到世界的位置(用相机matrix:投影和视图)。 当我testing十字路口时,我使用了对象模型(没有摄像头变换),所以我想错误在这里。 […]

将3D旋转vector转换成3D前向标题vector

我需要做一个接受Vector3D StartPos和Vector3D EndPos的raycast。 我可以使用3Dvector中的角色位置和相机旋转。 我需要以某种方式计算相机旋转的“前进方向”,并将其应用于玩家的位置,并乘以一些大数目来获得我的EndPosvector,但是我无法弄清楚它背后的math问题,我知道我可以使用sin ()和cos(),这是我想要采取的方法。 irr::core::vector3df CamRotation = GetOwner()->GetRotation(); irr::core::vector3df StartPos(GetOwner()->GetPosition().x(), GetOwner()->GetPosition().y(), GetOwner()->GetPosition().z()); irr::core::vector3df EndPos(0, 0, 0); 我已经尝试过使用sin()和cos()以不同的组合方式将负面信号投入到地方,但坦率地说,我不知道如何正确使用这些函数。

给定变形网格上的射线相交位置,如何计算每个变形目标的位置?

我正在制作一个注释系统,允许用户点击一个网格来附加一个标签挂在它的标签。 必须可以将注释固定在与关键帧变形目标一起变形的对象上,以便引脚与网格的表面一起移动。 这主要是非常简单的,我在这里做一个射线相交来find网格上的针位置,以确定变形目标当前时间的网格形状。 那么我有,那个时候的例子: 引脚的3D坐标 其中的三角形(即三角形顶点的指标和顶点位置) 时刻 现在,如果我在每个变形的目标上都有引脚的三维坐标,那么我可以简单地调整引脚位置,使其与变形同步进行animation处理。 然而,我所面临的挑战是以这种三种信息来计算每个变形目标上针的位置。 直觉上,似乎是在某种程度上find某种系数(或一系列系数),这个系数表示了在我们连接引脚的变形序列内的瞬间,引脚相对于其封闭三角形的顶点的位置。 然后,对于变形序列中的每个其他目标,给定三角形顶点的变形位置(可以是任何东西),以某种方式使用系数(s)来find相对于三角形的当前顶点位置的更新的针位置。 有人有什么想法? math指针等? 干杯!

Raycast足够用于基于太阳位置的游戏时钟吗?

我需要帮助我的脚本中的一些逻辑。 我创建了一个dynamic的日/夜周期,本身工作正常,但我想添加一个游戏时钟,在太阳初始位置(Directional Light)工作。 我以为可以通过从定向光线向地形射出光线并计算我将用来估计时间的角度来实现。 光线投射是最好/最有效的方法来做到这一点? 是否有可能实现我所要求的,如果不是,有没有更适合我需要的方法? 所以要过去..我希望用户能够把太阳沿着x轴的任何地方,将围绕地形旋转,当用户满意他们select的位置,在游戏启动时,我想我的脚本计算太阳的当前位置,然后估计当前时间。 在那之后我可以照顾实际的时钟,但是从太阳到地面的光线投射是这样的,或者我应该以完全不同的方式来看待这个问题?

使用select矩形框进行光线投射

我目前正在为我的游戏制作一个关卡编辑器,并希望实现一个select工具,以便一次select多个体素。 我的问题是获得所有选定对象的最有效方法是什么? 我是否只是取消了select矩形的起始位置和结束位置,然后创建一个边界框,然后我可以用它来进行交叉检查,还有更好的方法吗? 编辑:由于我不能旋转边界框我需要find另一种方式。 我只需要一种方法来找出一个体素的边界框是否在由select的四个点形成的框内。

如果父层被设置为忽略,则Raycast不检测子层

我有一个LineRenderer忽略基于使用LayerMask的Raycast某些图层。 我有一个与对象的一个​​立方体,因为LayerMask而被忽略。 我在立方体内部有一个较小的对象,它是多维数据集的子对象,并且位于未设置为忽略的图层上。 我需要Raycast 击中较小的对象。 当这个较小的对象是从更大的立方体un-parented,LineRenderer的行为就像我想要的: hit数据告诉我它被射线击中,但是这并不适用,如果较小的对象是一个孩子的立方体 。 有没有办法让这种行为,而不必un-parent较小的对象? 这就像小的对象inheritance父层,尽管是在自己的层 – 这听起来像是在发生什么?

为什么这个raycast代码给我一个NullReferenceException?

代码中的错误是NullReferenceException:对象引用未设置为对象的实例如果(hitxx.collider.tag ==“士兵”)请帮助! 提前致谢 void Update () { Physics.Raycast (eyeenemy.transform.position, (eyeenemyfront.transform.position – eyeenemy.transform.position) * 20,out hitxx); Debug.DrawRay (eyeenemy.transform.position, (eyeenemyfront.transform.position – eyeenemy.transform.position) * 20,Color.green); if (hitxx.collider.tag == "soldier") { gameObject.transform.LookAt (soldier.transform.position); Debug.Log ("chuchu"); }

更新UI旋转根据相机旋转

我有一个相机显示userInterface(canvas)对象到我的相机的前面。 我只更新我的用户界面位置,如果相机光线不是我的userInterface对象碰撞器 。 像这样的东西 public class UIPlacerAtCamFront : MonoBehaviour { public GameObject userInterface; public float placementDistance; Vector3 uiPlacementPosition; RaycastHit objectHit; void Update () { Vector3 fwd = this.transform.TransformDirection(Vector3.forward); //Debug.DrawRay(this.transform.position, fwd * 50, Color.green); if (Physics.Raycast(this.transform.position, fwd, out objectHit, 50)) { //raycast hitting the userInterface collider, so do nothing, userinterface is infornt of the camrea already […]

寻找一个图书馆来创建一个基于网格的第一人称游戏在线

在我自己构建之前,我一直在寻找一个图书馆,可以帮助建立一个基于网格的第一人称视图,类似于: 我打算在我正在组织的一个黑客马拉松中制作一个基于Web的版本。 在Python中会有这样的东西吗?