OpenGL基础知识的学习告一段落,毕竟我想只用OpenGL绘制平面的矢量图形而已,接下来开始实验用qt、gdal、opengl进行矢量绘制。
多边形绘制
首先OpenGL虽然可以绘制多边形,但不支持凹多边形。而且这种固定管线的绘制方法已经被淘汰了,每次都要传输坐标信息给显存,对于大规模矢量的渲染来说是不现实的。
【OpenGL】十八、OpenGL 绘制多边形 ( 绘制 GL_POLYGON 模式多边形 )_glut绘制多边形-CSDN博客
// 只显示正面 , 不显示背面
//glEnable(GL_CULL_FACE);
// 设置顺时针方向 CW : Clock Wind 顺时针方向
// 默认是 GL_CCW : Counter Clock Wind 逆时针方向
//glFrontFace(GL_CW);
// 主消息循环:
while (GetMessage(&msg, nullptr, 0, 0))
{
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
// 渲染场景
// 清除缓冲区 ,
// 使用之前设置的 glClearColor(1.0, 0.0, 0.0, 1.0) 擦除颜色缓冲区
// 红色背景
glClear(GL_COLOR_BUFFER_BIT);
// 设置当前的绘制颜色 , 4 个 unsigned byte
// 每个颜色的分量占一个字节
// 参数数据是 R 红色 G 绿色 B 蓝色 A 透明度
// 下面设置的含义是白色, 绘制点的时候, 每次都使用白色绘制
glColor4ub(255, 255, 255, 255);
// 设置线的宽度
glLineWidth(2.0f);
//glBegin(GL_POINTS); // 绘制点
//glBegin(GL_LINES); // 绘制线
//glBegin(GL_LINE_STRIP);// 绘制前后连接的点组成的线
//glBegin(GL_LINE_LOOP); // 绘制前后连接的点组成的线 , 并且收尾相连
//glBegin(GL_TRIANGLES); // 绘制多个三角形
//glBegin(GL_TRIANGLE_STRIP); // 绘制 GL_TRIANGLE_STRIP 三角形
//glBegin(GL_TRIANGLE_FAN); // 绘制三角形扇
// 绘制多边形
glBegin(GL_POLYGON);
// 1. 设置白色 , glVertex3f (GLfloat x, GLfloat y, GLfloat z)
glColor4ub(255, 255, 255, 255);
glVertex3f(0.0f, 0.0f, -10.0f);
// 2. 设置绿色
glColor4ub(0, 255, 0, 255);
glVertex3f(-5.0f, 0.0f, -10.0f);
// 3. 设置蓝色
glColor4ub(0, 0, 255, 255);
glVertex3f(-5.0f, -2.0f, -10.0f);
// 4. 设置绿色
glColor4ub(0, 255, 0, 255);
glVertex3f(0.0f, -2.0f, -10.0f);
// 5. 设置白色 , glVertex3f (GLfloat x, GLfloat y, GLfloat z)
glColor4ub(255, 255, 255, 255);
glVertex3f(0.0f, 4.0f, -10.0f);
// 6. 设置绿色
glColor4ub(0, 255, 0, 255);
glVertex3f(-5.0f, 4.0f, -10.0f);
// 绘制四边形结束
glEnd();
// 将后缓冲区绘制到前台
SwapBuffers(dc);
}
可编程管线,也就是VBO,VAO的模式,局限性在于只能绘制点线三角形,我们需要把矢量多边形先剖分成三角形。CGAL库太重了,我选用Poly2Tri库。
三角形剖分 CLipper2和Poly2Tri库配置
本来打算用Clipper2库的,但是发现Clipper2不能进行三角形剖分,但是这个库功能还挺多的,先记录一下以防以后用。
https://github.com/AngusJohnson/Clipper2
CLipper2 编译记录 - yuchq - 博客园 (cnblogs.com)
cmake 引入第三方库(头文件目录、库目录、库文件)_qt cmake 将第三方库加入到自己工程-CSDN博客
Clipper2库给了VS工程文件,直接生成dll和lib,先在cmake用绝对路径导入。
# 包含头文件目录
include_directories("D:\\coding\\libs\\Clipper2-main\\CPP\\Clipper2Lib\\include")
# 导入库
link_libraries("D:\\coding\\libs\\Clipper2-main\\DLL\\CPP_DLL\\x64\\Debug")
三角形剖分直接用Poly2Tri
https://github.com/jhasse/poly2tri
编译时遇到大麻烦。首先是ninja编译,其次只能动态编译,浪费了四小时,写个笔记方便后人了
MSVC2022 poly2tri编译 - 哔哩哔哩 (bilibili.com)
剖分之后用opengl显示,具体就不记录了,代码写的挺清楚的
GISlxz/drawShpWithOpengl: draw polygon shp with opengl (github.com)











Comments NOTHING