本文整理汇总了C++中TransformState::setOrthoProjection方法的典型用法代码示例。如果您正苦于以下问题:C++ TransformState::setOrthoProjection方法的具体用法?C++ TransformState::setOrthoProjection怎么用?C++ TransformState::setOrthoProjection使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类TransformState
的用法示例。
在下文中一共展示了TransformState::setOrthoProjection方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: height
/// Draw the 3D cursor
void View3D::drawCursor(const TransformState& transStateIn, const V3d& cursorPos, float centerPointRadius) const
{
V3d offset = transStateIn.cameraPos();
TransformState transState = transStateIn.translate(offset);
V3d relCursor = cursorPos - offset;
// Cull if behind camera
if((relCursor * transState.modelViewMatrix).z > 0)
return;
// Find position of cursor in screen space
V3d screenP3 = relCursor * transState.modelViewMatrix * transState.projMatrix;
// Position in ortho coord system
V2f p2 = 0.5f * V2f(width(), height()) * (V2f(screenP3.x, screenP3.y) + V2f(1.0f));
// Draw cursor
if (m_cursorShader->isValid())
{
QGLShaderProgram& cursorShader = m_cursorShader->shaderProgram();
// shader
cursorShader.bind();
// vertex array
glBindVertexArray(m_cursorVertexArray);
transState.projMatrix.makeIdentity();
transState.setOrthoProjection(0, width(), 0, height(), 0, 1);
transState.modelViewMatrix.makeIdentity();
if (centerPointRadius > 0)
{
// fake drawing of white point through scaling ...
//
TransformState pointState = transState.translate( V3d(p2.x, p2.y, 0) );
pointState = pointState.scale( V3d(0.0,0.0,0.0) );
glLineWidth(centerPointRadius);
cursorShader.setUniformValue("color", 1.0f, 1.0f, 1.0f, 1.0f);
pointState.setUniforms(cursorShader.programId());
glDrawArrays( GL_POINTS, 0, 1 );
}
// Now draw a 2D overlay over the 3D scene to allow user to pinpoint the
// cursor, even when when it's behind something.
glDisable(GL_DEPTH_TEST);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_LINE_SMOOTH);
glLineWidth(1); // this won't work anymore for values larger than 1 (2.0f);
// draw white lines
transState = transState.translate( V3d(p2.x, p2.y, 0) );
cursorShader.setUniformValue("color", 1.0f, 1.0f, 1.0f, 1.0f);
transState.setUniforms(cursorShader.programId());
glDrawArrays( GL_LINES, 0, 8 );
// draw black lines
transState = transState.rotate( V4d(0,0,1,0.785398) ); //45 deg
cursorShader.setUniformValue("color", 0.0f, 0.0f, 0.0f, 1.0f);
transState.setUniforms(cursorShader.programId());
glDrawArrays( GL_LINES, 0, 8 );
}
}