![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
opengl
DBBH
成都有合适webgl/webgpu岗位的请私信我
展开
-
mipmap学习记录之如何确定LOD Level
都知道mipmap是图片LOD,但是这LOD的级别判定是怎么定的呢?这里就要说一个函数了,求相邻像素的内容的变化率对,内容的变化率,你的颜色可以代表很多含义dFdx dFdy求x+1和y+1的像素和当前像素的差别然后如果一张图片,我们要采样,是不是传入的参数是uv,texture如果函数内部做了这么个操作float dx=dFdx(uv) float dy=dFdy(uv)这样就得到了UV的变化率,很明显嘛 如果一个图片离你很远,两个像素uv跨度直接1了,很近就0.000x这种的,于是就可以原创 2022-04-01 19:54:22 · 1520 阅读 · 0 评论 -
OpenGL API学习记录 glBlitFramebuffer
glBlitFramebuffer将FBO中指定的东西copy到指定地方去 配合bind函数使用 下面例子拷贝的颜色缓存glBindFramebuffer(GL_READ_FRAMEBUFFER, framebuffer);glBindFramebuffer(GL_DRAW_FRAMEBUFFER, intermediateFBO);glBlitFramebuffer(0, 0, S...原创 2020-02-22 09:45:02 · 7747 阅读 · 0 评论 -
OpenGL API学习记录glMapBuffer
除了glBufferSubData还有MapBuffer这种方式来修改数据float data[] = { 0.5f, 1.0f, -0.35f ...};glBindBuffer(GL_ARRAY_BUFFER, buffer);// 获取指针void *ptr = glMapBuffer(GL_ARRAY_BUFFER, GL_WRITE_ONLY);// 复制数据到内...原创 2020-02-15 21:26:08 · 1037 阅读 · 0 评论 -
OpenGL API学习记录glBufferData glBuferSubData glBindBufferRange
glBufferDataglBufferSubDataglBindBufferRange第一个参数为target buffer第二个这个是把buffer的内容进行修改第三个有点像malloc但这个是UBO学到的 先设定好第二个参数index 是block块的绑定点第三个参数就是绑定点这个是每个program都要绑定一次然后第三个API的第二个参数就绑定同一个点,再...原创 2020-02-12 16:37:41 · 1085 阅读 · 0 评论 -
OpenGL三点求圆心
这是大佬的出处https://blog.csdn.net/yanmy2012/article/details/8111600思路先手一个平面方程三个点到圆心距离相等 三个方程3-1 2-1联立构造构成这样的矩阵 D移到右边xyz就变为半径就...原创 2020-01-17 09:09:53 · 278 阅读 · 0 评论 -
图形学数据结构 half-edge
这个东西,看了之后 只有一个感觉WC你看了之后,很可能会感觉俺也一样这是https://www.flipcode.com/archives/The_Half-Edge_Data_Structure.shtml介绍是用来精细化网格和简化网格用得上的不同的拓扑形状你还要考虑一下是否好使看看人家的点 装的是起点是vert的边和起点xyz人家的边 装的是终点vert然后边...原创 2019-12-16 17:03:30 · 549 阅读 · 1 评论 -
OpenGL 视锥体求法
看了这个https://blog.csdn.net/qq_31709249/article/details/80175119是高手讲的是假设P是空间的一点(x,y,z)写成vec4(x,y,z,1) 最终[-1,1]的时候P2(x1/w1,y1/w1,z1/w1,1)然后proj*viewModelMatrix之后 第一行是abcd 第四行是efgh 那么a*x+b*y+c*z+d=x1 ...原创 2019-11-26 09:31:00 · 871 阅读 · 0 评论 -
glsl中 矩阵和向量的一些常见用法
http://en.wikibooks.org/wiki/GLSL_Programming/Applying_Matrix_Transformations原创 2019-07-29 10:46:56 · 1142 阅读 · 0 评论 -
OpenGL 模板缓冲stencil
glEnable(GL_DEPTH_TEST);glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); glStencilMask(0x00); // 记得保证我们在绘制地板的时候不会更新模板缓冲nor...原创 2019-03-27 17:46:56 · 432 阅读 · 0 评论 -
PBR 环境光的diffuse部分学习
看的是learnopengl的教程这一部分,讲的就是步骤1 把一张hdr读进去 然后拆给cubeMap1 步骤2 把cubeMap1卷积了 弄出一张irradianceMap步骤3 ambient部分就可以用反射光线采样irradianceMap这样就有了diffuse部分了直接光部分还是之前教程中的样子unsigned int captureFBO; uns...原创 2019-02-22 09:30:03 · 803 阅读 · 0 评论 -
又学一次透视投影
https://blog.csdn.net/wangdingqiaoit/article/details/51589825转来的 内容看看吧 对比之前转了一个 这个好像。。正确一点 区别是z这个好像方向才是对的转载 2019-01-03 12:39:54 · 160 阅读 · 0 评论 -
OpenGL学习 延迟着色 Deferred Shading
这个操作看了看介绍是为了减少正向渲染(就是一个模型完了再渲染下一个)的开销介绍正向渲染(Forward Rendering)或者正向着色法(Forward Shading),在场景中我们根据所有光源照亮一个物体,之后再渲染下一个物体,以此类推。它非常容易理解,也很容易实现,但是同时它对程序性能的影响也很大,因为对于每一个需要渲染的物体,程序都要对每一个光源每一个需要渲染的片段进行迭代,这是...原创 2018-10-24 11:24:43 · 592 阅读 · 0 评论 -
Opengl HDR
HDR是为了解决颜色被限制在0-1之间 让亮的更亮 暗的更暗需要浮点帧缓冲 glBindTexture(GL_TEXTURE_2D, colorBuffer);glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB16F, SCR_WIDTH, SCR_HEIGHT, 0, GL_RGB, GL_FLOAT, NULL);GL_RGB16F这个需要注意但是...原创 2018-08-02 12:27:27 · 303 阅读 · 0 评论 -
opengl摄像机类
这大概就是一个摄像机的打开方式了enum Camera_Movement {//这个标识行动方向FORWARD,BACKWARD,LEFT,RIGHT};const float YAW = -90.0f;//初始值 偏航的参数 速度 鼠标灵敏度 控制缩放const float PITCH = 0.0f;const float SPEED = 2.原创 2017-12-28 16:47:22 · 415 阅读 · 0 评论 -
OpenGL Shader类
过程就是读代码 加载代码 编译代码 检查错误 关联 然后创建Program Link 检查 Shader::Shader(const char*v,const char*f)//这里是shader文件的名字路径{ //1处理顶点着色器 2处理片段着色器std::string s1, s2;std::ifstream f1, f2;f1.exceptions原创 2018-01-05 10:42:27 · 507 阅读 · 0 评论 -
OpenGL绘制球
有俩角度 a 是球面点与z轴正方向夹角 另一个是b 是连线在xy这个面的投影与x正轴夹角 R作为球半径每个点的xyz z很好看出来 就是R*cosa R*sina得到在xy平面投影 还需要带入b夹角 b [-180=>180],x=R*sina*cosb; ...原创 2018-04-18 14:49:47 · 1253 阅读 · 0 评论 -
QT FBO
QOenGLFrameBufferObject这个要在initializeOpenGLFunctions()这之后才行framebuffer=new QOpenGLFramebufferObject(w,h, QOpenGLFramebufferObject::Depth);这个framebuffer->bind();release();void MainWidget::paintGL(){...原创 2018-05-21 14:06:45 · 1024 阅读 · 0 评论 -
QT OpenGL blinnphong
就是normalize(eyedir+lightdir)求一个halfwaydireyedir=eyepos-fragpos lightdir=lightpos-fragpos fragpos=a_position*modelpow(max( dot(eyedir,halfwaydir),0) ,material.shininess)=specspecular = light.specular...原创 2018-05-15 10:02:51 · 215 阅读 · 0 评论 -
QT 天空盒倒过来的问题
QMatrix &QMatrix::rotate(qreal degrees)Rotates the coordinate system the given degrees counterclockwise.Note that if you apply a QMatrix to a point defined in widget coordinates, the direction of ...原创 2018-06-02 21:40:26 · 383 阅读 · 0 评论 -
QT OpenGL 天空盒
正常加载shader program 就是图片不一样了 立方体贴图 可以看看learnopenglQT里面封装了QOpenGLTexture这个类设置target就可以加载立方体贴图initTextures(){ const QImage posx = QImage(":/left.jpg").mirrored().convertToFormat(QImage::Format_RGB...原创 2018-05-27 15:37:39 · 876 阅读 · 2 评论 -
OpenGL 鼠标位置转换世界坐标系 射线实现方法
[-1 -- 1]mousex [1 -- -1]mousey裁剪坐标系全是 1 -1 直接就z=1 x=2*mousex/winWidth-1; y=1-2*mousey/winHeightvec4 posNDS(x,y,z,1.0) 然后本身是MVP得到的pro的逆矩阵*posNDS一下得到视觉坐标系 再view的逆矩阵*一下 得到世界坐标系然后全部/W 这里W是1 相机位置搭配这...原创 2018-05-30 18:22:07 · 1355 阅读 · 0 评论 -
OpenGl体验几何着色器
首先需要有带法线的模型 learnOpenGL里面的shader("vert","frag","geomery"); shader跟顶点着色器和片段着色器写法差不多然后进入顶点着色器out VS_OUT{vec3 normal;}vs_out;aNormal是读进来的layout需要一个矩阵m来纠正法线mat3(transpose(inverse(view*model)));vs_out.nor...原创 2018-07-13 12:33:53 · 326 阅读 · 0 评论 -
OpenGl阴影
先使用FBO装一个深度贴图 此处要先将镜头移到光源 然后保存深度 这时候z值保存的是最近可见的片元的深度值,这里是重点。按原始场景来 每个片元 转到光源坐标系下面进行透视除法,然后看看深度是否大于阴影贴图的 大于则在阴影中。vec3 projCoords = fragPosLightSpace.xyz / fragPosLightSpace.w;curD=projCoords.zm...原创 2018-08-09 17:46:40 · 570 阅读 · 2 评论 -
搭建opengl GLFW GLAD环境
win7+VS2013环境下面GLFW 下面是弄好的包的下载http://download.csdn.net/download/qq_35158695/10156577你建一个空项目然后在VS里面打开项目文件夹,把include+lib解压出来的两个文件夹都放进去然后在属性VC++目录里面包含目录加上这个include的路径 库目录加上lib2012的路径。然后在属性链接原创 2017-12-13 13:20:52 · 1023 阅读 · 0 评论