当前位置: 首页 > news >正文

OpenGL shader开发实战学习笔记:第十一章 立方体贴图和天空盒

1. 立方体贴图和天空盒

1.1. 什么是立方体贴图

立方体贴图(Cube Map)是一种纹理,它由六个纹理图像组成,每个纹理图像对应一个方向。这些方向通常是立方体的六个面,分别是“前面”,“后面”,“右面”,“左面”,“上面”,“下面”。

1.1.1. 前面

1.1.2. 后面

1.1.3. 右面

1.1.4. 左面

1.1.5. 上面

1.1.6. 下面

1.2. 如何对立方体贴图进行采样?

1.2.1. 立方体贴图的存储结构

立方体贴图(Cube Map)本质上是由六个 2D 纹理组成,它们分别对应一个立方体的六个面,即前面(Positive Z)、后面(Negative Z)、右面(Positive X)、左面(Negative X)、上面(Positive Y)和下面(Negative Y)。这六个纹理按照特定的方向排列,形成一个包围空间的立方体。在 OpenGL 中,立方体贴图使用 GL_TEXTURE_CUBE_MAP 类型来表示,每个面都有对应的纹理目标,如下所示:

  • GL_TEXTURE_CUBE_MAP_POSITIVE_X :右面
  • GL_TEXTURE_CUBE_MAP_NEGATIVE_X :左面
  • GL_TEXTURE_CUBE_MAP_POSITIVE_Y :上面
  • GL_TEXTURE_CUBE_MAP_NEGATIVE_Y :下面
  • GL_TEXTURE_CUBE_MAP_POSITIVE_Z :前面
  • GL_TEXTURE_CUBE_MAP_NEGATIVE_Z :后面

1.2.2. 方向向量的作用

对立方体贴图采样时,需要使用一个三维的方向向量。这个向量从立方体的中心出发,指向空间中的某个方向。OpenGL 根据这个方向向量来确定应该从立方体贴图的哪个面进行采样。具体来说,方向向量的最大分量决定了采样的面,例如:

  • 如果 x 分量的绝对值最大且为正,那么从右面采样。
  • 如果 x 分量的绝对值最大且为负,那么从左面采样。
  • 以此类推,根据 y 和 z 分量的正负和大小确定其他面。
  • 在顶点着色器中,每个顶点的位置也可以看为从网络模型空间原点开始的一个向量,由于立方体网格中的顶点都以原点为中心,因此网格的顶点位置也可以看为从立方体中心出发的一个向量。

1.2.3. 顶点着色器中的计算

#version 410
layout (location = 0) in vec3 aPos;out vec3 TexCoords;uniform mat4 projection;
uniform mat4 view;void main()
{TexCoords = aPos;// 将顶点位置转换到裁剪空间gl_Position = projection * view * vec4(aPos, 1.0);
}

1.2.4. 片段着色器中的计算

#version 410
out vec4 FragColor;in vec3 TexCoords;uniform samplerCube skybox;void main()
{    // 对立方体贴图进行采样FragColor = texture(skybox, TexCoords);
}

1.3. 在openFrameworks 中加载立方体贴图

由于openFrameworks 中没有提供直接加载立方体贴图的函数,我们需要自己实现。具体见附书代码。
此处仅列出如何使用

ofxEasyCubemap cubemap; // 创建立方体贴图对象
cubemap.load(	"cube_front.jpg", "cube_back.jpg", "cube_right.jpg", "cube_left.jpg", "cube_top.jpg", "cube_bottom.jpg"); // 加载立方体贴图// 需要显式地调用getTexture()函数,才能获取到纹理对象  
shd.setUniformTexture("envMap", cubemap.getTexture(), 0);

1.4. 立方体贴图效果

1.4.1. ofApp.cp

void ofApp::setup()
{ofDisableArbTex();ofEnableDepthTest();//cubemapMesh.load("cube.ply");cubemapMesh.load("cube_28_vertex.ply");cubemapShader.load("cubemap.vert", "cubemap.frag");cubemap.load(	"cube_front.jpg", "cube_back.jpg", "cube_right.jpg", "cube_left.jpg", "cube_top.jpg", "cube_bottom.jpg"); // 加载立方体贴图directionalLightData.direction = glm::vec3(0.5f, -1.0f, -1.0f); directionalLightData.color = glm::vec3(1.0f, 1.0f, 1.0f); // 白色directionalLightData.intensity = 1.0f; // 强度		}void ofApp::drawCubemap()
{using namespace glm;cameraData.position=vec3(0, 0.0f, 1.0f);cameraData.fov=radians(90.f);float aspect=1024.0f/768.0f;//mat4 model=glm::rotate(1.0f,vec3(1,1,1))*scale(vec3(0.5,0.5,0.5));mat4 model = glm::rotate(glm::radians(45.0f), vec3(1,1, 0)) * scale(vec3(0.5, 0.5, 0.5));//mat4 model = glm::mat4(1.0f)*scale(vec3(0.5, 0.5, 0.5));//mat4 view=glm::inverse(glm::translate(cameraData.position))*rotate(glm::radians(-10.0f*(float)(ofGetElapsedTimef())), vec3(1,0, 0));mat4 view = glm::inverse(glm::translate(cameraData.position)) * rotate(glm::radians(-10.0f ), vec3(1, 0, 0));mat4 proj=glm::perspective(cameraData.fov,aspect,0.01f,100.0f);mat4 mvp=proj*view*model;vec3 lightDirection = getLightDirection(directionalLightData); // 获取光源方向mat3 normalMatrix = glm::transpose(glm::inverse(mat3(model)));cubemapShader.begin();cubemapShader.setUniformMatrix4f("mvp", mvp);cubemapShader.setUniform3f("lightDir", lightDirection);cubemapShader.setUniform3f("lightCol", directionalLightData.color*directionalLightData.intensity);cubemapShader.setUniformMatrix4f("setUniformMatrix4f", model); // 模型矩阵cubemapShader.setUniformTexture("cubemap", cubemap.getTexture(), 0); // 立方体贴图cubemapMesh.draw();cubemapShader.end();
}

1.4.2. cubemap.vert

#version 410layout (location = 0) in vec3 pos;uniform mat4 mvp;out vec3 texCoord;
void main() {gl_Position = mvp * vec4(pos, 1.0);texCoord = pos;
}

1.4.3. cubemap.frag

#version 410in vec3 texCoord;
uniform samplerCube cubemap;out vec4 fragColor;void main() {fragColor = texture(cubemap, texCoord);//fragColor = vec4(1.0, 0.0, 0.0, 1.0);
}

1.5. 天空盒

天空盒(Skybox)是一种用于模拟天空的技术,它通常由一个立方体组成,每个面都有一个纹理图像。天空盒的纹理图像通常是天空的全景图像,它可以包含天空的所有信息,例如天空的颜色,天空的亮度,天空的纹理等。

1.5.1. cube.ply

以下是天空盒使用的立方体网格数据(部份),从中可以看到,其面数并不为6面,以便于展示时类似于天空,而不是明显的立方体

3 0 1 2
3 3 4 5
3 6 7 8
3 9 10 11
3 12 13 14
3 5 15 16
3 0 2 17
3 3 5 18
3 6 8 19
3 9 11 20
3 12 14 21
3 5 16 22

通过这种方式创建的水面,看起来与背景图像不协调,因此,我们还需要对水面进行一些处理,使其看起来更加自然。

1.6. 创建立方体贴图反射

立方体贴图反射是计算机图形学中用于模拟物体表面反射环境效果的一种技术,借助立方体贴图来呈现物体周围环境在其表面的反射影像,让渲染出的物体更具真实感。下面从原理、实现步骤和应用场景来详细介绍。

1.6.1. 原理

  • 立方体贴图 :由六个 2D 纹理构成,分别对应立方体的六个面(前、后、左、右、上、下),这些纹理能存储环境的全景信息。例如,在一个室外场景里,立方体贴图可以存储天空、地面、周围建筑等环境信息。
  • 反射向量计算 :对于物体表面的每个点,依据该点的法线向量和视线方向向量计算出反射向量。这个反射向量就像现实中光线照射到物体表面后反射出去的方向。
  • 采样立方体贴图 :把反射向量作为方向向量,对立方体贴图进行采样,获取反射的颜色值,将该颜色值应用到物体表面的着色计算中。

下图展示了立方体贴图反射的运行结果

1.6.1.1. water.frag

核心代码:

vec3 viewDir=normalize(cameraPos-fragWorldPos);	// 视线方向
vec3 reflectDir=reflect(-viewDir,normal);	// 反射方向
vec3 diffuseCol=texture(envTex,reflectDir).xyz*lightCol*diffuse;

1.6.1.1. water.frag

核心代码:

vec3 viewDir=normalize(cameraPos-fragWorldPos);	// 视线方向
vec3 reflectDir=reflect(-viewDir,normal);	// 反射方向
vec3 diffuseCol=texture(envTex,reflectDir).xyz*lightCol*diffuse;

相关文章:

OpenGL shader开发实战学习笔记:第十一章 立方体贴图和天空盒

1. 立方体贴图和天空盒 1.1. 什么是立方体贴图 立方体贴图(Cube Map)是一种纹理,它由六个纹理图像组成,每个纹理图像对应一个方向。这些方向通常是立方体的六个面,分别是“前面”,“后面”,“…...

双指针算法(二)

目录 一、力扣611——有效三角形的个数 二、牛客网3734——和为S的两个数字 三、力扣15——三数之和 四、力扣18——四数之和 一、力扣611——有效三角形的个数 题目如下: 这里我们先认识如何判断是个三角形,ab>c,ac>b,bc>a即为三角形 这里…...

docker Windows 存放位置

docker Windows 存放位置 镜像文件层可能是这 docker的overlay2中存的都是什么and如何清理/var/lib/docker/overlay2_docker overlay 是什么目录-CSDN博客 存的是我们的镜像文件和容器内的文件 \\wsl.localhost\docker-desktop\mnt\docker-desktop-disk\data\docker\overla…...

每日一题(小白)暴力娱乐篇31

首先分析一下题意,需要求出2024的因子,因为我们要求与2024互质的数字,为什么呢?因为我们要求互质说直白点就是我和你两个人没有中间人,我们是自然而然认识的,那我们怎么认识呢,就是直接见面对吧…...

FastAPI与SQLAlchemy数据库集成

title: FastAPI与SQLAlchemy数据库集成 date: 2025/04/17 15:33:34 updated: 2025/04/17 15:33:34 author: cmdragon excerpt: FastAPI与SQLAlchemy的集成通过创建虚拟环境、安装依赖、配置数据库连接、定义数据模型和实现路由来完成。核心模块包括数据库引擎、会话工厂和声…...

SQL刷题记录贴

1.题目:现在运营想要对用户的年龄分布开展分析,在分析时想要剔除没有获取到年龄的用户,请你取出所有年龄值不为空的用户的设备ID,性别,年龄,学校的信息。 错误:select device_id,gender,age,un…...

消息队列实际结点数与计数器不一致问题分析

问题描述 协议栈 PDCP线程任根据外部消息,维护一个链表式的PDCP PDU消息队列,以及一个变量count来记录消息队列中结点数。 当收到 从NG接口业务数据时,PDCP线程会向PDCP PDU消息队列中添加大量节点,消息队列的count值相应的增加…...

AI预测3D新模型百十个定位预测+胆码预测+去和尾2025年4月17日第55弹

从今天开始,咱们还是暂时基于旧的模型进行预测,好了,废话不多说,按照老办法,重点8-9码定位,配合三胆下1或下2,杀1-2个和尾,再杀6-8个和值,可以做到100-300注左右。 (1)定…...

C++23 新特性:std::size_t 字面量后缀 Z/z

在 C23 中,引入了一个非常实用的新特性:为 std::size_t 类型的字面量提供了新的后缀 Z 和 z。这一改进使得在代码中声明和使用 std::size_t 类型的字面量变得更加直观和便捷。 1. 背景与动机 在之前的 C 标准中,std::size_t 是一种非常常用…...

【裁员感想】

裁员感想 今天忽然感觉很emo 因为知道公司要裁员 年中百分之10 年末百分十10 我知道这个百分20会打到自己 所以还挺不开心的 我就想起 我的一个亲戚当了大学老师 我觉得真的挺好的 又有寒暑假 又不是很累 薪资也不低 又是编制 同时也觉得自己很失败 因为对自己互联网的工作又…...

CSS例子 > 图片瀑布流布局(vue2)

<template><div class"container"><!-- 临时容器用于计算高度 --><div v-if"!isLayoutReady" class"temp-container"><divv-for"(item, index) in list":key"temp- index":ref"(el) > …...

Python 获取淘宝券后价接口的详细指南

在电商领域&#xff0c;淘宝作为国内领先的电商平台&#xff0c;提供了丰富的商品和优惠活动。对于开发者来说&#xff0c;获取淘宝商品的券后价是一个极具价值的功能&#xff0c;可以帮助用户更好地进行购物决策&#xff0c;同时也为相关应用和服务提供了数据支持。本文将详细…...

零服务器免备案!用Gitee代理+GitHub Pages搭建个人博客:绕过443端口封锁实战记录

#GitHub Pages #Gitee代理 #SSH密钥管理 #Jekyll博客 #网络穿透 场景&#xff1a;自己的电脑没有添加github的ssh代理&#xff0c;只有gitee的代理 实现效果&#xff0c;在公网可以运行个人博客。在本地更改内容后公网同步更新。 最开始的模板 最终实现的博客模板&#xff1…...

如何新建一个空分支(不继承 master 或任何提交)

一、需求分析&#xff1a; 在 Git 中&#xff0c;我们通常通过 git branch 来新建分支&#xff0c;这些分支默认都会继承当前所在分支的提交记录。但有时候我们希望新建一个“完全干净”的分支 —— 没有任何提交&#xff0c;不继承 master 或任何已有内容&#xff0c;这该怎么…...

[终极版]Javascript面试全解

this指向 执行上下文 是代码执行时的运行环境作用域 是变量和函数的可访问性规则&#xff08;静态&#xff09;&#xff1b;全局、函数和块状&#xff1b;内层可访问外层&#xff0c;外层不能访问内层词法环境 是实现作用域的引擎内部机制&#xff08;静态&#xff09; 执行上…...

day30图像处理OpenCV

文章目录 一、图像预处理9. 图像掩膜9.1 制作掩膜9.2 与运算1.原理2.语法 9.3 颜色替换9.4案例 一、图像预处理 9. 图像掩膜 创建的掩膜方便我们对目标区域进行操作。 9.1 制作掩膜 掩膜通常是一个二值化图像&#xff0c;并且与原图像的大小相同。其中目标区域被设置为1&am…...

蓝桥杯 10.拉马车

拉马车 原题目链接 题目描述 小时候你玩过纸牌游戏吗&#xff1f; 有一种叫做 “拉马车” 的游戏&#xff0c;规则简单但非常吸引小朋友。 游戏规则简述如下&#xff1a; 假设参加游戏的小朋友是 A 和 B&#xff0c;游戏开始时&#xff0c;他们得到的随机纸牌序列如下&am…...

Java学习总结-Junit单元测试

单元测试&#xff1a; 就是针对最小功能的单元&#xff1a;方法&#xff0c;编写测试代码对其进行正确性测试。 之前我们怎么测试的&#xff1a;在main方法中调用其他方法&#xff0c;一个方法测试失败可能导致其他方法得不到测试&#xff0c;无法得到测试报告。 Junit单元测…...

代理IP:城市文化IP打造的隐形加速器

目录 一、解码代理IP&#xff1a;数字时代的"变身术" 1.1 工作原理探秘 1.2 主要类型对比 二、城市文化IP的打造密码 2.1 核心要素拆解 2.2 成功案例启示 三、代理IP的五大赋能场景 3.1 文化数据采集 3.2 目标市场定位 3.3 品牌传播突破 3.4 版权保护监控 …...

链式数据存储系统

目录 系统说明 服务端的模块设计 存储数据说明 服务端设计-程序入口&#xff08;main&#xff09; 数据库的连接-mysql包的编写 数据的加密-hash文件的编写 数据传递格式-proto文件的编写 具体实现方法-controller包的编写 日志的打印-logs包的编写 扩展服务端 系统说…...

《理解 Java 泛型中的通配符:extends 与 super 的使用场景》

大家好呀&#xff01;&#x1f44b; 今天我们要聊一个让很多Java初学者头疼的话题——泛型通配符。别担心&#xff0c;我会用最通俗易懂的方式&#xff0c;带你彻底搞懂这个看似复杂的概念。准备好了吗&#xff1f;Let’s go! &#x1f680; 一、为什么我们需要泛型通配符&…...

Scala 入门指南

Scala 入门指南 目录 简介环境搭建基础语法面向对象编程函数式编程集合模式匹配特质隐式转换并发编程与 Java 互操作最佳实践常见问题 简介 Scala 是一种多范式编程语言&#xff0c;结合了面向对象编程和函数式编程的特性。它运行在 JVM 上&#xff0c;与 Java 完全兼容&am…...

GESP2025年3月认证C++八级( 第一部分选择题(11-15))

杨辉三角形&#xff1a; #include <iostream> using namespace std;#define N 35 // 最多支持输出 35 行 int a[N]; // 一维数组&#xff0c;用于存储当前行的杨辉三角数int main() {int n;cin >> n; // 输入要输出的行数for (int i 0; i < n; i) {a[i] …...

Dynamics 365 Business Central Master Data Managerment Setup 主数据管理

#Dynamics 365 BC ERP# #Navision# 引言 在BC中除了之前有一个章节提到的用Code 同步资料&#xff0c; 也可以用内置主数据管理功能来同步资料。 Master Data Management Setup 设置Source Company 为 主要管理主数据的公司 Synchronization Tables 设置需要同步的Table 这…...

深入理解 requestIdleCallback 与大数据加载优化

使用 requestIdleCallback 优化大批量 DOM 操作 —— 以加载 100 万条数据为例 在前端开发中&#xff0c;如果你尝试在短时间内往 DOM 中添加大量元素&#xff0c;比如一次性插入 100 万条数据&#xff0c;页面极有可能卡顿甚至直接崩溃。为了解决这一性能问题&#xff0c;我们…...

【MySQL】索引运算与NULL值问题详解:索引字段应尽量 NOT NULL ,NULL值不能参与部分索引运算

索引运算与NULL值问题详解 不能参与的"部分索引运算"指什么&#xff1f; 这里的"部分索引运算"指的是索引列在某些特定操作或条件下无法被MySQL优化器有效利用的情况&#xff0c;特别是当字段包含NULL值时。主要包括以下几种情况&#xff1a; 1. 比较运…...

STM32 F103 标准库CH452A 4线 数码管驱动芯片显示数码管

公司生产测试需要统一去检查这版CH452A的好坏&#xff0c;网上找了一下没有现成可以用的4线CH452A的驱动程序&#xff0c;所以直接就肝了移植官方的51程序到stm32上面去&#xff0c;亲测可以使用&#xff01;&#xff01; 文末有代码 测试图片&#xff1a; 如你所见我测了一堆…...

Vue 和 Spring boot 和 Bean 不同生命周期

一、Vue 组件生命周期 父子组件生命周期顺序&#xff1a; 创建时&#xff1a; 父 beforeCreate → 父 created → 父 beforeMount → 子组件生命周期 → 父 mounted 更新时&#xff1a; 父 beforeUpdate → 子组件更新 → 父 updated。 销毁时&#xff1a; 父 beforeDestroy…...

期货数据API对接实战指南

一、期货数据接口概述 StockTV提供全球主要期货市场的实时行情与历史数据接口&#xff0c;覆盖以下品种&#xff1a; 商品期货&#xff1a;原油、黄金、白银、铜、天然气、农产品等金融期货&#xff1a;股指期货、国债期货特色品种&#xff1a;马棕油、铁矿石等区域特色期货 …...

Flask(2): 在windows系统上部署项目2

4 创建并激活虚拟环境 虚拟环境非常有用&#xff0c;可以将多个项目隔离开来。根据我看的教程&#xff0c;貌似以前有多种创建方式&#xff0c;后来官方自带了。目前我就用官方的方式。 4.1 创建虚拟环境 创建部署文件夹(假如目录为d:\project01)&#xff0c;在命令提示…...

Java 中 Synchronized如何保证可见性

在 Java 多线程编程中&#xff0c;可见性问题是指一个线程对共享变量的修改&#xff0c;其他线程能够立即看到。如果没有适当的同步机制&#xff0c;可能会出现线程 A 修改了共享变量的值&#xff0c;但线程 B 仍然使用的是修改前的值&#xff0c;导致程序出现错误。synchroniz…...

33、Python单元测试与pytest框架从入门到精通

Python单元测试与pytest框架从入门到精通 引言 在软件开发领域&#xff0c;完善的测试体系是保证代码质量的生命线。本文将深入探讨Python单元测试的核心技术&#xff0c;从标准库unittest到功能强大的pytest框架&#xff0c;通过20个代码示例展示测试驱动开发&#xff08;TD…...

mvccc

. MVCC (多版本并发控制) 概念&#xff1a; MVCC 是一种并发控制技术&#xff0c;用于在数据库中实现并发事务的读写操作&#xff0c;同时保证事务的隔离性。MVCC 的核心思想是&#xff0c;在数据库中维护数据的多个版本&#xff0c;每个事务在读取数据时&#xff0c;读取的是…...

ONLYOFFICE深度解锁系列.2-Excel 跨文件数据整合实战指南-可道云的另一个严重bug

一、为什么需要跨文件数据整合&#xff1f; 在企业办公和团队协作中&#xff0c;数据往往分散在不同文件中。传统复制粘贴方式存在三大痛点&#xff1a; 版本混乱&#xff1a;源数据更新后需反复同步 错误风险&#xff1a;手动操作易造成数据偏差 效率低下&#xff1a;多文件…...

如何对Flutter应用程序进行单元测试

Flutter单元测试完全指南&#xff1a;从基础到高级实践 面试求职资源 面试试题小程序&#xff1a;涵盖测试基础、Linux操作系统、MySQL数据库、Web功能测试、接口测试、APPium移动端测试、Python知识、Selenium自动化测试相关、性能测试、计算机网络知识、Jmeter、HR面试等内…...

多模态大语言模型arxiv论文略读(二十四)

VCoder: Versatile Vision Encoders for Multimodal Large Language Models ➡️ 论文标题&#xff1a;VCoder: Versatile Vision Encoders for Multimodal Large Language Models ➡️ 论文作者&#xff1a;Jitesh Jain, Jianwei Yang, Humphrey Shi ➡️ 研究机构: SHI Labs…...

前端根据后端返回的excel二进制文件流进行导出下载

需求 在vue2中&#xff0c;后端接口返回一个文件流&#xff0c;前端实现excel文件流导出下载功能。 解决方案 利用axios请求后端接口&#xff0c;把后端返回的blob文件流转为一个临时在线url&#xff0c;然后利用a标签实现导出下载功能。 具体实现步骤 1、封装axios请求拦…...

代码随想录刷题|Day20(组合总数,组合总数2、分割回文串)

回溯算法 Part02 组合总数 力扣题目链接 代码随想录链接 视频讲解 题目描述&#xff1a; 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target &#xff0c;找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 &#xff0c;并以列表形式返回。你…...

【NLP 64、基于LLM的垂直领域【特定领域】问答方案】

找不到生活的答案&#xff0c;就先找自己 —— 25.4.17 一、垂直领域问答 1.特点 ① 问答内容通常不存在于通用语料 ② 回答内容对准确性要求较高&#xff0c;召回要求较低&#xff08;可以转人工处理&#xff09; ③ 拓展性和可控性&#xff08;可以根据需求&#xff0c;增、…...

pytest自动化中关于使用fixture是否影响用例的独立性

第一个问题&#xff1a;难道使用fixture 会不会影响用例独立 ✅ 简单回答&#xff1a; 使用 fixture ≠ 不独立。 只要你的 fixture 是每次测试都能自己运行、自己产生数据的&#xff0c;那么测试用例依然是“逻辑独立”的。 ✅ 怎么判断 fixture 是否影响独立性&#xff1f;…...

嵌入式物联网开发(二)如何创建N32G45的Keil工程并实现串口打印

如何创建N32G45的Keil工程并实现串口打印 打开Keil IDE, 点击菜单栏Project按钮&#xff0c;选择Create New Project&#xff0c;并在弹出的对话框中选择工程目录&#xff0c;并取一个名字&#xff0c;这里取名bootloader:在弹出的对话框中选择我们的对应的芯片型号: N32G452R…...

基于Canal+Spring Boot+Kafka的MySQL数据变更实时监听实战指南

前期知识背景 binlog 什么是binlog 它记录了所有的DDL和DML(除 了数据查询语句)语句&#xff0c;以事件形式记录&#xff0c;还包含语句所执行的消耗的时间&#xff0c;MySQL 的二进制日志是事务安全型的。一般来说开启二进制日志大概会有1%的性能损耗。 binlog分类 MySQL Bi…...

Unity入门笔记(缘更)

内容来源SiKi学院的Luna’s Fantasy 文章目录 一、基础知识1.准备2.基础知识1.层级(Layer)2.轴心点3.预制体(Prefab)4.刚体组件(Rigidbody)5.碰撞器组件(BoxCollider) 二、代码1.移动 一、基础知识 1.准备 Unity安装&#xff1a; https://unity.cn 2.基础知识 1.层级(Layer…...

SpringAI+DeepSeek大模型应用开发——2 大模型应用开发架构

目录 2.大模型开发 2.1 模型部署 2.1.1 云服务-开放大模型API 2.1.2 本地部署 搜索模型 运行大模型 2.2 调用大模型 接口说明 提示词角色 ​编辑 会话记忆问题 2.3 大模型应用开发架构 2.3.1 技术架构 纯Prompt模式 FunctionCalling RAG检索增强 Fine-tuning …...

Prometheus thanos架构

Thanos 是一个用于扩展 Prometheus 的高可用性和长期存储的解决方案。它通过整合多个 Prometheus 实例&#xff0c;提供了全局查询、长期存储、以及高可用性的能力。Thanos 的架构主要由以下几个核心组件组成&#xff1a; 1. Sidecar 功能&#xff1a; Sidecar 是与每个 Prom…...

嵌入式软件--stm32 DAY 1

一、STM32概述 1.ARM内核 ARM是一家英国公司。后被日本软银收购。 RISC&#xff08;精简指令集计算机&#xff09; 产品&#xff1a;ARM架构处理器&#xff0c;相关外围组件的电路设计方案。 怎么卖 :知识产权授权 只卖方案不卖具体产品 买了如何用 拿到ARM的方案 设计产…...

【家政平台开发(53)】解锁家政平台高可用秘籍:负载均衡与架构部署

本【家政平台开发】专栏聚焦家政平台从 0 到 1 的全流程打造。从前期需求分析,剖析家政行业现状、挖掘用户需求与梳理功能要点,到系统设计阶段的架构选型、数据库构建,再到开发阶段各模块逐一实现。涵盖移动与 PC 端设计、接口开发及性能优化,测试阶段多维度保障平台质量,…...

Kotlin整数相除精度损失roundToInt

Kotlin整数相除精度损失roundToInt import kotlin.math.roundToIntfun main() {val a 0.0fval delta 0.1ffor (i in 0..10) {val r a i * deltaprintln("float${r} toInt${r.toInt()} (0.5 toInt)${(r 0.5).toInt()} round${Math.round(r)} roundToInt${r.roundToInt…...

RPCRT4!OSF_CCONNECTION::OSF_CCONNECTION函数分析之初始化中的u.ConnSendContext----RPC源代码分析

RPCRT4!OSF_CCONNECTION::OSF_CCONNECTION函数分析之初始化中的u.ConnSendContext 第一部分&#xff1a; 1: kd> kc # 00 RPCRT4!OSF_CCONNECTION::OSF_CCONNECTION 01 RPCRT4!OSF_CASSOCIATION::AllocateCCall 02 RPCRT4!OSF_BINDING_HANDLE::AllocateCCall 03 RPCRT4!OSF…...

visual studio 2022更改项目名称,灾难性故障(异常来自HRESULT)

系列文章目录 文章目录 系列文章目录前言一、具体步骤二、遇到的问题 前言 在visual studio 2022中&#xff0c;有时候遇到一个很大的工程&#xff0c;我们只是想改写工程名称&#xff0c;而又不想重建项目&#xff0c;如何实现呢&#xff1f; 比如将 Visual Studio 中的 Qt 工…...