Esempio n. 1
0
File: OBB.cpp Progetto: Ilikia/naali
void OBB::Transform(const float4x4 &transform)
{
    assume(transform.IsOrthogonal3());
    OBBTransform(*this, transform);
}
Esempio n. 2
0
void OBB::Transform(const float3x4 &transform)
{
	assume(transform.IsColOrthogonal());
	OBBTransform(*this, transform);
}
Esempio n. 3
0
void OBB::Transform(const Quat &transform)
{
	OBBTransform(*this, transform.ToFloat3x3());
}
Esempio n. 4
0
static void ddRenderOBBs(const mat4& projview)
{
	const ShaderInfo* shader = g_dbgdrawShader.get();
	GLint posLoc = shader->m_attrs[GEOM_Pos];
	GLint colorLoc = shader->m_attrs[GEOM_Color];
	GLint mvpLoc = shader->m_uniforms[BIND_Mvp];
	glUniformMatrix4fv(mvpLoc, 1, 0, projview.m);

	static const float s_coords[][3] = {
		{ -1.f, -1.f, -1.f },
		{ 1.f, -1.f, -1.f },
		{ 1.f, 1.f, -1.f },
		{ -1.f, 1.f, -1.f },
		{ -1.f, -1.f, 1.f },
		{ 1.f, -1.f, 1.f },
		{ 1.f, 1.f, 1.f },
		{ -1.f, 1.f, 1.f },
	};

	const ddOBB* cur = g_lists.m_obbs;
	if(cur) 
	{	
		glBegin(GL_LINES);
		while(cur)
		{
			OBB obb = OBBTransform(cur->m_xfm, cur->m_obb);

			glVertexAttrib3fv(colorLoc, &cur->m_color.r);
			vec3 pt[8];
			for(int i = 0; i < 8; ++i)
			{
				pt[i] = obb.m_center + 
					obb.m_b[0] * s_coords[i][0] +
					obb.m_b[1] * s_coords[i][1] +
					obb.m_b[2] * s_coords[i][2];
			}

			// Bottom half
			glVertexAttrib3fv(posLoc, &pt[0].x);
			glVertexAttrib3fv(posLoc, &pt[1].x);

			glVertexAttrib3fv(posLoc, &pt[1].x);
			glVertexAttrib3fv(posLoc, &pt[2].x);

			glVertexAttrib3fv(posLoc, &pt[2].x);
			glVertexAttrib3fv(posLoc, &pt[3].x);

			glVertexAttrib3fv(posLoc, &pt[3].x);
			glVertexAttrib3fv(posLoc, &pt[0].x);

			// Top half
			glVertexAttrib3fv(posLoc, &pt[4].x);
			glVertexAttrib3fv(posLoc, &pt[5].x);

			glVertexAttrib3fv(posLoc, &pt[5].x);
			glVertexAttrib3fv(posLoc, &pt[6].x);

			glVertexAttrib3fv(posLoc, &pt[6].x);
			glVertexAttrib3fv(posLoc, &pt[7].x);

			glVertexAttrib3fv(posLoc, &pt[7].x);
			glVertexAttrib3fv(posLoc, &pt[4].x);

			// Connecting lines
			glVertexAttrib3fv(posLoc, &pt[0].x);
			glVertexAttrib3fv(posLoc, &pt[4].x);

			glVertexAttrib3fv(posLoc, &pt[1].x);
			glVertexAttrib3fv(posLoc, &pt[5].x);

			glVertexAttrib3fv(posLoc, &pt[2].x);
			glVertexAttrib3fv(posLoc, &pt[6].x);

			glVertexAttrib3fv(posLoc, &pt[3].x);
			glVertexAttrib3fv(posLoc, &pt[7].x);

			cur = cur->m_next;
		}
		glEnd();
	}
}