<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      NanoGUI使用

      為什么用

      NanoGUI是一個支持OpenGL繪制的gui 庫,也提供python的綁定(由pybind11實現)

      • 優點

        • 支持Mac、Windows和Linux,能夠在windows平臺上提供OpenGL3.x支持。
        • 體積小
        • 支持高清屏
        • 使用lambda回調函數,邏輯清晰
      • 缺點

        • 維護不及時
        • 功能少
        • 缺少移動版本

      總體來說,對于一般應用已經足夠。

      編譯

      從github下載:

      1. git clone --recursive https://github.com/wjakob/nanogui.git

      Mac/Linux上使用CMake構建,在Windows上生成VC solution后編譯。注意windows上僅支持win64 build。vsiual studio 2015需要升級update 2 或update3(見NanoGUI::issures 201)。

      C++實例

      使用nanogui界面時刻直接從nanogui::screen 繼承:

      1. class App : public nanogui::Screen {
      2. public:
      3. App() : nanogui::Screen(Eigen::Vector2i(1024, 768), "NanoGUI Test") {
      4. //初始化界面中第一個或多個菜單窗口
      5. }
      6. virtual void draw(NVGcontext *ctx) {
      7. //更新界面
      8. //...
      9. Screen::draw(ctx);
      10. }
      11. virtual void drawContents() {
      12. //使用OpenGL繪制窗口內容
      13. }
      14. virtual void Screen::drawAll() {
      15. glClearColor(mBackground[0], mBackground[1], mBackground[2], 1.0f);
      16. glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
      17. drawContents();
      18. drawWidgets();
      19. glfwSwapBuffers(mGLFWWindow);
      20. }
      21. virtual bool keyboardEvent(int key, int scancode, int action, int modifiers);
      22. ...
      23. }
      24. int main(int /* argc */, char ** /* argv */) {
      25. try {
      26. nanogui::init();
      27. /* scoped variables */ {
      28. nanogui::ref<App> app = new App();
      29. app->drawAll();
      30. app->setVisible(true);
      31. nanogui::mainloop();
      32. }
      33. nanogui::shutdown();
      34. } catch (const std::runtime_error &e) {
      35. //...
      36. return -1;
      37. }

      也可將其變為實例實現在view類中。

      1. class myViewer{
      2. public:
      3. nanogui::Screen* screen;
      4. void draw(){
      5. ngui->refresh();
      6. screen->drawWidgets();
      7. ...
      8. }
      9. }

      初始化菜單和窗口上的控件時,需要為其清晰的指定父窗口指針和布局(Layout)。也定義lambda函數作為button等對象的回調函數。

      1. Window *window = new Window(this, "Button demo");
      2. window->setPosition(Vector2i(15, 15));
      3. window->setLayout(new GroupLayout());
      4. /* No need to store a pointer, the data structure will be automatically
      5. freed when the parent window is deleted */
      6. new Label(window, "Push buttons", "sans-bold");
      7. Button *b = new Button(window, "Plain button");
      8. b->setCallback([] { cout << "pushed!" << endl; });
      9. b->setTooltip("short tooltip");

      img

      也可以為對象自定義回調函數,然后將其加入到系統循環的refresh()中。

      1. std::vector<std::function<void()>> mRefreshCallbacks;
      2. void refresh() {
      3. for (auto const &callback : mRefreshCallbacks)
      4. callback();
      5. }

      加入UI對象

      1. template <typename Type> detail::FormWidget<Type> *
      2. addVariable(const std::string &label, const std::function<void(Type)> &setter, const std::function<Type()> &getter, bool editable = true) {
      3. Label *labelW = new Label(mWindow, label, mLabelFontName, mLabelFontSize);
      4. //使用專用模板將數值類型轉換為對應的UI對象
      5. auto widget = new detail::FormWidget<Type>(mWindow);
      6. //getter,setter函數加入callbacks集合
      7. auto refresh = [widget, getter] {
      8. Type value = getter(), current = widget->value();
      9. if (value != current)
      10. widget->setValue(value);
      11. };
      12. refresh();
      13. widget->setCallback(setter);
      14. widget->setEditable(editable);
      15. widget->setFontSize(mWidgetFontSize);
      16. Vector2i fs = widget->fixedSize();
      17. widget->setFixedSize(Vector2i(fs.x() != 0 ? fs.x() : mFixedSize.x(),
      18. fs.y() != 0 ? fs.y() : mFixedSize.y()));
      19. mRefreshCallbacks.push_back(refresh);
      20. }

      Python實例

      python中直接將生成的lib文件和pyd文件放到.py文件的同一目錄(或Python搜索路徑),實現參考實例的中的Python代碼。

      關于作者

      NanoGUI的作者是Wenzel Jakob,洛桑聯邦理工學院(EPFL)助理教授,他的研究興趣是真實感渲染。
      Wenzel

      posted @ 2017-10-15 15:07  combust  閱讀(4641)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 熟女一区| 国产精品麻豆成人av网| 国产精品一区二区不卡视频| AV毛片无码中文字幕不卡| 日韩有码精品中文字幕| 日韩精品一区二区亚洲专区| 国产线播放免费人成视频播放| 男人用嘴添女人下身免费视频| 欧美丰满熟妇性xxxx| 久久精品国产九一九九九| 粗了大了 整进去好爽视频| 日本亚洲欧洲无免费码在线| 亚洲成av人片无码不卡播放器| 欧美极品色午夜在线视频| 国产99久久精品一区二区| 衣服被扒开强摸双乳18禁网站| 粉嫩av一区二区三区蜜臀| 国精品午夜福利视频| 亚洲岛国成人免费av| 国产亚洲精品黑人粗大精选| 亚洲精品久荜中文字幕| 2020年最新国产精品正在播放| 久久亚洲精品亚洲人av| 亚洲三级香港三级久久| 一本无码在线观看| 少妇xxxxx性开放| 日本三级成本人网站| 久热这里有精品视频在线| 亚洲人午夜精品射精日韩| 国产成人精品无码片区在线观看| 亚洲国语自产一区第二页| 无套内射视频囯产| 202丰满熟女妇大| 九九成人免费视频| 亚洲 欧洲 自拍 偷拍 首页| 国产无遮挡无码视频在线观看| 久久爱在线视频在线观看| 奶头又大又白喷奶水av| 综合人妻久久一区二区精品| 精品久久久久久成人AV| 亚洲va久久久噜噜噜久久狠狠|