OpenGL的学习之路-3

前面1、2介绍的都是glut编程

下面就进行opengl正是部分啦。

1.绘制点

#include <iostream>
#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glut.h>void myMainWinDraw();int main(int argc,char** argv) {glutInit(&argc,argv);glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);glutInitWindowSize(400, 400);glutInitWindowPosition(0, 0);glutCreateWindow("Hello");glutDisplayFunc(myMainWinDraw);glutMainLoop();return 0;
}void myMainWinDraw(){glClearColor(0.0,0.0,0.0,0.0);//设置清除色glClear(GL_COLOR_BUFFER_BIT); //清除颜色缓冲区float a[2];glGetFloatv(GL_POINT_SIZE_RANGE,a);std::cout<<a[0]<<"---"<<a[1]<<"\n";   //输出的是,点大小的范围(不过没有这么严格)glPointSize(10);   //设置点的大小glBegin(GL_POINTS);#if 0(0.5f,0.4f);(-0.5f,0.4f,0.0f);(0.0f,-0.4f,0.0f);#elseglColor3f(1.0f,0.0f,0.0f);  //为点设置颜色glVertex3f(0.5f,0.4f,0.0f); //该语句可绘制glColor3f(0.0f,0.0f,1.0f);glVertex3f(-0.5f,0.4f,0.0f);glColor3f(0.0f,1.0f,0.0f);glVertex3f(0.0f,-0.4f,0.0f);#endif // 0glEnd();glFlush();
}

这里留下小思考题:

掷骰子是随机事件,现在平面上有三个点A、B、C,还有一个点P,位置可随机。令点A代表骰子的点数为1、4,点B代表骰子的点数为2、5,点C代表骰子的点数为3、6。现在开始扔,如果扔的点数为1或者4,那么取AP的中点作为新的P;如果扔到2或者5,则取BP的中点作为新的P;如果扔到的点数为3,6,则同理取CP的中点作为新的P。同时,要把每次取得的新的P绘制出来,并保持与相应的A或B或C同色。前面一定次数(如前20次),我们先不画点(还未进入稳态),后面再开始绘制。看看最终得到的图形是什么样子。

结果很奇妙!

明明是随机的,却呈现了规律性。赞叹数学、赞叹科学?是的,但我也想赞叹让我知道这个的我的老师。

2.绘制线

#include <iostream>
#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glut.h>void myMainWinDraw();int main(int argc,char** argv) {glutInit(&argc,argv);glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);glutInitWindowSize(400, 400);glutInitWindowPosition(0, 0);glutCreateWindow("Hello");glutDisplayFunc(myMainWinDraw);glutMainLoop();return 0;
}void myMainWinDraw(){glClearColor(0.0,0.0,0.0,0.0);glClear(GL_COLOR_BUFFER_BIT);glLineWidth(2);glBegin(GL_LINES);#if 0glVertex3f(0.5f,0.0f,0.0f);glVertex3f(0.5f,0.4f,0.0f);glVertex3f(0.0f,0.4f,0.0f);glVertex3f(0.0f,-0.4f,0.0f);
#elseglColor3f(1.0f,0.0f,0.0f);glVertex3f(0.5f,0.0f,0.0f);glColor3f(0.0f,1.0f,0.0f);glVertex3f(0.5f,0.4f,0.0f);glColor3f(1.0f,0.0f,0.0f);glVertex3f(0.0f,0.4f,0.0f);glColor3f(0.0f,0.0f,1.0f);glVertex3f(0.0f,-0.4f,0.0f);#endifglEnd();glFlush();}

两点连成一条直线。点和点之间是配对的,如果给的点的个数是奇数,那么最后一个点没有找到和他配对的点,会不起作用。

关于颜色:

默认状态,是两边点颜色的线性插值,结果如下:

如果不想这样,就需要 glShadeModel(GL_FLAT) 变成:

glShadeModel(GL_SMOOTH) 和 glShadeModel(GL_FLAT) !!

联系:绘制环

glBegin(GL_LINES_LOOP) :给出的两个相邻的点首尾相连,最后一个点和第一个点相连,构成环。两种颜色模式下:

3.绘制三角形

#include <iostream>
#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glut.h>void myMainWinDraw();int main(int argc,char** argv) {glutInit(&argc,argv);glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);glutInitWindowSize(400, 400);glutInitWindowPosition(0, 0);glutCreateWindow("Hello");glutDisplayFunc(myMainWinDraw);glutMainLoop();return 0;
}void myMainWinDraw(){glClearColor(0.0,0.0,0.0,0.0);glClear(GL_COLOR_BUFFER_BIT);//glShadeModel(GL_FLAT); //GL_SMOOTHglBegin(GL_TRIANGLES);#if 0glVertex3f(0.5f,0.0f,0.0f);glVertex3f(0.5f,0.4f,0.0f);glVertex3f(0.0f,0.4f,0.0f);glVertex3f(0.0f,-0.4f,0.0f);glVertex3f(0.3f,-0.4f,0.0f);glVertex3f(0.0f,-0.2f,0.0f);
#elseglColor3f(1.0f,0.0f,0.0f);glVertex3f(0.5f,0.0f,0.0f);glColor3f(0.0f,1.0f,0.0f);glVertex3f(0.5f,0.4f,0.0f);glColor3f(1.0f,0.0f,0.0f);glVertex3f(0.0f,0.4f,0.0f);glColor3f(0.0f,0.0f,1.0f);glVertex3f(0.0f,-0.4f,0.0f);glColor3f(1.0f,0.0f,1.0f);glVertex3f(0.3f,-0.4f,0.0f);glColor3f(0.0f,1.0f,1.0f);glVertex3f(0.0f,-0.2f,0.0f);#endifglEnd();glFlush();}

三个点一组,绘制一个三角形。

推广:

(后面几个平时用不太到) 

4.绘制的线型

#include <iostream>
#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glut.h>void myMainWinDraw();int main(int argc,char** argv)
{glutInit(&argc,argv);glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);glutInitWindowSize(400, 400);glutInitWindowPosition(0, 0);glutCreateWindow("Hello");glutDisplayFunc(myMainWinDraw);glutMainLoop();return 0;
}void myMainWinDraw(){glClearColor(0.0,0.0,0.0,0.0);glClear(GL_COLOR_BUFFER_BIT);glLineWidth(2);glEnable(GL_LINE_STIPPLE);glLineStipple(1,0xF0F0);  //第一个参数是重复度、第二个参数代表线型glBegin(GL_LINES);glVertex3f(0.5f, 0.4f ,0.0f);glVertex3f(-0.5f, 0.4f ,0.0f);glEnd();glLineWidth(10);glLineStipple(5,0xF0F0);glColor3f(1.0f,0.0f,0.0f);glBegin(GL_LINES);glVertex3f(0.5f, 0.0f, 0.0f);glVertex3f(-0.5f, 0.0f,0.0f);glEnd();glLineWidth(20);glLineStipple(3,0x7555);glColor3f(1.0f,1.0f,0.0f);glBegin(GL_LINES);glVertex3f(0.5f, -0.4f, 0.0f);glVertex3f(-0.5f, -0.8f,0.0f);glEnd();glLineWidth(5);glBegin(GL_LINE_LOOP);glVertex3f(-0.8f,  0.8f, 0.0f);glVertex3f(-0.8f, -0.8f, 0.0f);glVertex3f( 0.8f, -0.8f, 0.0f);glVertex3f( 0.8f,  0.8f, 0.0f);glEnd();glFlush();}

新的知识点:

1. glEnable(GL_LINE_STIPPLE) :将开关打开

2. glLineStipple(1,0xF0F0):第一个参数是重复度,第二个参数是线型。这里是,1111000011110000。如果将第一个参数改为2,那么将变成1111111100000000...这个样子。

绘制结果:

5.多边形绘制的模式(填充/线框)

#include <iostream>
#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glut.h>void myMainWinDraw();int main(int argc,char** argv)
{glutInit(&argc,argv);glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);glutInitWindowSize(400, 400);glutInitWindowPosition(0, 0);glutCreateWindow("Hello");glutDisplayFunc(myMainWinDraw);glutMainLoop();return 0;
}void myMainWinDraw(){glClearColor(0.0,0.0,0.0,0.0);glClear(GL_COLOR_BUFFER_BIT);glDisable(GL_LIGHTING);glPolygonMode(GL_FRONT,GL_FILL);glPolygonMode(GL_BACK,GL_LINE);glBegin(GL_TRIANGLES);glVertex2f(-1.0f, 0.0f);glVertex2f( 0.0f, 0.0f);glVertex2f( 0.0f, 1.0f);glEnd();glPolygonMode(GL_FRONT,GL_LINE);glBegin(GL_TRIANGLES);glVertex2f( 1.0f, 0.0f);glVertex2f( 0.0f, 1.0f);glVertex2f( 0.0f, 1.0f);glEnd();glPolygonMode(GL_FRONT_AND_BACK,GL_FILL);glBegin(GL_TRIANGLES);glVertex2f(  0.0f, 0.0f);glVertex2f( -1.0f, 0.0f);glVertex2f(  0.0f,-1.0f);glEnd();glFrontFace(GL_CW);glPolygonMode(GL_BACK,GL_FILL);glPolygonMode(GL_FRONT,GL_LINE);glBegin(GL_TRIANGLES);glVertex2f(  0.0f, 0.0f);glVertex2f(  0.0f,-1.0f);glVertex2f(  1.0f, 0.0f);glEnd();glFlush();
}

新的知识点:

1. glPolygonMode(GL_FRONT,GL_FILL):设置正面或者背面的填充方式为GL_FILL或者GL_LINE模式。

2. glFrontFace(GL_CW):初始状态将CCW方向(点的顺序)视为正面,该语句将CW方向转为正面。

6.多边形填充的效果

填充图形的定义:

 下面就是glBegin()和glEnd() 了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/143010.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于谐波参数空间的卷积神经网络自动三维牙齿分割

论文连接&#xff1a;https://www.sciencedirect.com/science/article/abs/pii/S1524070320300151 机构&#xff1a; a英国卡迪夫大学计算机科学与信息学院 b中国科学院大学北京 c中国科学院计算技术研究所北京 d深圳大数据研究院&#xff0c;深圳518172 代码链接&#x…

Window MongoDB安装

三种NOSQL的一种,Redis MongoDB ES 应用场景: 1.社交场景:使用Mongodb存储用户信息,以及用户发表的朋友圈信息,通过地理位置索引实现附近的人,地点等功能 2.游戏场景:使用Mongodb存储游戏用户信息,用户的装备,积分等直接以内嵌文档的形式存储,方便查询,高效率存储和访问…

保姆级vue-pdf的使用过程

第一步 引入vue-pdf npm install --save vue-pdf 第二步 按照需求我们慢慢进行 01.给你一个pdf文件的url&#xff0c;需要在页面渲染 代码 <template><div><pdfref"pdf":src"url"></pdf></div> </template> <…

灰度图处理方法

做深度学习项目图像处理的时候常常涉及到灰度图处理&#xff0c;这里对自己处理灰度图的方式做一个记录&#xff0c;后续有更新的话会在此更新 一&#xff0c;多维数组可视化 将多维数组可视化为灰度图 img_gray Image.fromarray(img, modeL) # 实现array到image的转换,m…

深度学习 机器视觉 车位识别车道线检测 - python opencv 计算机竞赛

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 深度学习 机器视觉 车位识别车道线检测 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f947;学长这里给一个题目综合评分(每项满分5分) …

使用 Electron 来替代本地调试线上代理的场景

Cookie Samesite 问题 https://developers.google.com/search/blog/2020/01/get-ready-for-new-samesitenone-secure?hlzh-cnhttps://www.chromium.org/updates/same-site/https://github.com/GoogleChromeLabs/samesite-exampleshttps://releases.electronjs.org/releases/s…

PieCloudDB Database 自研内存管理器 ASanAlloc:为产品质量保驾护航

内存管理是计算机科学中至关重要的一部分&#xff0c;它涉及到操作系统、硬件和软件应用之间的动态交互。有效的内存管理可以确保系统的稳定性和安全性&#xff0c;提高系统运行效率&#xff0c;帮助我们最大限度地利用有效的内存资源&#xff0c;合理分配和回收内存&#xff0…

【SQLite】的使用及指令| 编程操作(增删改查)

一、SQLite 使用和指令集 SQLite 的基本使用SQL 命令 二、常见的 SQL 数据类型 三、SQLite的命令用法 四、SQLite的编程操作 五、sqlite3_open函数 六、sqlite3_close函数 七、sqlite3_errcode函数 八、SQLite C Interface 九、sqlite3_exec函数 十、callback回调函数 十一、…

【游戏开发算法每日一记】使用随机prime算法生成错综复杂效果的迷宫(C#,C++和Unity版)

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;Uni…

Python小白之PyCharm仍然显示“No module named ‘xlwings‘”

Python小白之“没有名称为xlwings‘的模块”-CSDN博客文章浏览阅读8次。cmd 打开命令行&#xff0c;输入python出现>>>的提示格&#xff0c;输入import xlwings 回车&#xff0c;正常报错&#xff1a;No module named xlwings。输入python 回车后&#xff0c;再输入im…

宏观角度认识递归之求根节点到叶节点数字之和

LCR 049. 求根节点到叶节点数字之和 - 力扣&#xff08;LeetCode&#xff09; 理解题意分析子问题&#xff1a;给一个头节点&#xff0c;要返回该头结点左右子树的根结点到叶节点数字和。此处还需注意&#xff1a;在获取根结点到叶节点数字和的时候&#xff0c;要传递一个参数&…

openGauss学习笔记-121 openGauss 数据库管理-设置密态等值查询-使用JDBC操作密态数据库

文章目录 openGauss学习笔记-121 openGauss 数据库管理-设置密态等值查询-使用JDBC操作密态数据库121.1 连接密态数据库121.2 调用isValid方法刷新缓存示例121.3 执行密态等值查询相关的创建密钥语句121.4 执行密态等值查询相关的创建加密表的语句121.5 执行加密表的预编译SQL语…

ACM练习——第三天

今天继续练习C和ACM模式 在写题之前先了解一些新的知识 1.#include <algorithm> #include <algorithm> 是 C 标准库中的头文件之一&#xff0c;其中包含了一系列用于处理各种容器&#xff08;如数组、向量、列表等&#xff09;和其他数据结构的算法。这个头文件提供…

【Liunx】DHCP服务

【Liunx】DHCP服务 DHCP概述A.安装dhcpB.查看配置文件C.修改配置文件 DHCP概述 DHCP(Dynamic Host Configuration Protocol)i动态主机配置协议 DHCP是由Internet工作任务小组设计开发的&#xff0c;专门用于为TCP/IP网络中的计算机自动分配TCP/IP参数的协议。 口使用DHCP服务的…

使用PHP编写采集药品官方数据的程序

目录 一、引言 二、程序设计和实现 1、确定采集目标 2、使用PHP的cURL库进行数据采集 3、解析JSON数据 4、数据处理和存储 5、数据验证和清理 6、数据输出和可视化 7、数据分析和挖掘 三、注意事项 1、合法性原则 2、准确性原则 3、完整性原则 4、隐私保护原则 …

【避雷帖!】安美酷便携屏(安美特)

强烈建议别购买京东安美酷便携屏&#xff0c;太脆弱了&#xff0c;一碰就坏&#xff0c;客服态度不行&#xff0c;容易闪屏等等缺点。而且价格偏贵&#xff0c;淘宝上两百块的屏幕足够用了&#xff0c;没必要花六百多块钱&#xff0c;如果就是买来打游戏的话&#xff0c;也用不…

Adobe 2023 全家桶最终版,一键安装,永久免费,赶紧收藏!(win/mac)

文件名称 Adobe 2023 全家桶最终版 支持系统 windows、mac 获取方式 文章底部 分享形式 百度网盘 小励花了一天的时间给大家整理上传了这份最终版全家桶&#xff0c;全部一键安装即可&#xff0c;无需激活&#xff0c;安装以后即可永久使用&#xff0c;觉得给力的小伙伴…

1688往微信小程序自营商城铺货商品采集API接口

一、背景介绍 随着移动互联网的快速发展&#xff0c;微信小程序作为一种新型的电商形态&#xff0c;正逐渐成为广大商家拓展销售渠道、提升品牌影响力的重要平台。然而&#xff0c;对于许多传统企业而言&#xff0c;如何将商品信息快速、准确地铺货到微信小程序自营商城是一个…

VMware 安装CentOS7

一、软件准备 VMware 虚拟机安装 官网下载链接&#xff1a;VMware pro 17 下载链接 下载 VMware Workstation Pro | CN vm安装教学就不在细说&#xff0c;纯傻瓜式安装 Centos 7镜像文件下载 下载地址&#xff1a; Index of /centos/ | 清华大学开源软件镜像站 | Tsinghua O…

算法笔记——递归(1)

这里写目录标题 递归的思想序列求最大值翻转字符串斐波那契数列数塔回文字符串上楼汉诺塔棋盘覆盖问题数字螺旋矩阵盒分形 递归的思想 子问题须与原始问题为同样的事&#xff0c;且更为简单。 不能无限制地调用本身&#xff0c;须有个出口&#xff0c;化简为非递归状况处理 序…