예제 #1
0
void VectorRenderer::render(RenderContext * context)
{
	assert(this->m_initial != 0);
	assert(this->m_vector != 0);

	math::const_VectorRef<2> initial(this->m_initial);
	math::const_VectorRef<2> vector(this->m_vector);

	glColor4v(m_color.ptr());

	glBegin(GL_LINES);
		glVertex2v(initial.ptr());
		glVertex2v((vector + initial).ptr());
	glEnd();

	if (m_frontArrow && !vector.isZero()) {
		math::Vector<2> versor = vector.versor();
		versor.mul(INITIAL_ARROW_SIZE * context->currentView()->svHeightRatio());
		glBegin(GL_TRIANGLES);
			glVertex2v((vector + initial).ptr());
			glVertex2v((vector + initial - versor.rotate(INITIAL_ARROW_ANGLE)).ptr());
			glVertex2v((vector + initial - versor.rotate(-2.0 * INITIAL_ARROW_ANGLE)).ptr());
		glEnd();
	}
}
예제 #2
0
inline void glColor( const QVector4D & color )	{ glColor4v( reinterpret_cast<const float*>(&color) ); }