本文整理汇总了C++中QOpenGLFunctions_2_1::glEnable方法的典型用法代码示例。如果您正苦于以下问题:C++ QOpenGLFunctions_2_1::glEnable方法的具体用法?C++ QOpenGLFunctions_2_1::glEnable怎么用?C++ QOpenGLFunctions_2_1::glEnable使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类QOpenGLFunctions_2_1
的用法示例。
在下文中一共展示了QOpenGLFunctions_2_1::glEnable方法的8个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1:
void ccGLUtils::DisplayTexture2DPosition(GLuint texID, int x, int y, int w, int h, unsigned char alpha/*=255*/)
{
QOpenGLContext* context = QOpenGLContext::currentContext();
if (!context)
{
assert(false);
return;
}
QOpenGLFunctions_2_1* glFunc = context->versionFunctions<QOpenGLFunctions_2_1>();
if (glFunc)
{
glFunc->glBindTexture(GL_TEXTURE_2D, texID);
glFunc->glPushAttrib(GL_ENABLE_BIT);
glFunc->glEnable(GL_TEXTURE_2D);
glFunc->glColor4ub(255, 255, 255, alpha);
glFunc->glBegin(GL_QUADS);
glFunc->glTexCoord2f(0.0, 1.0);
glFunc->glVertex2i(x, y + h);
glFunc->glTexCoord2f(0.0, 0.0);
glFunc->glVertex2i(x, y);
glFunc->glTexCoord2f(1.0, 0.0);
glFunc->glVertex2i(x + w, y);
glFunc->glTexCoord2f(1.0, 1.0);
glFunc->glVertex2i(x + w, y + h);
glFunc->glEnd();
glFunc->glBindTexture(GL_TEXTURE_2D, 0);
glFunc->glPopAttrib();
glFunc->glBindTexture(GL_TEXTURE_2D, 0);
}
}
示例2: drawStratPos
void ccSample::drawStratPos(CC_DRAW_CONTEXT& context)
{
if (MACRO_Draw3D(context)) {
QOpenGLFunctions_2_1* glFunc = context.glFunctions<QOpenGLFunctions_2_1>();
assert(glFunc != nullptr);
QFont font(context.display->getTextDisplayFont()); // takes rendering zoom into
// account!
font.setPointSize(font.pointSize());
font.setBold(true);
// // draw their name
// glPushAttrib(GL_DEPTH_BUFFER_BIT);
glFunc->glDisable(GL_DEPTH_TEST);
QString name = QString::number(getSample()->getStratigraphicPosition(), 'g', 3);
context.display->display3DLabel(name,
CCVector3(getSample()->getPosition().data()),
ccColor::red.rgb, font);
// CCVector3 p (x,y,z);
// QString title = (getName());
// context.display->display3DLabel( title,
// p + CCVector3(
// context.pickedPointsTextShift,
// context.pickedPointsTextShift,
// context.pickedPointsTextShift),
// ccColor::magenta,
// font );
// glPopAttrib();
glFunc->glEnable(GL_DEPTH_TEST);
}
}
示例3: draw
//override draw function
void ccMouseCircle::draw(CC_DRAW_CONTEXT& context)
{
//only draw when visible
if (!ccMouseCircle::isVisible())
return;
//only draw in 2D foreground mode
if (!MACRO_Foreground(context) || !MACRO_Draw2D(context))
return;
//get the set of OpenGL functions (version 2.1)
QOpenGLFunctions_2_1 *glFunc = context.glFunctions<QOpenGLFunctions_2_1>();
assert(glFunc != nullptr);
if (glFunc == nullptr)
return;
//test viewport parameters
const ccViewportParameters& params = context.display->getViewportParameters();
glFunc->glPushAttrib(GL_LINE_BIT);
float relativeZoom = 1.0f;
float dx = 0.0f;
float dy = 0.0f;
if (!m_params.perspectiveView) //ortho mode
{
//Screen pan & pivot compensation
float totalZoom = m_params.zoom / m_params.pixelSize;
m_winTotalZoom = params.zoom / params.pixelSize;
relativeZoom = m_winTotalZoom / totalZoom;
CCVector3d dC = m_params.cameraCenter - params.cameraCenter;
CCVector3d P = m_params.pivotPoint - params.pivotPoint;
m_params.viewMat.apply(P);
static_cast<float>(dC.x + P.x);
static_cast<float>(dC.y + P.y);
dx *= m_winTotalZoom;
dy *= m_winTotalZoom;
}
//thick dotted line
glFunc->glLineWidth(2);
glFunc->glLineStipple(1, 0xAAAA);
glFunc->glEnable(GL_LINE_STIPPLE);
const unsigned char* defaultColor = m_selected ? ccColor::red.rgba : context.textDefaultCol.rgb;
glFunc->glColor3ubv(ccColor::red.rgba);
//get height & width
int halfW = static_cast<int>(context.glW / 2.0f);
int halfH = static_cast<int>(context.glH / 2.0f);
//get mouse position
QPoint p = m_owner->asWidget()->mapFromGlobal(QCursor::pos());
int mx = p.x(); //mouse x-coord
int my = 2*halfH - p.y(); //mouse y-coord in OpenGL coordinates (origin at bottom left, not top left)
//calculate circle location
int cx = dx+mx-halfW;
int cy = dy+my-halfH;
//draw circle
glFunc->glBegin(GL_LINE_LOOP);
for (int n = 0; n < ccMouseCircle::RESOLUTION; n++)
{
glFunc->glVertex2f(ccMouseCircle::UNIT_CIRCLE[n][0] * ccMouseCircle::RADIUS + cx, ccMouseCircle::UNIT_CIRCLE[n][1] * ccMouseCircle::RADIUS + cy);
}
glFunc->glEnd();
glFunc->glPopAttrib();
}
示例4: DrawColorRamp
//.........这里部分代码省略.........
//linear interpolation
double alpha = bind-static_cast<double>(bin);
hVal = (1.0-alpha) * hVal + alpha * histogram[bin+1];
}
}
int xSpan = std::max(static_cast<int>(hVal / histogram.maxValue * (scaleWidth/2)),1);
glFunc->glVertex2i(histoStart,y+j);
glFunc->glVertex2i(histoStart+xSpan,y+j);
}
}
glFunc->glEnd();
}
else
{
//if there's a unique (visible) scalar value, we only draw a square!
double value = sortedKeyValues.front();
if (logScale)
value = exp(value*c_log10);
const ColorCompType* col = sf->getColor(static_cast<ScalarType>(value));
glFunc->glColor3ubv(col ? col : ccColor::lightGrey.rgba);
glFunc->glBegin(GL_POLYGON);
glFunc->glVertex2i(x,y);
glFunc->glVertex2i(x+scaleWidth,y);
glFunc->glVertex2i(x+scaleWidth,y+scaleMaxHeight-1);
glFunc->glVertex2i(x,y+scaleMaxHeight-1);
glFunc->glEnd();
}
//scale border
const ccColor::Rgbub& lineColor = textColor;
glFunc->glColor3ubv(lineColor.rgb);
glFunc->glLineWidth(2.0f * renderZoom);
glFunc->glEnable(GL_LINE_SMOOTH);
glFunc->glBegin(GL_LINE_LOOP);
glFunc->glVertex2i(x,y);
glFunc->glVertex2i(x+scaleWidth,y);
glFunc->glVertex2i(x+scaleWidth,y+scaleMaxHeight);
glFunc->glVertex2i(x,y+scaleMaxHeight);
glFunc->glEnd();
glFunc->glPopAttrib();
}
//display labels
{
//list of labels to draw
vlabelSet drawnLabels;
//add first label
drawnLabels.push_back(vlabel(0, 0, strHeight, sortedKeyValues.front()));
if (keyValues.size() > 1)
{
//add last label
drawnLabels.push_back(vlabel(scaleMaxHeight, scaleMaxHeight - strHeight, scaleMaxHeight, sortedKeyValues.back()));
}
//we try to display the other keyPoints (if any)
if (keyValues.size() > 2)
{
assert(maxRange > 0.0);
const int minGap = strHeight;
for (size_t i=1; i<keyValues.size()-1; ++i)
{
int yScale = static_cast<int>((sortedKeyValues[i]-sortedKeyValues[0]) * scaleMaxHeight / maxRange);
示例5: tab
//.........这里部分代码省略.........
//m_closeButtonROI.left() = m_closeButtonROI.right()-buttonSize;
//m_closeButtonROI.bottom() = margin;
//m_closeButtonROI.top() = m_closeButtonROI.bottom()+buttonSize;
//automatically elide the title
//title = titleFontMetrics.elidedText(title,Qt::ElideRight,m_closeButtonROI[0]-2*margin);
}
int halfW = (context.glW >> 1);
int halfH = (context.glH >> 1);
//draw label rectangle
int xStart = static_cast<int>(context.glW * m_screenPos[0]);
int yStart = static_cast<int>(context.glH * (1.0f - m_screenPos[1]));
m_lastScreenPos[0] = xStart;
m_lastScreenPos[1] = yStart - m_labelROI.height();
//colors
bool highlighted = (!pushName && isSelected());
//default background color
unsigned char alpha = static_cast<unsigned char>((context.labelOpacity/100.0) * 255);
ccColor::Rgbaub defaultBkgColor(context.labelDefaultBkgCol,alpha);
//default border color (mustn't be totally transparent!)
ccColor::Rgbaub defaultBorderColor(ccColor::red);
if (!highlighted)
{
//apply only half of the transparency
unsigned char halfAlpha = static_cast<unsigned char>((50.0 + context.labelOpacity/200.0) * 255);
defaultBorderColor = ccColor::Rgbaub(context.labelDefaultBkgCol,halfAlpha);
}
glFunc->glPushAttrib(GL_COLOR_BUFFER_BIT);
glFunc->glEnable(GL_BLEND);
glFunc->glMatrixMode(GL_MODELVIEW);
glFunc->glPushMatrix();
glFunc->glTranslatef(static_cast<GLfloat>(-halfW + xStart), static_cast<GLfloat>(-halfH + yStart), 0);
if (!pushName)
{
//compute arrow base position relatively to the label rectangle (for 0 to 8)
int arrowBaseConfig = 0;
int iArrowDestX = static_cast<int>(arrowDestX)-xStart;
int iArrowDestY = static_cast<int>(arrowDestY)-yStart;
{
if (iArrowDestX < m_labelROI.left()) //left
arrowBaseConfig += 0;
else if (iArrowDestX > m_labelROI.right()) //Right
arrowBaseConfig += 2;
else //Middle
arrowBaseConfig += 1;
if (iArrowDestY > -m_labelROI.top()) //Top
arrowBaseConfig += 0;
else if (iArrowDestY < -m_labelROI.bottom()) //Bottom
arrowBaseConfig += 6;
else //Middle
arrowBaseConfig += 3;
}
//we make the arrow base start from the nearest corner
if (arrowBaseConfig != 4) //4 = label above point!
{
glFunc->glColor4ubv(defaultBorderColor.rgba);
glFunc->glBegin(GL_TRIANGLE_FAN);
示例6: font
void cc2DLabel::drawMeOnly3D(CC_DRAW_CONTEXT& context)
{
assert(!m_points.empty());
//get the set of OpenGL functions (version 2.1)
QOpenGLFunctions_2_1 *glFunc = context.glFunctions<QOpenGLFunctions_2_1>();
assert( glFunc != nullptr );
if ( glFunc == nullptr )
return;
//standard case: list names pushing
bool pushName = MACRO_DrawEntityNames(context);
if (pushName)
{
//not particularily fast
if (MACRO_DrawFastNamesOnly(context))
return;
glFunc->glPushName(getUniqueIDForDisplay());
}
const float c_sizeFactor = 4.0f;
bool loop = false;
size_t count = m_points.size();
switch (count)
{
case 3:
{
glFunc->glPushAttrib(GL_COLOR_BUFFER_BIT);
glFunc->glEnable(GL_BLEND);
//we draw the triangle
glFunc->glColor4ub(255,255,0,128);
glFunc->glBegin(GL_TRIANGLES);
ccGL::Vertex3v(glFunc, m_points[0].cloud->getPoint(m_points[0].index)->u);
ccGL::Vertex3v(glFunc, m_points[1].cloud->getPoint(m_points[1].index)->u);
ccGL::Vertex3v(glFunc, m_points[2].cloud->getPoint(m_points[2].index)->u);
glFunc->glEnd();
glFunc->glPopAttrib();
loop = true;
}
case 2:
{
//segment width
glFunc->glPushAttrib(GL_LINE_BIT);
glFunc->glLineWidth(c_sizeFactor * context.renderZoom);
//we draw the segments
if (isSelected())
ccGL::Color3v(glFunc, ccColor::red.rgba);
else
ccGL::Color3v(glFunc, ccColor::green.rgba);
glFunc->glBegin(GL_LINES);
for (unsigned i=0; i<count; i++)
{
if (i+1<count || loop)
{
ccGL::Vertex3v(glFunc, m_points[i].cloud->getPoint(m_points[i].index)->u);
ccGL::Vertex3v(glFunc, m_points[(i+1)%count].cloud->getPoint(m_points[(i+1)%count].index)->u);
}
}
glFunc->glEnd();
glFunc->glPopAttrib();
}
case 1:
{
//display point marker as spheres
{
if (!c_unitPointMarker)
{
c_unitPointMarker = QSharedPointer<ccSphere>(new ccSphere(1.0f, 0, "PointMarker", 12));
c_unitPointMarker->showColors(true);
c_unitPointMarker->setVisible(true);
c_unitPointMarker->setEnabled(true);
}
//build-up point maker own 'context'
CC_DRAW_CONTEXT markerContext = context;
markerContext.drawingFlags &= (~CC_DRAW_ENTITY_NAMES); //we must remove the 'push name flag' so that the sphere doesn't push its own!
markerContext.display = 0;
if (isSelected() && !pushName)
c_unitPointMarker->setTempColor(ccColor::red);
else
c_unitPointMarker->setTempColor(context.labelDefaultMarkerCol);
const ccViewportParameters& viewPortParams = context.display->getViewportParameters();
ccGLCameraParameters camera;
context.display->getGLCameraParameters(camera);
for (unsigned i = 0; i<count; i++)
{
glFunc->glMatrixMode(GL_MODELVIEW);
glFunc->glPushMatrix();
const CCVector3* P = m_points[i].cloud->getPoint(m_points[i].index);
ccGL::Translate(glFunc, P->x, P->y, P->z);
//.........这里部分代码省略.........
示例7: drawMeOnly
void ccSNECloud::drawMeOnly(CC_DRAW_CONTEXT& context)
{
if (!MACRO_Foreground(context)) //2D foreground only
return; //do nothing
//draw point cloud
ccPointCloud::drawMeOnly(context);
//draw normal vectors
if (MACRO_Draw3D(context))
{
if (size() == 0) //no points -> bail!
return;
//get the set of OpenGL functions (version 2.1)
QOpenGLFunctions_2_1 *glFunc = context.glFunctions<QOpenGLFunctions_2_1>();
if (glFunc == nullptr) {
assert(false);
return;
}
//glDrawParams glParams;
//getDrawingParameters(glParams);
//get camera info
ccGLCameraParameters camera;
glFunc->glGetIntegerv(GL_VIEWPORT, camera.viewport);
glFunc->glGetDoublev(GL_PROJECTION_MATRIX, camera.projectionMat.data());
glFunc->glGetDoublev(GL_MODELVIEW_MATRIX, camera.modelViewMat.data());
const ccViewportParameters& viewportParams = context.display->getViewportParameters();
//get point size for drawing
float pSize;
glFunc->glGetFloatv(GL_POINT_SIZE, &pSize);
//draw normal vectors if highlighted
//if ((m_isHighlighted | m_isAlternate | m_isActive))
//{
//setup
if (pSize != 0)
{
glFunc->glPushAttrib(GL_LINE_BIT);
glFunc->glLineWidth(static_cast<GLfloat>(pSize));
}
glFunc->glMatrixMode(GL_MODELVIEW);
glFunc->glPushMatrix();
glFunc->glEnable(GL_BLEND);
//get normal vector properties
int thickID = getScalarFieldIndexByName("Thickness");
//int weightID = getScalarFieldIndexByName("Weight");
//float weight;
//float maxWeight = getScalarField( weightID )->getMax();
//draw normals
glFunc->glBegin(GL_LINES);
for (unsigned p = 0; p < size(); p++)
{
//get weight
//weight = getScalarField(weightID)->getValue(p);
//weight /= maxWeight;
//push colour
const ccColor::Rgb* col = m_currentDisplayedScalarField->getColor(m_currentDisplayedScalarField->getValue(p));
const ccColor::Rgba col4(col->r, col->g, col->b,200);
glFunc->glColor4ubv(col4.rgba);
//get length from thickness (if defined)
float length = 1.0;
if (thickID != -1)
{
length = getScalarField(thickID)->getValue(p);
}
//calculate start and end points of normal vector
const CCVector3 start = *getPoint(p);
CCVector3 end = start + (getPointNormal(p)*length);
//push line to opengl
ccGL::Vertex3v(glFunc, start.u);
ccGL::Vertex3v(glFunc, end.u);
}
glFunc->glEnd();
//cleanup
if (pSize != 0) {
glFunc->glPopAttrib();
}
glFunc->glPopMatrix();
}
}
示例8: title
void cc2DViewportLabel::drawMeOnly(CC_DRAW_CONTEXT& context)
{
//2D foreground only
if (!MACRO_Foreground(context) || !MACRO_Draw2D(context))
return;
//get the set of OpenGL functions (version 2.1)
QOpenGLFunctions_2_1 *glFunc = context.glFunctions<QOpenGLFunctions_2_1>();
assert( glFunc != nullptr );
if ( glFunc == nullptr )
return;
//test viewport parameters
const ccViewportParameters& params = context.display->getViewportParameters();
//general parameters
if ( params.perspectiveView != m_params.perspectiveView
|| params.objectCenteredView != m_params.objectCenteredView
|| params.pixelSize != m_params.pixelSize)
{
return;
}
//test base view matrix
for (unsigned i = 0; i < 12; ++i)
if (fabs(params.viewMat.data()[i] - m_params.viewMat.data()[i]) > ZERO_TOLERANCE)
return;
if (m_params.perspectiveView)
{
if (params.fov != m_params.fov || params.perspectiveAspectRatio != m_params.perspectiveAspectRatio)
return;
if ((params.pivotPoint - m_params.pivotPoint).norm() > ZERO_TOLERANCE
|| (params.cameraCenter - m_params.cameraCenter).norm() > ZERO_TOLERANCE)
return;
}
else
{
if (params.orthoAspectRatio != m_params.orthoAspectRatio)
return;
}
glFunc->glPushAttrib(GL_LINE_BIT);
float relativeZoom = 1.0f;
float dx = 0, dy = 0;
if (!m_params.perspectiveView) //ortho mode
{
//Screen pan & pivot compensation
float totalZoom = m_params.zoom / m_params.pixelSize;
float winTotalZoom = params.zoom / params.pixelSize;
relativeZoom = winTotalZoom / totalZoom;
CCVector3d dC = m_params.cameraCenter - params.cameraCenter;
CCVector3d P = m_params.pivotPoint - params.pivotPoint;
m_params.viewMat.apply(P);
dx = static_cast<float>(dC.x + P.x);
dy = static_cast<float>(dC.y + P.y);
dx *= winTotalZoom;
dy *= winTotalZoom;
}
//thick dotted line
glFunc->glLineWidth(2);
glFunc->glLineStipple(1, 0xAAAA);
glFunc->glEnable(GL_LINE_STIPPLE);
const unsigned char* defaultColor = m_selected ? ccColor::red.rgba : context.textDefaultCol.rgb;
glFunc->glColor3ubv(defaultColor);
glFunc->glBegin(GL_LINE_LOOP);
glFunc->glVertex2f(dx + m_roi[0] * relativeZoom, dy + m_roi[1] * relativeZoom);
glFunc->glVertex2f(dx + m_roi[2] * relativeZoom, dy + m_roi[1] * relativeZoom);
glFunc->glVertex2f(dx + m_roi[2] * relativeZoom, dy + m_roi[3] * relativeZoom);
glFunc->glVertex2f(dx + m_roi[0] * relativeZoom, dy + m_roi[3] * relativeZoom);
glFunc->glEnd();
glFunc->glPopAttrib();
//title
QString title(getName());
if (!title.isEmpty())
{
QFont titleFont(context.display->getTextDisplayFont()); //takes rendering zoom into account!
titleFont.setBold(true);
QFontMetrics titleFontMetrics(titleFont);
int titleHeight = titleFontMetrics.height();
int xStart = (int)(dx + 0.5f*(float)context.glW + std::min<float>(m_roi[0], m_roi[2])*relativeZoom);
int yStart = (int)(dy + 0.5f*(float)context.glH + std::min<float>(m_roi[1], m_roi[3])*relativeZoom);
context.display->displayText(title, xStart, yStart - 5 - titleHeight, ccGenericGLDisplay::ALIGN_DEFAULT, 0, defaultColor, &titleFont);
}
}