IDE: Visual Studio Community 2019
HeadPic:白息文 by 456

窗口

首先要做的工作是创建一个OpenGL上下文和一个用于显示的窗口。具体的搭建过程可以参考 LearnOpenGL教程 Leran入门章节的前三小节。
由于现在大多数的电脑都是64位的,在建立VS的空工程之后首先将解决方案平台修改为x64,不过这步操作的必要性我还不清楚。之后建立opengl文件夹,用于存放与OpenGL相关的文件。注意在工程下创建其他文件夹后,要将该文件夹加入 VC++目录中的包含目录,或者包含时带有文件夹路径,否则无法使用。
如果顺利,运行后我们可以得到如下图的空白窗口
批注 2020-04-07 190257.png

窗口.png

Visual Studio 中的筛选器与文件夹功能类似,但可以和实际的文件夹以及文件位置不对应。

Dear ImGUI

得到基本的OpenGL窗口后,我们将ImGUI加入我们的工程。首先在GitHub上 下载 Dear ImGUI 的源代码,在examples文件夹下已经包含了基于多种渲染器的的实现,其中Visual Studio工程可以直接运行使用,不妨打开试一试(效果见下图)。

批注 2020-04-07 192441.png

接下来在我们的工程中创建imgui目录,并加入必要的文件,完成后记得在设置中修改VC++包含目录。
然后在工程的main.c里按 exaple_glfw_opengl3的main.c加入相应的包含、初始化、demo窗口。
由于我们使用了OpenGL 3.3 故初始化版本应当修改为:
ImGui_ImplOpenGL3_Init("#version 330");
这部分代码需要按需修改,因此应当熟悉 LearnOpenGL教程 并且熟悉ImGUI的例子以后再进行操作,成功后可以看到与例子中相同的界面。
加入其他字体
为了改善ImGUI的视觉效果,可以加载其他字体,加载方式在example代码或ImGUI FAQ中都有。我选择的是一款开源字体 Hack下载ttf文件后在工程目录下新建fonts文件夹放置。导入字体时将AddFontFromFileTTF 的size_pixels改大可以获得更好的视觉效果。
显示效果
批注 2020-04-07 212222.png

此时VS中资源管理器与实际文件夹下的内容如下:
imgui.png

CSerial

通过CSerial这个C++类来进行串口通信,这个类实际上是使用Windows MFC来实现的。首先下载这个类的源码,然后在我们的工程下创建serial文件夹将其加入。

接下来注释掉Serial.cpp中的#include "stdafx.h",然后在Serial.h中加上#include<Windows.h>以及#undef UNICODE来解决字符编码造成的错误。
批注 2020-04-07 232933.png

之后测试该串口类的功能,在main.c中实例化一个对象,并在渲染循环中读取串口的数据。

//Serial Receive
 if (serial.Open(6, 115200))
    {
        char* lpBuffer = new char[500];
        int nBytesRead = serial.ReadData(lpBuffer, 500);
        if (nBytesRead > 0)
        {
            for (int i = 0; i < nBytesRead; i++)
                printf("%c ", lpBuffer[i] + '0');
            std::cout << std::endl << "Byte Number:" << nBytesRead << std::endl;
        }
        delete[]lpBuffer;
    }

使下位机持续发送数据,然后用串口调试助手检测电脑是否能正常接收数据
serialassistant.png

这里看到下位机不断发送0x00-0x09,观察到输出后关闭调试助手,运行我们的工程看是否可以正确读取数据
批注 2020-04-07 215551.png

我们成功接收了来自下位机的数据,这个工程模板也就基本搭建完成了。

Last modification:March 7, 2021
If you think my article is useful to you, please feel free to appreciate