欢迎来到小面包的小站🥝
opengl加入摄像机移动
摄像头移动 基本原理 通过 lookAt 函数实现: 传入 摄像机位置 传入 物体位置 传入 向上的分量 lookAt(cameraPos, targetPos, upVector) 键盘控制 注册键盘按压事件 支持多键同时移动(如同时向左和前) 使用 集合(Set) 存储 当前按下的按键 通过 定时器 定期对 Set 内的按键执行移动逻辑
整理的一点网络方面的八股文
网络(自行整理,交由大模型写成markdown) TCP 的粘包和拆包 粘包:多个数据包在接收时合并成一个包 拆包:一个数据包被分成多个包接收 原因: TCP 是面向字节流的协议,不关心数据边界,发送方可以随意发送 拆包是因为网络传输有 MTU(最大传输单元),不能一次发送太大的包 解决办法: 使用 定长消息(双方固定读取) 添加 消息分隔符(双方约定好) 使用 消息头(标明包的长度) 三次握手 发起方发送 SYN 服务器回复 SYN + ACK 发起方回复 ACK TCP 初始序列号 ISN 如何取值? 以 时间戳 为基础生成,超过 2^32 会回到 0 加入一些 随机值 防止被猜到 TCP 三次握手时,客户端发送 SYN 之后宕机了会怎样? 服务器会正常发送 SYN + ACK,但对方无响应 服务器会 重试多次,若仍无回复则 主动断开 重试次数 由 tcp_synack_retries 参数决定 SYN Flood / DDoS 攻击 攻击方式:客户端不断发送 SYN(第一次握手),但不进行第三次握手,导致服务器资源耗尽 防御方法: SYN Cook ...
加入旋转
纹理映射与旋转 1. 纹理映射 在 OpenGL 中,可以使用 sampler2D 进行 2D 纹理采样: 1uniform sampler2D ourTexture; 该变量用于在片元着色器中获取 2D 纹理的像素值。 2. 加入纹理过滤与旋转 步骤 1:转换为立方体 矩形 -> 立方体:原始矩形的顶点坐标扩展为 24 个顶点,以适应立方体的六个面。 每个面使用四个顶点,并绑定对应的纹理坐标。 示例顶点数据(包含位置和纹理坐标): 12345678GLfloat vertices[] = { // 位置 // 纹理坐标 -0.5f, -0.5f, -0.5f, 0.0f, 0.0f, 0.5f, -0.5f, -0.5f, 1.0f, 0.0f, 0.5f, 0.5f, -0.5f, 1.0f, 1.0f, -0.5f, 0.5f, -0.5f, 0.0f, 1.0f, // 其余五个面省略...}; 步骤 2:应用纹理过滤 为了提升渲染质量,可以使用 线性过滤: ...
关于opengl使用的小心得
OpenGL 基础概念 VBO(数组缓冲对象) 用于存储顶点数据,如位置、颜色、法线、纹理坐标等。 作用是直接把数组存到 GPU 的缓存中,提高渲染效率。 IBO/EBO(索引缓冲对象) 用于存储索引数据,避免重复存储相同的顶点数据,提高渲染效率。 需要使用 create / bind / allocate 进行管理。 VAO(顶点数组对象) 作为管理者,记录 VBO 和 IBO 的绑定状态。 不需要在每次绘制时重新设置,可在不同 VAO 之间切换,以便绘制不同的对象。 只有 create 和 bind 操作(用于成为管理者)。 顶点属性指针 用于告诉 OpenGL 顶点数据的格式,包括: 每个顶点有多少数据(如每个顶点包含多少个属性)。 每个属性占用多少个 GLFloat。 该属性在 VBO 中的位置。 示例代码: 12345678shaderProgram.enableAttributeArray(0); // 启用顶点位置属性,对应顶点着色器中的 layout (location = 0)shaderProgram.setAttributeBuffer(0, ...
使用vcxxrv来配合wsl做图形化界面
12345678910111213# 使用 VcXsrv 给 WSL2 连接图形界面## 1. 下载 VcXsrv 首先,从官网下载安装 VcXsrv: [https://sourceforge.net/projects/vcxsrv/](https://sourceforge.net/projects/vcxsrv/) ## 2. 更换源 执行以下命令更换源:```bashwget https://tuna.moe/oh-my-tuna/oh-my-tuna.pysudo python3 oh-my-tuna.py --globalsudo apt-get updatesudo apt-get upgrade 3. 安装所需软件 安装 xfce4-terminal 和 xfce4: 12sudo apt-get install xfce4-terminalsudo apt-get install xfce4 重启 dbus 服务: 1sudo service dbus restart 4. 配置环境变量 编辑 ~/.bashrc: 1vim ~/.bashrc 添加以下内容( ...
SFINAE在c++模板中的使用及标准库中的应用
代换失败不是错误(SFINAE) 概念 SFINAE(Substitution Failure Is Not An Error)意为代换失败不是错误,这是 C++ 模板机制中的一个重要特性。 核心思想: 当模板参数推导失败时,编译器不会报错,而是会尝试匹配其他可能的函数或模板。因此,它可以避免不合理的模板实例化,防止不该匹配的类型被错误实例化。 PS:非常非常重要! 代换失败的规则 任何导致代换的模板实参不符合 C++ 语法(即非良构)的情况,都会导致代换失败,而不会引发编译错误。 PS:非良构表示不符合 C++ 的基本语法。 SFINAE 的具体使用 通常,即使不使用 SFINAE,C++ 也会在模板实例化后报错。但 SFINAE 的关键在于: ✅ SFINAE 使得错误发生在实例化前,而非实例化后。 ✅ 能不实例化就不要实例化,因为某些模板实例化后可能产生难以理解的错误信息。 ✅ 使用 SFINAE,错误信息会变得更简单,比如 “未找到匹配的重载函数”。 ✅ 模板实例化本身是有开销的,尤其对于复杂模板而言,实例化可能带来较大编译成本。 标准库中的 SFINAE —— ena ...
颜色与光照和冯氏光源
颜色与光源 冯氏光照 在顶点着色器(vertex shader)中实现冯氏光照会导致较差的效果,而在片元着色器(fragment shader)中实现,尽管计算成本较高,但能获得更好的渲染结果。
opengl的摄像机相关
摄像机 原本应该是先旋转再位移。 顺时针旋转 注意:改成 -sin 就会变成顺时针旋转。 左右移动 给摄像机加入左右移动的功能。 封装成 Camera 类 这些功能都可以封装成一个 Camera 类。
opengl的缩放/位移/旋转和坐标系统
详细介绍OpenGL中的基础变换操作,包括缩放、位移、旋转,以及坐标系统的概念和应用
opengl的纹理映射和纹理过滤
纹理映射 使用 QOpenGLTexture 导入图片 可以使用 Qt 封装的 QOpenGLTexture 来导入图片等纹理资源。 纹理单元 OpenGL 保证有 16 个纹理单元,这意味着最多可以绑定 16 个纹理。 纹理过滤 OpenGL 需要知道如何将纹理像素映射到纹理坐标。常见的纹理过滤方式包括: 就近值过滤:取纹理坐标附近最近的像素值。 融合过滤:将周边像素进行融合,产生更平滑的过渡。 多级渐远纹理(Mipmap) OpenGL 还提供了多级渐远纹理(Mipmap),用于对远处的纹理进行低分辨率渲染,而对近处的纹理进行高分辨率渲染,从而优化性能并提高视觉效果。
opengl给顶点数据增加更多属性
给顶点数据中添加更多属性
layout和Uniform
Layout 和 Uniform Layout 顶点着色器接收的输入是比较特殊的,不是从流水线其他步骤传下来的。 使用 layout (location=?) 可以使得在 CPU 上配置顶点属性。如果省略,默认会从 0 开始。 在 GLSL 中配置的数据是怎样的,C++ 文件中也需要使用相同的数字才能成功渲染。 Uniform uniform 是用于 CPU 向 GPU 中的着色器发送数据的方式。 uniform 是一种全局数据,可以被任意着色器程序在任意阶段访问。 可以在程序中定时更改参数,使得着色器定时从 CPU 中获取这些参数,进而重新绘制,从而实现闪烁等效果。
avatar
🐟认真摸鱼中
小面包🥝
Future is now 🍭🍭🍭
前往小窝
公告栏
欢迎来到小面包的博客!🎉
最新通知:
  • 网站正在持续更新中...
  • 如有问题请留言交流
空降评论复制本文地址
随便逛逛昼夜切换关于博客美化设置切换全屏打印页面