OpenGL学习——(1)

2023-11-06

基础概念


* 刚接触OpenGL,感觉概念比较抽象,函数库也非常强大,学习起来比较吃力,本文为自己的学习笔记,主要将厚厚的课本知识进行整理,方便今后复习,同时也可以帮助其他初学者查看知识点,减少他们在学习过程中花费的时间。*

1.光栅化——实际绘制或填充每个定点之间的像素形成线段
2.2D+透视=3D
3.投影分为:平行投影(也叫正投影)和透视投影
4.OpenGL不是一种编程语言,而是一种C运行时的函数库,它是一种过程性而不  是描述性的图形API。
5.OpenGL的错误机制:
  可以在代码中执行一种偶然健全性检查,其内部保留了一组错误标志(4个),其中每个标志代表一种不同类型的错误。当一个错误发生时,与这个错误相对应的标志就会被设置。具体用法如下:
 Glenum glGetError(void);
GL_INVALID_ENUM ——枚举参数超出范围
GL_INVALID_VALUE——数值参数超出范围
GL_INVALID_OPERATION——在当前的状态中操作非法
GL_OUT_OF_MEMORY——没有足够内存来执行这条命令
GL_NO_ERROR——没有错误出现
6.状态机
 在绘制几何图形时会有许多影响因素,在OpenGL中把这些因素叫做变量并整合为一个集合称为管线的状态。状态机是一种抽象的模型,表示一组状态变量的集合。每个状态变量可以有各种不同的值,或者只能打开或关闭。OpenGL使用状态机来追踪所有状态变量。当一个状态值被设置之后,它就一直保持这个状态,直到其他函数对它进行修改为止。
 

void glEnable(GLenum capability);//打开状态机
void glDisable(GLenum capability);//关闭状态机
void glEnable(GL_DEPATH_TEST);//打开深度测试
void Disable(GL_DEPATH_TEST);//关闭深度测试
GLboolean glIsEnabled(GLenum capability);//对某个变量进行测试
//设置变量的值的四个函数
void glGetBooleanv(GLenum pname, GLboolean *params);
void glGetDoublev(GLenum pname, GLdouble *params);
void glGetFloatv(GLenum pname, GLfloat *params);
void glGetIntegerv(GLenum pname, GLint *params);
//这些变量将一直保持被设置的值

7.OpenGL的几大类库
我们在使用OpenGL之前基本上需要在运行环境的VC目录中添加一些库文件和链接库文件,这样在实际开发中才能使用OpenGL,那么在OpenGL中有哪几个重要的库呢,下面简单介绍一下(其中的API是可移植的):
 A.glut:(免费且能自行发布)用来替代AUX的一个函数库,代表OpenGL使用工具箱,其中包含了一些GUI功能。
 B.glew:是一种可以自动初始化所有心函数指针并包含所需类型定义、变量和枚举值的扩展加载库,还有用来产生和渲染3D对象的函数。
 C.GLTools:是一个比较新的库,其中封装了之前的多个库(glut,glew),还包含了用于操作矩阵和向量的3D数学库。
8.OpenGL的基本数据类型
这里写图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OpenGL学习——(1) 的相关文章

  • Glew+GLFW Win32 无依赖项 Visual Studio

    是否可以在不将文件复制到 C 的情况下构建并链接 Glew 和 GLFW 我找不到任何说明如何在不将 DLL 复制到 C 上的 Visual Studio 目录的情况下使用这些库的文档 我只想包含项目目录中所需的所有 dll 和 lib 文
  • gldrawarrays 不绘制任何东西

    我正在尝试用 VBO 绘制一个三角形 我在窗口上没有看到任何像素 我也没有看到任何 GL ERROR 这是我尝试运行的代码 include
  • 即使手动设置显示环境变量后,WSL Ubuntu 也会显示“错误:无法打开显示”

    我在 WSL Ubuntu 上使用 g 我使用 git 克隆了 GLFW 存储库 使用了ccmake命令配置并生成二进制文件 然后使用make在 build 目录中最终创建 a文件 我安装了所有OpenGL相关的库 usr ld 我不记得我
  • 如何使用边缘和内部镶嵌因子完成三角形面片镶嵌?

    I am just learning tessellation and i came across with below example for triangle patch tessellation but i am not sure h
  • 更改 GLUT 调用以与 MFC/C++ 一起使用

    我有一个使用 GLUT 进行 OpenGL 渲染的程序 现在我需要它位于 MFC 项目内部 以便它可以与另一个程序组件一起使用 我已经按照这个教程进行操作 http www codeguru com cpp g m opengl openf
  • SSBO 是更大的 UBO?

    我目前正在 OpenGL 4 3 中使用 UBO 进行渲染 以将所有常量数据存储在 GPU 上 诸如材料描述 矩阵等内容 它可以工作 但是 UBO 的小尺寸 我的实现为 64kB 迫使我多次切换缓冲区 减慢渲染速度 我正在寻找类似的方法来存
  • 用于新 Windows 游戏项目的 OpenGL 或 Direct3D?或者是其他东西?

    我正在 Windows 上启动一个爱好游戏项目 该项目将大量使用 3D 图形效果 它很可能是用 C 编写的 我应该使用 OpenGL 还是 Direct3D 作为我的图形后端 为什么 或者我应该使用现成的图形引擎 例如OGRE 3D htt
  • OpenGL:如何检查用户是否支持glGenBuffers()?

    我检查了文档 它说 OpenGL 版本必须至少为 1 5 才能制作glGenBuffers 工作 用户使用的是1 5版本但是函数调用会导致崩溃 这是文档中的错误 还是用户的驱动程序问题 我正在用这个glGenBuffers 对于VBO 我如
  • 如何在不使用 Kinect SDK 函数的情况下将深度空间中的点转换为 Kinect 中的颜色空间?

    我正在做一个增强现实应用程序 将 3D 对象叠加在用户的彩色视频之上 使用 Kinect 1 7 版本 虚拟对象的渲染在 OpenGL 中完成 我已经成功地在深度视频上叠加了 3D 对象 只需使用 NuiSensor h 标头中深度相机的固
  • 纹理映射 C++ OpenGL

    我已经阅读了相关内容 包括 Nehe 和此处的解决方案 但我找不到具体的答案 我正在尝试加载一张名为stars jpg 的照片 我想通过使用 uv 坐标映射它来使其成为场景的背景 方法是 glBegin GL QUADS glTexCoor
  • 使用 glGetFloatv 检索 pyglet 中的模型视图矩阵

    我正在使用 pyglet 在 python 中进行 3D 可视化 并且需要检索模型视图和投影矩阵来进行一些选择 我使用以下方式定义我的窗口 from pyglet gl import from pyglet window import wi
  • 移动/调整大小期间 opengl 窗口冻结

    我正在使用 LWJGL 开发游戏 移动窗口时 计划将来添加调整大小代码 渲染循环冻结 我希望它在移动时继续以某种方式运行 LWJGL 不包括 glutMainLoop Display属于OpenGL 而不是Java 相关代码 regular
  • Opengl 视频纹理

    我正在使用 Visual Studio 10 在 Windows 上用 C 开发 opengl 应用程序 目前我在立方体上使用静态纹理 但我想集成视频纹理 你知道我可以使用哪个库来打开和解密视频吗 查看 ffmpeg libavformat
  • 为什么我的 CAOpenGLLayer 更新速度比之前的 NSOpenGLView 慢?

    我有一个在 Mac OS X 上渲染 OpenGL 内容的应用程序 最初它渲染到 NSOpenGLView 然后我将其更改为渲染到 CAOpenGLLayer 子类 当我这样做时 我看到了巨大的性能损失 帧速率减半 鼠标响应能力降低 卡顿
  • 渲染缓冲区大于窗口大小 - OpenGL

    我正在尝试绘制大于屏幕尺寸 即 320x480 的渲染缓冲区 512x512 执行 glReadPixels 后 图像看起来是正确的 除非图像的尺寸超过了屏幕尺寸 在本例中 超过了水平 320 和垂直 480 是什么原因导致这种异常现象呢
  • 实例着色器矩阵的设置

    我想绘制实例立方体 我可以打电话GL DrawArraysInstanced PrimitiveType Triangles 0 36 2 成功地 我的问题是所有立方体都绘制在相同的位置和相同的旋转 我如何为每个立方体单独更改它 要创建不同
  • 在 OpenGL 中实例化数百万个对象:提高每秒帧数

    我的最终目标是以 60 fps 渲染 100 万个不同尺寸和颜色的球体 我也希望能够在屏幕上移动相机 我已经修改了代码我正在学习的教程的这一页 http learnopengl com Advanced OpenGL Instancing尝
  • 创建并使用我自己的纹理图集的 mipmap

    我目前正在使用自动 mipmap 生成 C OpenTK GL GenerateMipmap GenerateMipmapTarget Texture2D 我使用的纹理平铺为 16px 的块 所以我的问题是 是否可以使用不会缩小至 1x1
  • 如何为 glDrawElements() 指定每个图元的颜色

    我想渲染一个索引几何体 所以 我有一堆顶点和关联的排序索引 我在用glDrawElements 渲染 2 个四边形 如下所示 现在 我知道我可以使用glColorPointer 用于指定每个顶点的颜色 我的问题是 我可以指定吗每个基元的颜色
  • 渲染到一个颜色通道而不影响其他通道

    使用 OpenGL 任何版本 如何通过一次仅影响一个颜色通道来渲染到帧缓冲区对象 例如 我的帧缓冲区对象具有 GL BGRA 布局 现在我想执行一些渲染命令 这些命令应该只改变红色通道 因此 如果片段用颜色 204 0 0 0 渲染并且像素

随机推荐

  • 攻防世界:command_execution

    首先掌握命令执行漏洞 Command Execution 的知识 命令执行漏洞即使用者可以直接在Web应用中执行系统命令 从而获取敏感信息或者拿下shell权限 其造成的原因是Web服务器对用户输入命令安全检测不足 比如没加waf 导致恶意
  • matlab 指定坐标轴,matlab设置坐标轴范围

    设置x轴和y轴为想要的显示范围 可以使用set函数 以x轴的显示范围为0到10 y轴的显示范围为90到101为例 设置x轴范围和刻度 set gca XLim 0 10 X轴的数据显示范围 set gca XTick 0 1 10 设置要显
  • Flutter键盘遮挡输入框问题

    以下代码是在网上看到的 忘记具体的出处了 请谅解 作者 Created by H on 2019 1 23 11 08 介绍 解决输入框被遮挡问题 import package flutter material dart import pa
  • C++面向对象设计原则学习笔记

    原则一 依赖倒置原则 DIP 高层模块 稳定 不应该依赖于底层模块 变化 二者都应该依赖于抽象 稳定 抽象 稳定 不应该依赖于实现细节 变化 实现细节应该依赖于抽象 稳定 原则二 开放封闭原则 OCP 对外扩展开放 对更改封闭 类模块应该是
  • 取模!了解一下!

    嘤嘤嘤 快速幂取模都不会了 自闭了 取模运算 Modulo Operation 和取余运算 Complementation 两个概念有重叠的部分但又不完全一致 主要的区别在于对负整数进行除法运算时操作不同 取模主要是用于计算机术语中 取余则
  • 面向对象-继承

    继承 概念 继承父类的属性和行为 使得子类对象可以直接具有与父类相同的属性 相同的行为 子类可以直接访问父类中的非私有的属性和行为 继承是多态的前提 如果没有继承 就没有多态 特点 java只能单继承 但可以多层继承 a继承b b继承c 那
  • kafkatemplate无法注入_Spring Boot和Kafka实战自定义复杂配置示例

    这篇博客文章展示了如何配置Spring Kafka和Spring Boot以使用JSON发送消息并以多种格式接收它们 JSON 纯字符串或字节数组 基于此配置 您还可以将Kafka生成器从发送JSON切换到其他序列化方法 此示例应用程序还演
  • RabbitMQ--基础--10.4--优先级队列

    RabbitMQ 基础 10 4 优先级队列 1 优先级队列 指的是 具有高优先级的队列 优先级高的消息具备优先被消费的特权 可以通过 设置 x max priority 来设置 优先级队列 如果在消费者的消费速度远大于生产者的速度 且 B
  • 机票预订系统uml类图_产品经理必学UML(二):用例图

    上一篇中介绍了UML中的类图 本篇笔者将与大家介绍UML中的用例图的三个方面内容 用例 Use Case 参与者 Actor 参与者 用例之间的关系 用例图 Use Case Diagrame 描述了人们希望如何使用一个系统 将相关用户 用
  • java listnode 合并链表_java实现两个有序单链表合并

    本次分享的事两个有序单链表的合并 遍历方法递归 非递归 节点类 auther lawt date 2018 11 4 08 Description 结点信息 public class Node 为了方便 这两个变量都使用public 而不用
  • ESP8266如何使用u8g2(I2C)驱动SH1106的OLED

    u8g2是一款单色图形库 非常适合12864之类的显示屏 基本上支持了市面上的主流显示控制器 可是偏偏对SH1106不是那么友好 使用起来不是很方便 打开IDE的示例程序可以看到对SH1106列出来的几乎都SPI通信方式 仅仅只有一条是使用
  • Collection集合类和Map接口各实现类详解

    Java的集合类 collection接口和Map 一 集合概述 集合 集合是java中提供的一种容器 可以用来存储多个数据 集合和数组既然都是容器 它们有啥区别呢 数组的长度是固定的 集合的长度是可变的 数组中存储的是同一类型的元素 可以
  • RHEL 6.1 KVM虚拟机桥接物理机网络

    RHEL6 1 KVM虚拟机桥接物理机网络 一 KVM默认网络配置 1 kvm上网有两种配置 a NAT 支持主机与虚拟机的互访 也支持虚拟机访问互联网 但不支持外界访问虚拟机 b bridge 桥接 可以使用虚拟机成为网络中具有独立IP的
  • python进程简单操作

    1 用进程实现类似定时器的功能 import multiprocessing import time def clock interval while True print The time is 0 format time ctime t
  • java创建线程的四种方式

    1 继承Thread类创建线程 如图所示 继承Thread类 class Aclass extends Thread 输出100以内的偶数 Override public void run for int i 1 i lt 100 i Sy
  • DINO学习笔记

    DINO学习笔记 DINO DETR with Improved DeNoising Anchor Boxes for End to End Object Detection Abstract 我们提出了DINO DETR with Imp
  • ctfshow web11详解,小白补充session和PHPSESSID相关知识

    删除cookie中存储的PHPSESSID 删除PHPSESSID的值后 空密码即可登录了 这里有个误区 刚开始的我对session的知识点了解很少 我甚至觉得直接把PHPSESSID的值当作密码的值就满足 password SESSION
  • Qt入门-QLabel类

    QLabel是QT界面中的标签类 它从QFrame下继承 class Q GUI EXPORT QLabel public QFrame Q OBJECT 定义一个QLable类 QLabel label new QLabel this 设
  • PTA 乙级——1029 旧键盘 C++实现

    旧键盘上坏了几个键 于是在敲一段文字的时候 对应的字符就不会出现 现在给出应该输入的一段文字 以及实际被输入的文字 请你列出肯定坏掉的那些键 输入格式 输入在 2 行中分别给出应该输入的文字 以及实际被输入的文字 每段文字是不超过 80 个
  • OpenGL学习——(1)

    基础概念 刚接触OpenGL 感觉概念比较抽象 函数库也非常强大 学习起来比较吃力 本文为自己的学习笔记 主要将厚厚的课本知识进行整理 方便今后复习 同时也可以帮助其他初学者查看知识点 减少他们在学习过程中花费的时间 1 光栅化 实际绘制或