计算机图形学
文章平均质量分 64
ht巷子
这个作者很懒,什么都没留下…
展开
-
OpenGL:中点直线算法
中点直线算法是通过在像素中确定与理想直线最靠近的像素来进行扫描转换的。在上图中,假设直线的斜率0≤m≤1。假设当前最近的像素已经确认为Pxkyk,由于x位最大的位移方向,因此直线在x方向上每次增加一个像素单位,而在y方向上是否增加一个像素单位,即P点的下一个点是选P1xk1yk还是P2xk1yk1,取决于两个备选像素哪一个离理想像素最近设Mxk1yk0.5位P1P2的中点,原创 2024-06-23 09:13:51 · 733 阅读 · 0 评论 -
DDA直线算法
假设给定直线段的起点坐标x0y0和终点坐标x1y1ykxb其中kx2−x1y1−y2by0−kx0DDA直线算法就是在上一个点的基础上x和y加上一个增量,求下一个点的坐标:::info由xiyi求xi1yy1的过程:当∣k∣≤1xi1xi1yi1kxi1bkxi1byib当∣。原创 2024-06-22 08:38:06 · 652 阅读 · 0 评论 -
OpenGL绘制Bezier曲线
贝塞尔曲线还可以用德卡斯特里奥算法(De Casteljau’s algorithm)递归地计算。对于给定的控制点集P0P1PnP0P1...Pn和参数tttPi0P_i^{(0)}Pi0PiP_iPiPir1−tPir−1tPi1r−1,其中r12nP_i^{(r)}=(1-t)P_i^{(r-1)} +tP_{i+1}^{(r-1)},其中r=1,2,...,nPir1−tP。原创 2024-06-18 15:59:54 · 1245 阅读 · 0 评论 -
OpenGL绘制B样条曲线
B样条曲线(B-spline curves)是一种基于样条函数(spline function)的分段多项式函数,广泛用于计算机图形学、数据拟合和数值分析中。B样条曲线有许多优点,如局部控制、平滑性和灵活性。原创 2024-06-19 11:28:53 · 1396 阅读 · 0 评论 -
OpenGL绘制Bezier曲面
贝塞尔曲面是贝塞尔曲线在二维上的扩展。它由一组控制点定义,通过这些控制点生成光滑的曲面。贝塞尔曲面通常用两个参数u和v来表示,这两个参数的取值范围都在 [0, 1] 之间。原创 2024-06-20 10:29:20 · 1036 阅读 · 0 评论 -
OpenGL超级宝典 纹理(一)
1. 创建纹理对象2. 分配纹理缓存空间3. 绑定纹理对象到OpenGL上下文,告诉OpenGL纹理的类型4. 更新纹理数据5. 控制纹理数据的读取方式 5.1 创建采样器对象 5.2 设置纹理过滤方式原创 2022-03-24 00:10:15 · 1422 阅读 · 0 评论 -
OpenGL超级宝典 统一变量(uniform variable)
统一变量就是可以一种从程序把数据传到着色器里面的数据类型。原创 2022-03-08 23:45:15 · 1038 阅读 · 0 评论 -
OpenGL超级宝典 完整渲染管线画圆
圆的画法直接上代码吧。Shader类是上一篇文章的shadervertex shader#version 450 corelayout(location = 0) in vec3 aPos;void main(){ gl_Position = vec4(aPos, 1.0);}tec shader#version 450 corelayout(vertices = 3) out;void main(){ if(gl_InvocationID == 0) { /原创 2022-03-05 11:54:56 · 660 阅读 · 0 评论 -
OpenGL超级宝典 使用缓冲为顶点着色器提供数据
1. 创建vao并且绑定过到OpenGL上下文2. 创建vbo3. 为vbo分配内存空间4. 将vbo绑定到OpenGL上5. 将vbo绑定到vao上6. 设置数据的布局和格式7. 指示vao的顶点属性应该从哪个绑定点获取数据8. 启用顶点数据原创 2022-03-05 11:44:48 · 1305 阅读 · 0 评论 -
OpenGL超级宝典 插值以及bezier曲线
插值概念bezier曲线vertex shadertesc shadertese shaderfragment shaderShader类在前面的文章中有,这里不在提源代码效果图概念插值(Interpolation)表示寻找一系列已知点之间的值的过程。穿过A点和B点的直线的公式如下:P = A + tD其中,D=(B-A)因此该公式可写成P = A + t(B - A)或 P = (1-t)A + tBGLSL中有mix()函数可以进行插值计算bezier曲线vertex shad原创 2022-03-02 00:01:05 · 929 阅读 · 0 评论 -
OpenGL超级宝典 渲染管线(四)
渲染管线渲染管线总图顶点着色器细分曲面控制着色器细分曲面引擎细分曲面评估着色器几何着色器基元装配裁剪剔除光栅化片段着色器帧缓存还有很多不懂的,所以写的很粗糙。欢迎大家提出改正。渲染管线总图顶点着色器顶点着色器作为管线的第一个阶段,它的作用其实很简单,就是接收外界输入的数据。这些数据是渲染图形必不可少的,所以说顶点着色器是管线中必需的一个阶段。并且数据可以传递到下一个着色器中。细分曲面控制着色器1.细分曲面控制着色器的数据从顶点着色器中获取,顶点着色器将数据作为输出,细分曲面控制着色器作为输原创 2022-02-28 23:13:37 · 427 阅读 · 0 评论 -
OpenGL超级宝典 渲染管线(三)
片段着色器是负责确定各片段的颜色,然后将片段发送到帧缓冲,以便合成到窗口。就是在这个阶段确定模型的颜色原创 2022-02-26 23:03:23 · 262 阅读 · 0 评论 -
OpenGL超级宝典 渲染管线(二)
细分曲面分成了三部分,首先是细分曲面控制着色器,这个着色器主要是设置细分因子,也就是细分的程度。然后是固定的细分曲面引擎,将接收到的贴片(patch)细分成点、线或者三角形最后是细分曲面评估着色器,这里进行细分算法的编写,并且输出原创 2022-02-26 10:31:54 · 408 阅读 · 0 评论 -
OpenGL超级宝典 渲染管线(一)
自己封装的Shader类(后面继续改进)shader.h#pragma once#include "sb7.h"#include <string>class Shader{public: Shader(); Shader(const std::string vertexPath, const std::string fragmentPath); //program对象使用 void use();private: GLuint program; //源代码 std原创 2022-02-24 23:07:24 · 266 阅读 · 0 评论 -
OpenGL超级宝典 绘制第一个三角形
顶点着色器#version 450void main(){ //三角形的顶点 const vec4 vertices[3] = vec4[3](vec4(0.25, -0.25, 0.5, 1.0), vec4(-0.25, -0.25, 0.5, 1.0), vec4(0.25, 0.25, 0.5, 1.0)); //gl_Vert.原创 2022-02-22 23:32:31 · 171 阅读 · 0 评论 -
OpenGL超级宝典 绘制第一个点
#include "sb7.h"#include <math.h>GLint complie_shaders(){ GLuint vertex_shader, fragment_shader, program; //顶点着色器源代码 static const char* vertex_shader_source[] = { "#version 450 \n" " \n" "void main() \n"原创 2022-02-22 23:11:00 · 175 阅读 · 0 评论 -
OpenGL超级宝典(第7版)环境配置和相关问题
资源获取资源可以去异步社区或者官网下载,自行去网上找。环境配置资源处理将资源压缩到合适的位置,注意目录中不能含有中文使用CMAKE,生成VS项目来编译glfw打开项目,分别生成Debug和Release的项目解决方案将glfw编译生成的Debug文件中的glfw3.lib文件复制到资源第一级目录下的lib文件夹中去将Debug文件夹复制过来的glfw3.lib改名为glfw_d.lib同理,将glfw编译生成的Release中的glfw3.lib复制到lib文件夹中,此时不需要原创 2022-02-22 11:39:24 · 1611 阅读 · 10 评论 -
OpenGL(可编程管线):Shader + Bezier曲面 +QT
Bezier曲面前面的博客已经介绍,本次绘制Bezier曲面使用了细分着色器直接上代码#pragma once#include <vector>#include <qopenglfunctions_4_4_core.h>#include <iostream>#include <qmatrix4x4.h>#include "Shader.h"#include <string>using namespace std;class B原创 2021-08-25 21:19:52 · 409 阅读 · 0 评论 -
OpenGL(可编程管线):Bezier曲面
Bezier曲面Bezier线de Casteljau算法Bezier曲面bezier曲面编程思想实例代码运行结果Bezier线贝塞尔曲线由一组参数方程定义,方程组中使用控制点指定特定的曲线的形状,每个控制点都是2D空间中的一个点。de Casteljau算法其中B(t)为Bernstein多项式,另外了解,这里不做解释(主要是没有深入研究…)。此图来自《计算机图形学编程(使用OpenGL和C++)》Bezier曲面Bezier曲面定义了3D空间中的曲面,从Bezier曲线拓展,需要将b原创 2021-07-23 16:23:27 · 3464 阅读 · 2 评论 -
OpenGL(可编程管线):椭球的绘制和贴图
通过构建圆形顶点,再将这些顶点组合成三角形,即可得出最后的图形。纹理坐标就是通过投影计算得出。代码构建类运行结果构建类#pragma once#include <vector>#include <glm/glm.hpp>using namespace std;class Ellipsoid{private: //顶点个数 int numVertices; //索引个数 int numIndices; //顶点 vector<glm::ve...原创 2021-07-21 22:05:49 · 394 阅读 · 1 评论 -
OpenGL(可编程管线):椭圆的绘制和贴图
和绘制圆一样的思路,八分法绘制椭圆,借助上面的参数方程,以原点为(0,0)为例,上代码:椭圆的绘制构建椭圆类代码解释运行结果情况一:长轴在x轴情况二:长轴在y轴![在这里插入图片描述](https://img-blog.csdnimg.cn/20210719221241134.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2h0X3ZJQw==,.原创 2021-07-19 22:29:24 · 1172 阅读 · 2 评论 -
OpenGL(可编程管线):使用八分法绘制圆
简单概括就是把圆分成很多份上代码:为圆创建一个类#pragma once#include <vector>#include <glm\glm.hpp>using namespace std;class Circle{private: //顶点个数 int numVertices; //索引个数 int numIndices; //存储顶点 vector<glm::vec3> vertices; //索引 vector<int&g.原创 2021-07-17 09:36:36 · 629 阅读 · 0 评论