void vpNDOFJoint::BuildKinematics(void)
{
	for ( int i = 0; i < m_iDOF; i++ )
		GetState().push_back(vpState(this, i));
}
void vp1DOFJoint::BuildKinematics(void)
{
	GetState().push_back(vpState(this, 0));
}
Exemple #3
0
void VecSliderMenuItem::DrawNormalVecView(const Camera& curCamera, 
	float x, float y, float w, float h, const vec3& normal)
{
	GLint mvpLoc = g_normalViewShader->m_uniforms[BIND_Mvp];
	GLint colorLoc = g_normalViewShader->m_attrs[GEOM_Color];
	GLint posLoc = g_normalViewShader->m_attrs[GEOM_Pos];
	GLint coordLoc = g_normalViewShader->m_attrs[GEOM_Uv];
	GLint stippleLoc = g_normalViewShader->m_custom[NORMALBIND_Stipple];

	ViewportState vpState(x, g_screen.m_height-y-h, w, h);
	ScissorState scState(x, g_screen.m_height-y-h, w, h);

	glClearColor(0.05f,0.05f,0.05f,1.f);
	glClear(GL_DEPTH_BUFFER_BIT|GL_COLOR_BUFFER_BIT);

	Camera localcamera = curCamera;
	localcamera.SetPos(-4.f * curCamera.GetViewframe().m_fwd);
	localcamera.Compute();
	mat4 proj = Compute3DProj(30.f, w/h, 0.1, 5);
	mat4 mvp = proj * localcamera.GetView();

	glUseProgram(g_normalViewShader->m_program);
	glUniformMatrix4fv(mvpLoc, 1, 0, mvp.m);
	glUniform1f(stippleLoc, 0);

	glBegin(GL_LINES);
	// axes
	glVertexAttrib3f(colorLoc, 1, 0, 0);
	glVertexAttrib1f(coordLoc, 0); glVertexAttrib3f(posLoc, 0, 0, 0);
	glVertexAttrib1f(coordLoc, 1); glVertexAttrib3f(posLoc, 1, 0, 0);
	
	glVertexAttrib3f(colorLoc, 0.2, 0, 0);
	glVertexAttrib1f(coordLoc, 0); glVertexAttrib3f(posLoc, 0, 0, 0);
	glVertexAttrib1f(coordLoc, 1); glVertexAttrib3f(posLoc, -1, 0, 0);
	
	glVertexAttrib3f(colorLoc, 0, 1, 0);
	glVertexAttrib1f(coordLoc, 0); glVertexAttrib3f(posLoc, 0, 0, 0);
	glVertexAttrib1f(coordLoc, 1); glVertexAttrib3f(posLoc, 0, 1, 0);
	
	glVertexAttrib3f(colorLoc, 0, 0.2, 0);
	glVertexAttrib1f(coordLoc, 0); glVertexAttrib3f(posLoc, 0, 0, 0);
	glVertexAttrib1f(coordLoc, 1); glVertexAttrib3f(posLoc, 0, -1, 0);
	
	glVertexAttrib3f(colorLoc, 0, 0, 1);
	glVertexAttrib1f(coordLoc, 0); glVertexAttrib3f(posLoc, 0, 0, 0);
	glVertexAttrib1f(coordLoc, 1); glVertexAttrib3f(posLoc, 0, 0, 1);
	
	glVertexAttrib3f(colorLoc, 0, 0, 0.2);
	glVertexAttrib1f(coordLoc, 0); glVertexAttrib3f(posLoc, 0, 0, 0);
	glVertexAttrib1f(coordLoc, 1); glVertexAttrib3f(posLoc, 0, 0, -1);

	// vector
	glVertexAttrib3f(colorLoc, 0.7, 0.7, 0.7);
	glVertexAttrib3f(posLoc, 0, 0, 0);
	glVertexAttrib3fv(posLoc, &normal.x);
	glEnd();

	// helper lines
	static Color kColNeg = {0.2,0.2,0.2}, kColPos = {0.4,0.4,0.4};

	glUniform1f(stippleLoc, 0.1f);
	glBegin(GL_LINES);
	glVertexAttrib3fv(colorLoc, normal.x > 0 ? &kColPos.r : &kColNeg.r); 
	glVertexAttrib1f(coordLoc, 0); glVertexAttrib3f(posLoc, 0, normal.y, 0);
	glVertexAttrib1f(coordLoc, normal.x); glVertexAttrib3f(posLoc, normal.x, normal.y, 0);

	glVertexAttrib3fv(colorLoc, normal.y > 0 ? &kColPos.r : &kColNeg.r); 
	glVertexAttrib1f(coordLoc, 0); glVertexAttrib3f(posLoc, normal.x, 0, 0);
	glVertexAttrib1f(coordLoc, normal.y); glVertexAttrib3f(posLoc, normal.x, normal.y, 0);
	
	glVertexAttrib3fv(colorLoc, normal.z > 0 ? &kColPos.r : &kColNeg.r); 
	glVertexAttrib1f(coordLoc, 0); glVertexAttrib3f(posLoc, normal.x, normal.y, 0);
	glVertexAttrib1f(coordLoc, normal.z); glVertexAttrib3fv(posLoc, &normal.x);
	
	glEnd();

	glLineWidth(1.f);
	checkGlError("menu_DrawNormalVecView");
}