摘要:1. VBO 的 target 是 GL_ARRAY_BUFFER 不是 GL_VERTEX_BUFFER 2. glUniform()用来给uniform传变量 别用成 glProgramUniform() 3. 下载个 vs2019 的 glsl 高亮插件!就在vs的扩展里能搜到!不然太痛苦了!
阅读全文
随笔分类 - Opengl Core Profile
摘要:1. 如果没有 M 变换、也就是模型坐标系不能变换到世界坐标系、那么: 假设在blender里建立一个模型: 假设还有另外一个模型: 不进行模型到世界坐标系的变换、那么最终的结果看起来就是这样: M变换、说白了就是把模型放到场景的合适的位置上(通过平移,旋转、缩放的手段)、如果不进行这一步,那么一切
阅读全文
摘要:
首先上结果(不会在博客园传视频、具体流程是鼠标点击屏幕上的任意一个点、向此处投射一条射线): 实现的方法: 首先认清楚什么是一条射线、由于我们不是真的要画一条无限长度的线、那么用线段的起始和终止(当然是在世界坐标系里的起点和终点)就能代表这条射线、具体的shader可以用基本的MVPshader。
阅读全文

摘要:1. 通读 glfw3.h 、先不看注释、只看API、 认清楚这个库总共有哪些功能(差不多20 min)就可以解决 2. 去官网文档: 比方说、我想实现鼠标点击窗口的时候、把鼠标的坐标打印出来(当然你也可以记录下来、后面进行一些算法) 我可以查询文档:GLFW: Input guide 3. 实践出
阅读全文
摘要:首先、 glfw3.h 大概有5800行、但去掉所有注释估计也就不到1000行。 其实不用我去分析、人家的注释写的很清楚了。 差不多就三部分内容: 定义一些状态、错误码 定义一些函数指针(这是为了可以传函数进去回调)、和结构体: 定义一堆设置窗口状态的函数 其实慢慢看都没什么难的!源码面前了无秘密、
阅读全文
摘要:直接把 opengl 理解成 STL、QT 之类的东西就OK了 你想做字符串操作、想有一个容器...那就可以调 STL 你想显示输入框、窗口、进度条、按钮、那就用QT 你想画三角形、贴图、进行光照效果的计算、那就用Opengl和GLSL 别想多了。。 其实类比起来、那么理解透彻 springboot
阅读全文
摘要:vbo 就是一个一维数组、一般是 GLfloat 类型的数组 数组的内容怎么去解释? 用 glVertexAttribPointer ebo 也是一个一维数组、不过是 GLuint 的数组(显然索引一般没有负数的) 如果 vbo是: [ p1x p1y p1z p2x p2y p2z .... p?
阅读全文
摘要:
运行结果: (圆锥面) (抛物面) (马鞍面) 其中的做法是:从顶部看上去就是一个平面网格、每个点的 z、x的位置都是程序细分出来的(指定起始、结束、步长)、比较固定、但高度 y 的计算使用 用户指定的函数去计算 把每个顶点的信息传入 vbo、再计算出每个三角面片的索引号、传入ebo、最后glDra
阅读全文

摘要:vbo的作用就是简单的把内存数据导到gpu 这些数据的格式(计算机怎么可能知道你传的一堆float怎么解析?)的解释方法用VertexAttribPointer进行说明(说明的是当前处于bind状态的vbo) 这一堆的配置、如果是在 bind了一个vao的情况下完成的、这个vao就默默记录了这些配置
阅读全文
摘要:首先拿到一个LearnOpenGL的基本工程(glfw+glad) glad可以说是去在运行时查询函数地址用的: 如果我们想调用 glGenBuffers() 、就要先查出 glGenBuffers的地址(如下图) 为什么要查询地址呢?其实1.1之后的新函数都在驱动中、所以要去查询函数的地址! 参看
阅读全文
摘要:和 linux 中的文件描述符一样地去理解、可以用整数去指代 输入输出流、文件、设备 那就同样可以用整数去代表一个VAO、VBO 差不多就是这个原理。 opengl的 workflow、差不多就是: 先 gen 一个整数 bind 这个整数到状态机 设置一些状态 取消 bind、以备后用、此时这个“
阅读全文
摘要:固定流水线 = 立即模式(immediate profile) 可编程模式 = 核心模式(core profile) Opengl 3.2 以后、立即模式(或者说是固定管线)被废弃、意味着glVertex__()这种函数都不应该用了! LearnOpengl 给出的教程是 3.3版本 OpenGL
阅读全文
摘要:1 : glad + glfw 需要glad的h文件、c文件(这个没有 dll 或者 lib! 需要glfw的h文件、lib文件、(如果是用的glfw3.lib、那么不需要dll文件、否则用glfw3dll.lib 需要配合dll) 2: glew+glfw 需要glew的h文件、lib、dll文件
阅读全文
摘要:链接:https://pan.baidu.com/s/1npPIlNkfnCjBqRSxMbexdw 提取码:fbd2 --来自百度网盘超级会员V4的分享
阅读全文
摘要:关键的向量运算:求两个点连线上的中点: 其实高中的向量就学过、两个向量加起来是平行四边形的对角线、那么其实数乘 1/2 就能得到中点了! 代码如下: 1 #pragma once 2 #include"Math.h" 3 #include"Shader.h" 4 #include<glew.h> 5
阅读全文
摘要:向量乘矩阵、如果向量在左边、向量看成是 行向量 | 1 2 2 | 【1 3 4】 * | 3 5 2 | = 【14 25 28 】 | 1 2 3 | 如果向量在右边、向量看成是列向量 向量 * 向量是分量简单相乘、结果是向量
阅读全文
摘要:在一个真实的建模过程中、可能一个模型的几个顶点有很大的数值坐标、 如(100,200,300)(200,300,100)。。。 但是、最后想显示在opengl的窗口内、就必须规范化到 x ,y ∈【-1,1】,z ∈【-1,1】上 但这个区间的点显示在屏幕上、还需要隐含的变化、也就是转换成【像素坐标
阅读全文
摘要:1. GL_LINES vs GL_LINE? 在 glDrawArray()时、指定的类型都是加复数的!!比如: TRIANGLES, LINES, POINTS, 当然写 POINT之类的也能通过编译、但其实是画不出东西的。 正确写法: 错误写法: 注意一点、在核心模式下不使用 glVertex
阅读全文
摘要:如题: 在 glVertexAttributePointer 中、会进行 stride 的指定: 这里可能写成:GL_FLOAT,编译和运行都不报错、但程序就是没结果! 注意 GLfloat 才是一个类型、而GL_FLOAT是一个数字宏!!两者是完全不一样的。
阅读全文