26101a1044b95a500aaf9dd5d9f7d79c.png
  • 可能你要做一个三维软件,但是不想使用现成的3D引擎(Unity3D、Unreal之类);
  • 可能你想要做一个跨平台的三维编辑软件,涉及到很多基本图元操作;
  • 可能你厌烦了C++代码的内存管理,想要换用一下更新的程序语言写UI。

那这系列文章就是为这部分需求的技术选型打造的。

目前阶段来看,opengl还是跨平台最好的3D API。opengl和各个语言都有绑定,也都会有一些跨平台的特性。

比方说C++调用opengl比较直接方便,如果选用GLFW而不是MFC等框架是可以支持跨平台的,或者选用QT的解决方案,QT4、QT5都有单独封装好的opengl widget组件,也可以直接使用QT丰富的组件库。

java有LWJGL,一个一揽子的图形图像音频库集合,MineCraft使用了这个库。

但是,QT依赖比较重,C++写起来开发效率不太高,Java在内存和cpu利用率上不如非虚拟机语言。

本系列文章的技术选型是 golang、OpenGL、GLFW、Nuklear

  • Golang编译为机器码,运行效率可以得到保障,同时相对优雅开发效率较高。
  • OpenGL自不必说,核心就是它。
  • GLFW提供了简单但是跨平台的窗口交互。
  • Nuclear是个C语言开发的UI控件库,有golang的绑定,可以帮我们处理简单的界面显示问题。

由于本机环境为windows10,同时这套解决方案搭建最麻烦的是windows环境,本文以windows环境为例说一下基础环境建立。

MSYS2环境配置

由于GLFW需要gcc编译,我们选用MSys2来提供基础编译环境

首先在MSYS2官网https://www.msys2.org/下载安装包,如果速度慢可以去清华镜像https://mirror.tuna.tsinghua.edu.cn/help/msys2/下载,会快很多

下载之后进行安装,安装过程不赘述。

接下来需要配置基础编译环境,由于pacman直连国外比较慢,还需要替换一下国内源,清华、中科大、北理工的源都不错,替换教程可参见https://mirror.tuna.tsinghua.edu.cn/help/msys2/,如果msys2里操作不方便,可以找到在windows的msys2安装目录里的/etc/pacman.d下面直接编辑文本

编辑 /etc/pacman.d/mirrorlist.mingw32 ,在文件开头添加:
 
Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/i686
编辑 /etc/pacman.d/mirrorlist.mingw64 ,在文件开头添加:
 
Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/x86_64
编辑 /etc/pacman.d/mirrorlist.msys ,在文件开头添加:
 
Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/msys/$arch
然后执行 pacman -Sy 刷新软件包数据即可。

然后是本次安装的重头戏,gcc编译工具

pacman -S --needed base-devel mingw-w64-i686-toolchain mingw-w64-x86_64-toolchain

安装完毕后,需要修改一下MSYS2的环境变量,找到MSYS2安装目录下的msys2_shell.bat

在15行附近增加如下两行

set MSYSTEM=MINGW64
set MSYS2_PATH_TYPE=inherit
9d3d7503c2b6b32d3dbd1c0c50779525.png

运行msys2_shell.bat,执行gcc –help并看到有输出,说明编译环境安装完毕

$ gcc --help
Usage: gcc.exe [options] file...
Options:
  -pass-exit-codes         Exit with highest error code from a phase.
  --help                   Display this information.
  --target-help            Display target specific command line options.
  --help={common|optimizers|params|target|warnings|[^]{joined|separate|undocumented}}[,...].
                           Display specific types of command line options.
  (Use '-v --help' to display command line options of sub-processes).
  --version                Display compiler version information.
  -dumpspecs               Display all of the built in spec strings. 

Golang的安装和配置

从go语言官网下载一个安装包(msi)或者压缩包都可以https://golang.google.cn/dl/

如果是压缩包的话,解压到磁盘后需要手动配置环境变量,包括%GOROOT%,%GOPATH%和%PATH%等,因为比较简单就不在此赘述,可以参考https://blog.csdn.net/keepd/article/details/79430254

安装完成后,在msys2界面(运行msys2_shell.bat)输入 go version应该正常显示go环境版本,如:

$ go version
go version go1.12.4 windows/amd64

如果没有显示正确结果,那么就需要看下msys2的环境变量是否设置正确,输入echo $PATH查看go安装文件夹bin目录是否在其中,如果没有在的话,请检查windows环境变量和set MSYS2_PATH_TYPE=inherit配置是否正确设置

go-gl、GLFW的安装、配置和测试

还是在msys2的环境下,执行如下语句对go-gl(go语言opengl)进行安装

go get -v github.com/go-gl/gl/v3.2-core/gl

然后安装GLFW

go get -u github.com/go-gl/glfw/v3.2/glfw

而后安装下UI库 Nuklear

go get -v github.com/golang-ui/nuklear/nk

对上述安装好的组件进行测试

下载Nuklear测试程序

go get github.com/golang-ui/nuklear/cmd/nk-example

执行测试

nk-example

如果出现下面界面,环境搭建部分就大功告成啦

050a3784c72a6566b735edc287979c69.png