OPengl学习(三)——绘制几何物体和状态管理

news2024/11/24 3:41:33

文章目录

  • 0、 写在前面
  • 1、绘图工具
    • 1.1、清除窗口
    • 1.2、指定颜色
    • 1.3、强制完成绘图
    • 1.4、坐标系统工具
  • 2、点,直线,多边形
    • 2.1、填充多边形
  • 3、点,直线,多边形细节刻画
  • 4、基本状态管理

在这里插入图片描述


0、 写在前面

1、OpenGL自身是一个巨大的状态机(State Machine):一系列的变量描述OpenGL此刻应当如何运行。OpenGL的状态通常被称为OpenGL上下文(Context)。我们通常使用如下途径去更改OpenGL状态:设置选项,操作缓冲。最后,我们使用当前OpenGL上下文来渲染。
2、Opengl所有复杂的图形,都是有简单的图形构成的;
3、早期的OpenGL使用立即渲染模式(Immediate mode,也就是固定渲染管线),这个模式下绘制图形很方便;3.3之后这种模式被摒弃,改为更为现代的函数的核心模式(把一些绘图命令存在一个列表,以后在一起执行),效率更高,但是上手不易啊。


1、绘图工具

1.1、清除窗口

主要函数:

 glClearColor(0.0,0.0,0.0,0.0); //清除颜色设置为黑色
 glClear(GL_COLOR_BUFFER_BIT);  //把整个窗口清除为当前清除颜色

缓冲区主要有

缓冲区名称
颜色缓冲区GL_COLOR_BUFFER_BIT
深度缓冲区GL_DEPTH_BUFFER_BIT
累计缓冲区GL_ACCUM_BUFFER_BIT
模板缓冲区GL_STENCIL_BUFFER_BIT

1.2、指定颜色

之前说了opengl是个状态机,颜色设置的时候,设置完之后后续的颜色都会使用当前颜色,除非重新设置。
主要函数如glColorXX

glColor3f(0.0,0.0,0.0);   //黑色

1.3、强制完成绘图

glFlush();    //并不等待绘图完成,强制命令开始
glFinish();   //也是强制刷新,但是等待硬件或者网络提示帧缓冲区绘图完成,图形进程会阻塞

一般而言glFlush够用。

1.4、坐标系统工具

无论是打开窗口,还是移动窗口或者改变窗口大小,窗口系统都会发送一个事件作为通知,如果使用GLUT,会用glutReshapeRunc(回调函数)
上一节在QT中,这个resizeGL就是这个回调函数作用。


2、点,直线,多边形

1、在opengl中任何图形都是三维空间中的坐标;
2、在图形中直线其实是线段;
3、一般多边形都是凸多边形;

2.1、填充多边形

主要代码

glBegin(XX);             //绘制开始
   glVertex2f(0.0,0.0);     //一系列的点
    ...
glEnd();                 //绘制结束

绘制图形的类型如下所示:
在这里插入图片描述
大致画出的类型对应下图:
在这里插入图片描述

在glBegin与end之间还可以用下面的函数来渲染,除此之外基本上不能使用其他oengl函数
在这里插入图片描述

3、点,直线,多边形细节刻画

1、在上面可以轻松的绘制出所需要的图形,直线绘制中可以设置直线的宽度,直线的类型;
2、多边形轮廓、实心形式等;

4、基本状态管理

opengl维护许多状态和状态变量,物体在渲染时肯恩光辉使用光照、纹理、隐藏表面消除、雾以及其他物体外观状态,默认情况大部分状态一开始不处于活动状态,打开、关闭这些状态主要用以下函数

   glEnable(GLenum capability);  //打开
   glDisable(GLenum capability);  //关闭
   GLboolean glsEnabled(GLenum capability);  //查询状态 

  //以下函数可以查询状态当前值
  void glGetBoooleanv(GLenum capability,GLboolean *params);
  ...
  

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

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

相关文章

【CELL】compass利用单细胞转录组+流平衡分析预测细胞代谢状态,促进免疫细胞代谢研究

细胞代谢调控正常细胞功能以及多种疾病状态的病理生理。最近,免疫细胞代谢研究(immunometabolism)成为一个研究热点,揭示了包括抗病毒免疫、自身免疫和抗肿瘤反应在内的炎症代谢调节。然而,由于代谢网络的规模和复杂性…

BIO、NIO、AIO理解(I/O模型)

IO模型(unix网络编程第一卷) unix有五种I/O模型,好像其他系统也差不多吧。 I/O模型主要是两个阶段:等待数据与把数据从内核空间复制到用户空间,然后根据这两个阶段的不同,分类出来下面几类I/O模型。 前四个是同步IO,最后一个是异…

高并发下你还敢用ArrayList?过来看看CopyOnWriteArrayList吧!

一、ArrayList线程不安全 在Java的集合框架中,想必大家对ArrayList肯定不陌生,单线程的情况下使用它去做一些CRUD的操作是非常方便的,先来看看这个例子: public class ListTest {public static void main(String[] args) {List&…

GIS基于智慧城市建设的作用

​​​​​智慧城市的建设对于改善居民的生活质量和提高城市的管理水平,有着公认的推动作用。其中,地理信息技术特别是GIS平台,在智慧城市的建设过程中扮演着关键角色。 在现实情况中,除了政策本身的一些因素,受限于一…

Web前端105天-day44-JSCORE

JSCORE04 目录 前言 一、复习 二、forEach 三、reduce 四、展开语法 五、解构语法 六、形参默认值 七、剩余参数 总结 前言 JSCORE04学习开始 一、复习 JS的第6个版本, 带来了大量的新特性, 新语法let/const : 两个新的声明变量的方式 新的作用域 脚本: 对应全局, 用…

RocketMQ中的线程池是如何创建的?

前言 大家好,今天主要来和大家聊一聊RocketMQ中的线程池是如何创建的,如何设置线程池数量,同时也可以从中去学习到一些线程池的实践和需要注意的一些细节。 RocketMQ在哪些地方使用到了线程池? 在RocketMQ中存在了大量的对线程…

学籍信息网站

开发工具(eclipse/idea/vscode等): 数据库(sqlite/mysql/sqlserver等): 功能模块(请用文字描述,至少200字): 学籍信息管理:添加信息、修改信息、删除信息、查询信息 添加信息,管理员根据学生的将信息导入系…

[附源码]Python计算机毕业设计高校师资管理系统Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等…

行业分析| 智慧头盔在快对讲上的应用与实践

快对讲综合调度系统是基于移动通信网络, 整合集群对讲、视频监控、实时音视频技术、PSTN、GIS定位、IM和调度业务的产品,为客户提供专业对讲、视频会议、可视化融合指挥调度等功能为一体的音视频实时交互平台。 快对讲和智慧头盔 智慧头盔,…

PHP实验室管理系统mysql数据库web结构apache计算机软件工程网页wamp

一、源码特点 PHP实验室管理系统 是一套完善的web设计系统,对理解php编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为PHP APACHE,数据库为 mysql5.0,使用php语言开发。 PHP…

第10讲:vue脚手架集成axios

一、创建项目并添加axios支持 创建项目请参考:使用脚手架创建vue项目 创建路由项目请参考:路由开发 1.1、添加axios支持 使用如下命令添加axios支持 npm install axios //vue-cli2.0安装方式1.2、在main.js中引用并使用axios 使用如下命令 impor…

git初识(三)

分支 顾名思义,分支就是从主线上分离出来进行另外的操作,而又不影响主线,主线又可以继续干它的事,,最后分支做完事后合并到主线上而分支的任务完成可以删掉了。为了不受其他开发人员的影响,你可以在主分支…

数据看板可视化

前言 这段时间一直在做可视化,在我的项目中有一部分是电力巡检的数据可视化。其中的数据看板比较简单,我将其单独抽离出来形成一个demo,为保密demo中数据非真实数据。先看效果。 具体效果 链接相关 浏览链接:http://xisite.top…

【人工智能与机器学习】——聚类(学习笔记)

📖 前言:我们之前学习的算法均是有监督学习(supervised learning),它的一个鲜明特征是通过给定的标签来学习从数据特征(如图像)到语义标签的映射关系。但在很多实际问题中,数据并没有…

vuex笔记

Vuex Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。 调试工具:vue devtools Vuex就像眼镜:您自会知道什么时候需要它。 1、state 在store中定义数据,在组件中直接使用: 目录:store/index.js export defau…

相关分析与回归分析

相关与回归分析就是了解变量之间相关关系的统计方法 一.相关分析 具有相关关系的变量之间,如果不区分原因和结果,我们称之为相关分析 相关分析是看两个因素之间的相关性,不需要确定哪个是自变量,哪个是因变量,两个因…

RK3568 GT911触摸屏调试

屏幕规格书 需要主要硬件通信电压为:1.8V或者3.3V I2C通信的地址:0x5D 和0x40 系统上电时序:不同的地址,稍微有些差异 对应代码中如下: 与RK3568的硬件接口电路 DTS 配置 驱动:RK自带的驱动程序就可以正确工…

音视频学习 -- 弱网对抗技术相关实践

背景介绍 实时音视频通话在当前的生活中是无时不刻存在的,包括社交、安防、交通等等各个方面都需要。用户场景复杂多变、要求严苛、网络环境不一致等给实时音视频通话带来很大条件。我们在这方向稍微做了一些工作,虽然和其他大厂的优化工作相比&#xf…

Commons Collections3

省流 SerialKiller 可以通过⿊名单与⽩名单的⽅式来限制反序列化时允许通过的 类,其中限制了cc1和cc2中命令执行的类,InvokerTransformer cc3就是为了绕过对其的限制,这里使用的是com.sun.org.apache.xalan.internal.xsltc.trax.TrAXFilter来…

基于改进的DBN降水预测方法(Matlab代码实现)

目录 💥1 概述 📚2 运行结果 🎉3 参考文献 👨‍💻4 Matlab代码 💥1 概述 精确高效的降水预测模型可以更好地反映未来的气候,为管理决策提供重要参考,帮助人们为未来的恶劣天气做…