CLion MinGW 快速配置 OpenGL GLUT 环境的方法(配图)_clion 导入glut-程序员宅基地

技术标签: 笔记  

直接在项目文件夹内配置,不需要到处复制的方法。

关于 MinGW 的 配置跳过,可以参考https://blog.csdn.net/zwx19921215/article/details/83306119

配置 OpenGL 步骤:

  1. 首先下载freeglut https://www.transmissionzero.co.uk/software/freeglut-devel/ 选择for MinGW版本的
    在这里插入图片描述
  2. 打开压缩包,里面有bin,include,lib三个文件夹
    在这里插入图片描述
  3. 创建项目,将 include 和 lib 文件夹复制到项目文件夹内(我此时将其命名为 OpenGL),将 /bin/freeglut.dll 复制到 /cmake-build-debug/bin 内
    在这里插入图片描述
    在这里插入图片描述
  4. 配置 CMakeLists.txt,将第一行以下改为
project(OpenGL) #填你的项目名

include_directories(include)
link_directories(lib/x64)

set(CMAKE_C_STANDARD 14) #我选的是 C++14 版本
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY bin)

#测试
add_executable(main main.cpp) #前为编译完成后的exe文件名,随便写就行了, 后面是 cpp 源文件的相对路径
target_link_libraries(main libopengl32.a libfreeglut.a glu32.dll) #链接对应的库文件

测试代码:

#include <GL/glut.h>

GLsizei winWidth = 600, winHeight = 500;

GLubyte label[36] = {
    'J', 'a', 'n', 'F', 'e', 'b', 'M', 'a', 'r',
                     'A', 'p', 'r', 'M', 'a', 'y', 'J', 'u', 'n',
                     'J', 'u', 'l', 'A', 'u', 'g', 'S', 'e', 'p',
                     'O', 'c', 't', 'N', 'o', 'v', 'D', 'e', 'c'};

GLint  dataValue[12] = {
    420, 342, 324, 310, 262, 185, 190, 196, 217, 240, 312, 438};

void initWindow(int argc, char* argv[]) {
    
    glutInit(&argc, argv);
    glutInitWindowSize(winWidth, winHeight);
    glutInitWindowPosition(100, 100);
    glutCreateWindow("P105");
}

void initBackground() {
    
    glClearColor(1, 1, 1, 0);
    glMatrixMode(GL_PROJECTION);
    //glOrtho(0, winWidth, 0, winHeight, -1, 1);
    gluOrtho2D(0, winWidth, 0, winHeight);
}

void lineGraph() {
    
    GLint xRaster = 25, yRaster = 150;

    glClear(GL_COLOR_BUFFER_BIT);
    glColor3d(0, 0, 1);

    glBegin(GL_LINE_STRIP);
    for (GLint k = 0; k < 12; k ++) {
    
        glVertex2i(xRaster + k * 50, dataValue[k]);
    }
    glEnd();

    glColor3d(1, 0, 0);
    for (GLint k = 0; k < 12; k ++) {
    
        glRasterPos2i(xRaster + k * 50, dataValue[k] - 4);
        glutBitmapCharacter(GLUT_BITMAP_9_BY_15, '*');
    }

    glColor3d(0, 0, 0);
    xRaster = 20;
    for (GLint month = 0; month < 12; month ++) {
    
        glRasterPos2i(xRaster, yRaster);
        for (GLint k = 3 * month; k < 3 * month + 3; k ++) {
    
            glutBitmapCharacter(GLUT_BITMAP_HELVETICA_12, label[k]);
        }
        xRaster += 50;
    }
    glFlush();
}

void barChart() {
    
    GLint xRaster = 20, yRaster = 150;

    glClear(GL_COLOR_BUFFER_BIT);

    glColor3f(1, 0, 0);
    for (GLint k = 0; k < 12; k ++) {
    
        glRecti(20 + k * 50, 165, 40 + k * 50, dataValue[k]);
    }

    glColor3d(0, 0, 0);
    for (GLint month = 0; month < 12; month ++) {
    
        glRasterPos2i(xRaster, yRaster);
        for (GLint k = 3 * month; k < 3 * month + 3; k ++) {
    
            glutBitmapCharacter(GLUT_BITMAP_HELVETICA_12, label[k]);
        }
        xRaster += 50;
    }
    glFlush();
}

void winReshapeFcn(GLint newWidth, GLint newHeight) {
    
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(0, (GLdouble)newWidth, 0, (GLdouble)newHeight, -1, 1);
    glClear(GL_COLOR_BUFFER_BIT);
}

int main(int argc, char* argv[]) {
    
    initWindow(argc, argv);
    initBackground();
    //glutDisplayFunc(lineGraph);
    glutDisplayFunc(barChart);
    glutReshapeFunc(winReshapeFcn);
    glutMainLoop();
    return 0;
}

生成以下结果:
在这里插入图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_43848437/article/details/107396826

智能推荐

Bootstrap4总结(1)_bootstrap4的好处-程序员宅基地

文章浏览阅读1k次。一.Bootstrap简介1.什么是BootstrapBootstrap 是全球最受欢迎的前端组件库,用于开发响应式布局、移动设备优先的 WEB 项目。Bootstrap4 目前是 Bootstrap 的最新版本,是一套用于 HTML、CSS 和 JS 开发的开源工具集。2.Bootstrap的来源Bootstrap是美国Twitter公司的设计师Mark Otto和Jacob Thornton合作基于HTML、CSS、JavaScript开发的简洁、直观、强悍的前端开发框架,使得 W._bootstrap4的好处

[C++]LeetCode208 . 实现 Trie (前缀树)-程序员宅基地

文章浏览阅读264次。208 . 实现 Trie (前缀树)题目:实现一个 Trie (前缀树),包含 insert, search, 和 startsWith 这三个操作。示例:Trie trie = new Trie();trie.insert(“apple”);trie.search(“apple”); // 返回 truetrie.search(“app”); // 返回 falsetrie.startsWith(“app”); // 返回 truetrie.insert(“app”);tr

阶乘和(高精度算法)_阶乘和高精度-程序员宅基地

文章浏览阅读6.6k次,点赞6次,收藏12次。(对于自然数N的阶乘,当N比较小时,可以32位整数int范围内准确表示 。例如12!=479001600<2147483647(231-1) 而20!=2432902008176640000<9223372036854775807(263-1)可以在64位整数long long int范围内准确表示 ,但是N取值更大时,N!只能使用浮点数计算,从而产生误差 )题目描述已知正整数N(N..._阶乘和高精度

emwin自定义字库-程序员宅基地

文章浏览阅读638次。一.用到软件  1.FontCvtST.exe  2.U2C.exe  下载地址:https://i.cnblogs.com/Files.aspx二.转换1.新建文本文档,在文本文档中写入所需要用的字或词语,注意:根据用到的字或者词语,每个换行,方便后面使用,如下图2.将文本文档另存为UNICODE格式的新文本文档,备用;并将原文档再另存为UTF-8格式的新文..._st emwin修改字库

vue-cli 设置网页左上角icon图标_vue项目页面左上角小图标怎么修改-程序员宅基地

文章浏览阅读9.8k次,点赞4次,收藏4次。把.ico文件放在根目录下的static文件夹下,然后link标签引入 &lt;link rel="shortcut icon" href="./static/favicon.ico"&gt;_vue项目页面左上角小图标怎么修改

ip-guard V4加密原理更新成驱动层加密_ip-guard原理-程序员宅基地

文章浏览阅读1.5k次。V3应用层加密应用层透明加密技术俗称钩子透明加密技术。这种技术就是将两种技术(应用层API和Hook)组合而成的。通过windows的钩子技术,监控应用程序对文件的打开和保存,当打开文件时,先将密文转换后再让程序读入内存,保证程序读到的是明文,而在保存时,又将内存中的明文加密后再写入到磁盘中。应用层透明加密(钩子透明加密)技术与应用程序密切相关,它是通过监控应用程序的启动而启动的。V4驱动层加密基于windows的文件系统(过滤)驱动(IFS)技术,工作在windows的内核层。当应用程_ip-guard原理

随便推点

React路由 报错 ‘Switch‘ is not exported from ‘react-router‘.-程序员宅基地

文章浏览阅读722次。配置 路由 报错 'Switch' is not exported from 'react-router'.npm uninstall react-router-domnpm install [email protected]

利用tushare实现选股_tushare 选股-程序员宅基地

文章浏览阅读1.1k次,点赞2次,收藏7次。ID:399899量化交易中,首先要弄好的就是选股。然后在才是买卖策略的制定。不同类型的策略,选股思路也不相同。俗话说得好,不管黑猫白猫,抓到老鼠的就是好猫。一个好的选股策略,往往在量化中是起较为关键的作用的。要实现程序化选股的话,数据又是一个前提。要有数据才能去实现编写程序。数据来源有很多,可以去爬取,也可以去股票交易网站下载。当然也有一些接口可以提供数据。常见的接口有tushare、baostock、akshare在这里我以一个简单的选股案例,为大家介绍一下使用tushare接口使用tush_tushare 选股

Gin框架使用Casbin进行用户权限校验_gin 的权限校验-程序员宅基地

文章浏览阅读3.7k次,点赞2次,收藏10次。以下是测试项目目录一、配置modelconf/casbin_rbac_model.conf# 请求[request_definition]r = sub,obj,act# sub ——> 想要访问资源的用户角色(Subject)——请求实体# obj ——> 访问的资源(Object)# act ——> 访问的方法(Action: get、post...)# 策略(.csv文件p的格式,定义的每一行为policy rule;p,p2为policy rule的名字。)_gin 的权限校验

OKR制定与实施:团队OKR众筹策略_运营okr的制定与实施-程序员宅基地

文章浏览阅读319次。例如,一个团队有20个人,其中有2个员工在共同做A业务,3个员工在共同做B业务,5个员工在共同做C业务,剩下10个员工在共同做D业务,那么可以基于业务相关性将这20个员工分成A业务研讨组、B业务研讨组、C业务研讨组和D业务研讨组,这样,在步骤2目标众筹时,就以A、B、C、D 4个研讨小组为单位,邀请其输出3~5个团队OKR,然后团队主管再基于所有小组贡献的团队OKR进行投票表决,形成团队的OKR。通过这种方式,大大增强了团队成员对团队目标的共识程度,团队目标真正变成了大家共同的目标,而不再只是主管的目标。_运营okr的制定与实施

SSM项目静态资源访问不到解决方法-程序员宅基地

文章浏览阅读3.8k次,点赞3次,收藏21次。ssm框架搭建静态资源访问不到的问题ssm框架中静态资源的访问不到解决方法静态资源访问报404解决办法原因:如果在web.xml中有对spring的DispatcherServlet请求url映射有如下配置 <servlet> <servlet-name>springmvc</servlet-name> <servlet-cla...

二叉树(Java实现)_java二叉树-程序员宅基地

文章浏览阅读1.5w次,点赞33次,收藏210次。声明:本文部分文章取自于Java中关于二叉树详解_来学习的小张的博客-程序员宅基地_java 二叉树原理更多关于二叉树详情可以点击上面链接一:树形结构树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点:有一个特殊的节点,称为根节点,根节点没有前驱节点; 除根节点外,其余节点被分成M(M > 0)个互不相交的集合T1、T2、......、Tm,其中每一个_java二叉树

推荐文章

热门文章

相关标签