void PhysWorld3D::ForEachBodyInAABB(const Boxf& box, const BodyIterator& iterator)
	{
		auto NewtonCallback = [](const NewtonBody* const body, void* const userdata) -> int
		{
			const BodyIterator& bodyIterator = *static_cast<BodyIterator*>(userdata);
			return bodyIterator(*static_cast<RigidBody3D*>(NewtonBodyGetUserData(body)));
		};

		NewtonWorldForEachBodyInAABBDo(m_world, box.GetMinimum(), box.GetMaximum(), NewtonCallback, const_cast<void*>(static_cast<const void*>(&iterator)));
	}
Example #2
0
	void DebugDrawer::Draw(const Boxf& box)
	{
		if (!Initialize())
		{
			NazaraError("Failed to initialize Debug Drawer");
			return;
		}

		BufferMapper<VertexBuffer> mapper(s_vertexBuffer, BufferAccess_DiscardAndWrite, 0, 24);
		VertexStruct_XYZ* vertex = reinterpret_cast<VertexStruct_XYZ*>(mapper.GetPointer());

		Vector3f max, min;
		max = box.GetMaximum();
		min = box.GetMinimum();

		vertex->position.Set(min.x, min.y, min.z);
		vertex++;
		vertex->position.Set(max.x, min.y, min.z);
		vertex++;

		vertex->position.Set(min.x, min.y, min.z);
		vertex++;
		vertex->position.Set(min.x, max.y, min.z);
		vertex++;

		vertex->position.Set(min.x, min.y, min.z);
		vertex++;
		vertex->position.Set(min.x, min.y, max.z);
		vertex++;

		vertex->position.Set(max.x, max.y, max.z);
		vertex++;
		vertex->position.Set(min.x, max.y, max.z);
		vertex++;

		vertex->position.Set(max.x, max.y, max.z);
		vertex++;
		vertex->position.Set(max.x, min.y, max.z);
		vertex++;

		vertex->position.Set(max.x, max.y, max.z);
		vertex++;
		vertex->position.Set(max.x, max.y, min.z);
		vertex++;

		vertex->position.Set(min.x, min.y, max.z);
		vertex++;
		vertex->position.Set(max.x, min.y, max.z);
		vertex++;

		vertex->position.Set(min.x, min.y, max.z);
		vertex++;
		vertex->position.Set(min.x, max.y, max.z);
		vertex++;

		vertex->position.Set(min.x, max.y, min.z);
		vertex++;
		vertex->position.Set(max.x, max.y, min.z);
		vertex++;

		vertex->position.Set(min.x, max.y, min.z);
		vertex++;
		vertex->position.Set(min.x, max.y, max.z);
		vertex++;

		vertex->position.Set(max.x, min.y, min.z);
		vertex++;
		vertex->position.Set(max.x, max.y, min.z);
		vertex++;

		vertex->position.Set(max.x, min.y, min.z);
		vertex++;
		vertex->position.Set(max.x, min.y, max.z);
		vertex++;

		mapper.Unmap();

		Renderer::SetRenderStates(s_renderStates);
		Renderer::SetShader(s_shader);
		Renderer::SetVertexBuffer(&s_vertexBuffer);

		s_shader->SendColor(s_colorLocation, s_primaryColor);

		Renderer::DrawPrimitives(PrimitiveMode_LineList, 0, 24);
	}