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)); }
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"); }