PANGOLIN写字

效果:在这里插入图片描述

代码:

#include <iostream>
#include <pangolin/pangolin.h>

// pangolin 绘制文字demo

using namespace std;

int main() {

    //创建一个窗口
    pangolin::CreateWindowAndBind("PangolinShowText", 640, 480);

    // 定义字体
    pangolin::GlFont * text_font = new pangolin::GlFont("./DejaVuSans.ttf", 25.0);

    glEnable(GL_DEPTH_TEST);
    glEnable(GL_BLEND);
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

    pangolin::OpenGlRenderState s_cam(
            pangolin::ProjectionMatrix(640, 480, 420, 420, 320, 320, 0.2, 100),
            pangolin::ModelViewLookAt(-2, 2, -2, 0, 0, 0, pangolin::AxisY)
    );

    pangolin::Handler3D handler(s_cam);
    pangolin::View & d_cam = pangolin::CreateDisplay()
            .SetBounds(0.0, 1.0, 0.0, 1.0)
            .SetHandler(&handler);

    string text = "Hello,Pangolin!";

    while( ! pangolin::ShouldQuit()){
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
        d_cam.Activate(s_cam);

        
        // 在对应位置画字体
        glColor3f(1.0,0.0,0.0);
        text_font->Text(text.c_str()).Draw(3, 1, 1);

        // ---
        auto gltext_label_global_ = text_font->Text(text);

        auto cur_width = d_cam.v.w;
        auto cur_height = d_cam.v.h;

        GLint view[4];
        glGetIntegerv(GL_VIEWPORT, view);

        glMatrixMode(GL_PROJECTION);
        glPushMatrix();
        glLoadIdentity();
        glOrtho(0, cur_width, 0, cur_height, -1, 1);

        glMatrixMode(GL_MODELVIEW);
        glPushMatrix();
        glLoadIdentity();

        glTranslatef(5, gltext_label_global_.Height(), 1.);//
        glColor3ub(127, 127, 127);
        gltext_label_global_.Draw();

        // Restore modelview / project matrices
        glMatrixMode(GL_PROJECTION);
        glPopMatrix();
        glMatrixMode(GL_MODELVIEW);
        glPopMatrix();
        // ---
        
        pangolin::glDrawColouredCube();

        pangolin::FinishFrame();
    }

    return 0;
}

参考

博客
高博开源代码

### 关于 Pangolin 的 PyInterpreter 可见性声明不一致的解决方案 在使用 CMake 构建项目并涉及 `pybind11` 或其他跨语言绑定库时,可能会遇到 `-Wattributes` 编译器警告或错误。这种问题通常与类或函数的可见性属性定义不一致有关。 #### 背景分析 当构建 Python 绑定模块(如 `pypangolin`)时,C++ 类和方法需要被导出到 Python 中。为了优化动态链接性能以及减少符号表大小,开发者常会通过设置 `visibility` 属性来控制哪些符号会被暴露给外部程序。然而,在某些情况下,如果目标平台上的编译器选项未正确配置,则可能导致可见性冲突警告或错误。 具体来说,“guard visibility warning” 是指编译器检测到某个特定实体(例如类 `pangolin::PyInterpreter`)在其源码实现中的可见性标记与其实际使用的上下文之间存在差异。这可能是由于以下原因引起的: - 不同部分代码采用了不同的默认可见性策略; - 额外添加了显式的 `__attribute__((visibility))` 宏却未能统一应用至整个工程范围; - 第三方依赖项(比如 Eigen 库)可能也引入了自己的可见性管理机制从而干扰本地设定。 针对上述情况可以采取如下措施加以修正: #### 解决方案一:调整全局可见性宏定义 确保在整个项目的顶层 CMakeLists 文件里设置了恰当的可见性标志。对于 GCC 和 Clang 用户而言, 添加下面这段指令可以帮助消除此类告警信息: ```cmake add_definitions(-fvisibility=hidden) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -pedantic-errors") ``` 接着确认所有打算公开接口的对象都明确标注为 visible 。以 pybind11 为例 , 使用 PYBIND11_MODULE 创建扩展模块的时候,默认已经处理好了大部分必要的修饰工作;但是如果你手动编了一些额外辅助功能的话 ,则需自行加上相应的标签 : ```cpp #include <pybind11/pybind11.h> // Explicitly mark the class as exported. class PANGOLIN_API MyExportedClass {}; PYBIND11_MODULE(example_module_name, m) { m.doc() = "Example module"; // optional module docstring pybind11::class_<MyExportedClass>(m, "MyExportedClass"); } ``` 这里假设我们自定义了一个名为 `PANGOLIN_API` 的宏用于切换不同操作系统下的 dllimport/dllexport 特性[^4]。 #### 解决方案二:屏蔽个别文件级别的警告消息 假如无法修改第三方库内部的具体实现细节或者暂时不想深入研究根本成因,那么可以直接关闭该类别下产生的提示信息作为临时应对办法之一: ```cmake target_compile_options(pypangolin PRIVATE "-Wno-attributes") ``` 此操作仅影响指定的目标对象而不波及其他无关组件,因此相对较为安全可靠[^5]。 另外值得注意的是,虽然当前讨论的重点是如何规避掉这些烦人的 build log 输出内容,但从长远来看还是建议尽可能找出真正触发这些问题的根本所在,并从根本上予以修复,这样才能保证最终产物具备更好的可移植性和稳定性表现。 ```python # Example of using pybind11 to expose a simple function without triggering warnings def add(a: int, b: int) -> int: return a + b example_module.def("add", &add); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值