OpenGL中简单矩形碰撞的问题
Problem with simple rectangle collison in OpenGL
我尝试实现碰撞检测和碰撞效果。这是我的碰撞检测代码:
fun collisionDetection(objcect : Renderable?, object2 : Renderable?) : Boolean {
var collisionX : Boolean = objcect?.getPosition()?.x?.plus(quadSizeX)!! >= object2?.getPosition()?.x!! && object2?.getPosition()?.x?.plus(quadSizeX)!! >= objcect?.getPosition()?.x!!
var collisionY : Boolean = objcect?.getPosition()?.y?.plus(quadSizeY)!! >= object2?.getPosition()?.y!! && object2?.getPosition()?.y?.plus(quadSizeY)!! >= objcect?.getPosition()?.y!!
var collisionZ : Boolean = objcect?.getPosition()?.z?.plus(quadSizeZ)!! >= object2?.getPosition()?.z!! && object2?.getPosition()?.z?.plus(quadSizeZ)!! >= objcect?.getPosition()?.z!!
return collisionX && collisionY && collisionZ }
当与通过转换设置为重叠值的重叠对象一起使用时,这似乎有效。这样
wall.translateLocal(Vector3f(0.0f, 1.0f, -8.0f))
和
wall2.translateLocal(Vector3f(0.0f, 2.0f, -8.0f))
碰撞检测为真。
当wall2在z轴上以不同的起点和速度移动,但x和y位置相同时,碰撞的效果应该是wall2停止移动,当两个物体的z位置相等时.我在主循环中以这种方式尝试过(以及许多其他方式......),但它仍然无法正常工作:
fun render(dt: Float, t: Float) {
glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT)
staticShader.use()
camera.bind(staticShader)
wall.render(staticShader)
wall2.render(staticShader)
if (collisionDetection(wall, wall2) == true) {
wall2.getPosition()
}
else {wall2.translateLocal(Vector3f(0.0f, 0.0f, -t.toFloat()* 0.001f))}
}
我现在不知道出了什么问题以及如何解决。 collisionDetection 函数似乎没有获取有关 wall2 z 轴上位置变化的信息。或者也许我需要一种不同的方法。
现在一切正常。忘记为第二个对象计算 QuadSize。这导致两个对象在同一个z.coordinate.Nothing上检测碰撞的函数出错了
我尝试实现碰撞检测和碰撞效果。这是我的碰撞检测代码:
fun collisionDetection(objcect : Renderable?, object2 : Renderable?) : Boolean {
var collisionX : Boolean = objcect?.getPosition()?.x?.plus(quadSizeX)!! >= object2?.getPosition()?.x!! && object2?.getPosition()?.x?.plus(quadSizeX)!! >= objcect?.getPosition()?.x!!
var collisionY : Boolean = objcect?.getPosition()?.y?.plus(quadSizeY)!! >= object2?.getPosition()?.y!! && object2?.getPosition()?.y?.plus(quadSizeY)!! >= objcect?.getPosition()?.y!!
var collisionZ : Boolean = objcect?.getPosition()?.z?.plus(quadSizeZ)!! >= object2?.getPosition()?.z!! && object2?.getPosition()?.z?.plus(quadSizeZ)!! >= objcect?.getPosition()?.z!!
return collisionX && collisionY && collisionZ }
当与通过转换设置为重叠值的重叠对象一起使用时,这似乎有效。这样
wall.translateLocal(Vector3f(0.0f, 1.0f, -8.0f))
和
wall2.translateLocal(Vector3f(0.0f, 2.0f, -8.0f))
碰撞检测为真。
当wall2在z轴上以不同的起点和速度移动,但x和y位置相同时,碰撞的效果应该是wall2停止移动,当两个物体的z位置相等时.我在主循环中以这种方式尝试过(以及许多其他方式......),但它仍然无法正常工作:
fun render(dt: Float, t: Float) {
glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT)
staticShader.use()
camera.bind(staticShader)
wall.render(staticShader)
wall2.render(staticShader)
if (collisionDetection(wall, wall2) == true) {
wall2.getPosition()
}
else {wall2.translateLocal(Vector3f(0.0f, 0.0f, -t.toFloat()* 0.001f))}
}
我现在不知道出了什么问题以及如何解决。 collisionDetection 函数似乎没有获取有关 wall2 z 轴上位置变化的信息。或者也许我需要一种不同的方法。
现在一切正常。忘记为第二个对象计算 QuadSize。这导致两个对象在同一个z.coordinate.Nothing上检测碰撞的函数出错了