Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用GLStipple时,OGLFT绘制文本_C++_Opengl_Graphics_2d - Fatal编程技术网

C++ 使用GLStipple时,OGLFT绘制文本

C++ 使用GLStipple时,OGLFT绘制文本,c++,opengl,graphics,2d,C++,Opengl,Graphics,2d,我有一个有趣的bug,它已经困扰了我好几天了 我目前正在使用OpenGL在屏幕上绘制文本。我正在利用OGLFT库来辅助绘图。这个库实际上使用freetype2库。实际上,我并没有对文本做任何特殊的处理。我只寻找单色文本 无论如何,在实现了这个库之后,我注意到只有在启用了glStipple的情况下才能正确绘制文本。我相信OGLFT库和我正在启用的内容之间存在一些干扰问题 我想知道是否有人有使用OGLFT库的经验。我正在发布我的代码的一个极简示例,以演示正在发生的事情: (请注意,有一些变量用于设置

我有一个有趣的bug,它已经困扰了我好几天了

我目前正在使用OpenGL在屏幕上绘制文本。我正在利用OGLFT库来辅助绘图。这个库实际上使用freetype2库。实际上,我并没有对文本做任何特殊的处理。我只寻找单色文本

无论如何,在实现了这个库之后,我注意到只有在启用了glStipple的情况下才能正确绘制文本。我相信OGLFT库和我正在启用的内容之间存在一些干扰问题

我想知道是否有人有使用OGLFT库的经验。我正在发布我的代码的一个极简示例,以演示正在发生的事情:

(请注意,有一些变量用于设置glCanvas的缩放因子和相机的位置,这仅适用于2D)

double\u zoomX=1.0;
双倍缩放=1.0;
双摄像机=0;
双摄像机=0;
/*每次需要绘制例程时,都会调用此函数*/
void modelnefinition::onPaintCanvas(wxpainevent和event)
{
wxGLCanvas::SetCurrent(*_geometryContext);//这将确保openGL命令路由到wxGLCanvas对象
wxPaintDC dc(this);//这是绘图所必需的
glMatrixMode(GLU模型视图);
glClear(GLU颜色缓冲位);
updateproject();
OGLFT::monology*testface=新的OGLFT::monology(“/usr/share/fonts/truetype/dejavu/DejaVuSansMono.ttf”,8);
测试面->绘制(0,0,“测试”);
glEnable(GL_LINE_STIPPLE);//当我注释掉这一行时,无法绘制文本
glLineStipple(1,0B00011000011000110);
glBegin(GL_行);
glVertex2d(_startPoint.x,_startPoint.y);
glVertex2d(_endPoint.x,_endPoint.y);
格伦德();
glDisable(GLU线\点画);
SwapBuffers();
}
void modelDefinition::updateproject()
{
//首先,加载投影矩阵并将视图重置为默认视图
glMatrixMode(GL_投影);
glLoadIdentity();
格洛托(--uZoomx,uZoomx,--uZoomy,uZoomy,-1.0,1.0);
//重置为模型视图矩阵
glMatrixMode(GLU模型视图);
glLoadIdentity();
glViewport(0,0,(双精度)this->GetSize().GetWidth(),(双精度)this->GetSize().GetHeight();
/*本节将处理平移(平移)和缩放(缩放)。
*每次绘制时都需要调用,以便更新所有零部件的放置*/
如果(_zoomX<1e-9 | | | u zoomY<1e-9)
{
_zoomX=1e-9;
_zoomY=\u zoomX;
}
如果(_zoomX>1e6 | | | u zoomY>1e6)
{
_zoomX=1e6;
_zoomY=\u zoomX;
}
GLTRANSTED(-U cameraX,-U cameraY,0.0);
}

还有一点需要注意,
glEnable(GL\u LINE\u点画)下面的代码是必需的。就好像需要正确绘制gls点画才能正确显示文本。

仔细查看您的代码,我相信您的意图是将其呈现为灰度?如果是这样,那么您可以简单地使用
OGLFT::Grayscale*testface=new OGLFT::Grayscale(“/usr/share/fonts/truetype/dejavu/DejaVuSansMono.ttf”,8)


这将得到您所需要的,而不必担心您发布的问题。事实上,我也建议这样做。

是的!就这样,现在一切都正常了。非常感谢你!
double _zoomX = 1.0;

double _zoomY = 1.0;

double _cameraX = 0;

double _cameraY = 0;



/* This function gets called everytime a draw routine is needed */
void modelDefinition::onPaintCanvas(wxPaintEvent &event)
{
    wxGLCanvas::SetCurrent(*_geometryContext);// This will make sure the the openGL commands are routed to the wxGLCanvas object
    wxPaintDC dc(this);// This is required for drawing

        glMatrixMode(GL_MODELVIEW);
        glClear(GL_COLOR_BUFFER_BIT);

        updateProjection();

    OGLFT::Monochrome *testface = new OGLFT::Monochrome( "/usr/share/fonts/truetype/dejavu/DejaVuSansMono.ttf", 8);
        testface->draw(0, 0, "test");
        glEnable(GL_LINE_STIPPLE);// WHen I comment out this line, the text is unable to be drawn

        glLineStipple(1, 0b0001100011000110);
        glBegin(GL_LINES);
            glVertex2d(_startPoint.x, _startPoint.y);
            glVertex2d(_endPoint.x, _endPoint.y);
        glEnd();
        glDisable(GL_LINE_STIPPLE);

    SwapBuffers();
}

void modelDefinition::updateProjection()
{
        // First, load the projection matrix and reset the view to a default view
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();

    glOrtho(-_zoomX, _zoomX, -_zoomY, _zoomY, -1.0, 1.0);

    //Reset to modelview matrix
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();

    glViewport(0, 0, (double)this->GetSize().GetWidth(), (double)this->GetSize().GetHeight());
    /* This section will handle the translation (panning) and scaled (zooming). 
     * Needs to be called each time a draw occurs in order to update the placement of all the components */
    if(_zoomX < 1e-9 || _zoomY < 1e-9)
    {
        _zoomX = 1e-9;
        _zoomY = _zoomX;
    }

    if(_zoomX > 1e6 || _zoomY > 1e6)
    {
        _zoomX = 1e6;
        _zoomY = _zoomX;
    }

    glTranslated(-_cameraX, -_cameraY, 0.0);
}