Articles of 相交

Java 2D游戏Hitbox检测和圆角

我正在与Java,swing和没有框架的简单的2D游戏。 我有一个矩形玩家,用户可以四处移动。 在地图上,玩家不应该经历的障碍很less。 我为玩家制作了一个新的Rectangle对象,并为每个障碍物设置了边界。 但我不确定这是否是正确的做法。 它的作品,但玩家的动作并不真正的用户友好。 如果玩家想要通过两个障碍物,他们必须在完美的坐标上通过。 用一个Rectangle对象来检查玩家和障碍物之间的交叉点是否是一个好主意,还是应该以另一种方式来做呢? 现在我的第二个问题: 我想用同样的hitboxreplace矩形的hitbox,但是圆角,所以玩家可以更容易的通过。 这是游戏看起来像启用了hitboxes。 检查玩家和障碍物是否相交的代码: for (Player p : this.getPlayerArray()) { Rectangle recPlayer = p.playerBounds(); for (Obstacle kiste : obstacleArray) { Rectangle recKiste = kiste.obstBounds(); if (recPlayer.intersects(recKiste)) { p.setX(100); //Not actual code here } } } 返回玩家/障碍物的hitbox的函数: public Rectangle obstBounds() { return new Rectangle(this.getX(), this.getY(), image.getImage().getWidth(null), image.getImage().getHeight(null)); }

厚光线与AABB的相互作用

我想用一个AABB与厚光线(实际上是一个圆柱)相交。 当前执行射线交叉的代码如下。 template <class RealT> bool CAABB<RealT>::Pick(const CPoint3T & base, const CVector3T & dir) const { // SLAB based optimized ray/AABB intersection routine // Idea taken from http://ompf.org/ray/ RealT l1 = (_minPnt.x – base.x) / dir.x; RealT l2 = (_maxPnt.x – base.x) / dir.x; RealT lmin = minT( l1, l2 ); RealT lmax = maxT( […]

移动OBB与三角形相交testing

要求 :写一个testing函数,给定一个移动的OBB(方向包围盒)和一个三角形,只要OBB碰到三角形就返回true 。 OBB由其半范围( h1, h2, h3 ),主轴( a1, a2, a3 )和中心点C(cx,cy,cz) 。 三角形由三个顶点( U1, U2, U3 )来描述。 OBB以1秒的时间以速度V运动(因此V也是OBB经历的位移)。 问 :我已经读过Dave Eberly关于这件事的小型文件 ,并试图实施。 也与本文有关,我有一个关于W速度w投影的问题: – w等于dot(W, L) ,其中L是他在文中考虑的13个可能的分离轴之一?

线交叉码中的参数说明

我想了解一个移动网格节点的C代码,每个时间步骤,我完全触及参数t1和t2,请帮我分拣出来。 所以这里是函数得到的(Xa,Ya)(Xb,Yb)(Xc,Yc)和(Xd,Yd)其中(Xc,Yc)是网格旋转的原点(0,0),现在我有(Xa,Ya)(Xb,Yb)和(Xc,Yc)(Xd,Yd)形成的两条线之间的交点的线的重心forms中的参数)我不知道t2是什么 代码是 static void find_t(real xa, real ya, real xb, real yb, real xc, real yc, real xd, real yd, real *t1, real *t2, int * flag) { if((xd==xc)&&(xb!=xa)) { if(yd==yc) { Message0("\nc and d are the same points-aborting!!!\n"); exit(0); } (*flag) = 2; (*t1) = (xc-xa)/(xb-xa); (*t2) = ((yb-ya)*(*t1)-(yc-ya))/(yd-yc); } else if((xd!=xc)&&(xb==xa)) { […]

射线和段交叉点

我正在写一些代码来检查所有的矩形段和射线之间的交集。 即使当它明显位于矩形的顶部(面AB)时,它有时也会使用矩形的左侧和右侧作为最接近的面击中(面DA和BC)。 这是Rectangle v Ray碰撞的样子。 // Ray intersections static public IntersectData IntersectRectRay(Rectanglef rect, Vector2 origin, float dir) { IntersectData data = new IntersectData(); // Create segments for all the sides of a rectangle Segment topLeftRight = new Segment(rect.TopLeft, rect.TopRight); Segment leftTopBottom = new Segment(rect.TopLeft, rect.BottomLeft); Segment bottomLeftRight = new Segment(rect.BottomLeft, rect.BottomRight); Segment rightTopBottom = new […]

find线段交点的最佳方法

我需要find二维空间中两个线段之间的交点。 我用两条线的坐标来接收它们。 因为它们是线段,我还需要知道它们是否实际上相交在一起。 我可以find很多方法来做到这一点,但我想知道什么方法在GLSL中有最好的性能。

分段 – 汽缸相交

什么是完整的代码(C#,伪,无关紧要)计算结果段(或缺乏)的一个段和一个圆柱的交集? 该段由Vector3 (x,y,z)定义为Start , Vector3 (x,y,z)定义为End 。 气缸由相同的参数加上Radius的值定义。

给定每个边界的最小和最大Vector3,检查两个边界框相交的最佳方法是什么?

我有一个BoundingBox对象,它包含两个Vector3(x,y,z),一个用于最小点,另一个用于最大点。 (-1.5 0 9 | 1.5 3 10) 检查两个BoundingBox的交集或重叠的最好方法是什么? 当没有实际相交的点时,交叉点的testing会发生得更多。 我目前使用的代码是: bb1.max_.x_ > bb2.min_.x_ && bb1.min_.x_ < bb2.max_.x_ && bb1.max_.y_ > bb2.min_.y_ && bb1.min_.y_ < bb2.max_.y_ && bb1.max_.z_ > bb2.min_.z_ && bb1.min_.z_ < bb2.max_.z_; 但是,当点数是-1.5 0 9 | 1.5 3 10时,会导致问题 -1.5 0 9 | 1.5 3 10与-0.5 0 8.5 | 0.5 1.8 10.5相交-0.5 0 […]

剖切(实心)几何

我正在寻找基于图像的(屏幕空间)技术,通过任意(实体)几何体来渲染截面。 我发现并研究了基于图像的CSG( Kirsch 05 / OpenCSG ),但是我发现这对我的情况可能有点矫枉过正,我只需要一个截面切割。 上面是一个在片段着色器中使用discard实现,但显然这不是中途的事情,因为我需要弥补差距。 有谁知道我可以使用的技术/黑客?

如何计算三角形射线交叉点?

我有一条线(玩家的方向vector)和一个三角形,表示一个模型的面(3点组成)。 我找不到math运算来检查这个向量是否与这个三角形相交,距离玩家有多远…