GAMES101笔记

Games101

文章目录

  • Games101
    • 一、Review of Linear Algebra 线性代数
      • 向量
        • 向量点乘:==判断同向反向、接近程度==
        • 点乘基本属性
        • 点乘坐标系运算
        • 向量投影
        • 向量叉乘:==判定左右、判定内外==
        • 叉乘基本属性(右手坐标系):不满足交换律
        • 叉乘坐标系运算
      • 矩阵
        • 矩阵乘积
        • 矩阵乘积属性:不满足交换律
        • 矩阵的逆
    • 二、Transformation 变换
      • 1. 模型变换 Modeling Transformation
        • 缩放矩阵
        • 镜像矩阵
        • 切变矩阵
        • 旋转矩阵
        • 齐次坐标变换
        • 平移变换
        • 仿射变换
        • 引入齐次坐标后的二维线性变换
        • 三维变换矩阵
        • 三维旋转矩阵
      • 2. 视图变换 Viewing Transformation
        • 初始相机定义
        • 相机标准位置
        • 相机旋转矩阵
      • 3. 投影变换 Projection Transformation
        • 正交投影 Orthographic Projection
        • 透视投影 Perspective Projection
    • 三、Rasterization 光栅化
      • 采样
      • 光栅化
      • AABB包围盒
      • 走样
      • 反走样
        • 低通滤波
        • MSAA
        • 其它抗锯齿方法
    • 四、 Shading 着色
      • 布林冯模型 Blinn-Phong反射模型
        • 漫反射 Diffuse Reflection
        • 高光 Specular Term
        • 环境光 Ambient Term
      • 着色频率
      • 图形渲染管线(Real-time Rendering)
      • 纹理映射
      • 重心坐标
      • 纹理的应用
        • 环境贴图
        • 凹凸贴图、法线贴图
      • 位移贴图
    • 五、Geometry 几何
      • 几何表示方法
        • 隐式几何 Implicit Representations of Geometry
        • 显式几何 Explicit Representations of Geometry
      • 曲线和曲面
        • 曲线
          • 贝塞尔曲线
          • 逐段(Piecewise)贝塞尔曲线
          • 其他
        • 曲面
      • 网格处理
        • 网格细分
          • 1. loop subdivision
          • 2. catmull-clark subdivision
        • 网格简化
        • 网格正规化

一、Review of Linear Algebra 线性代数

向量

单位向量:长度为一的向量

操作:向量求和–平行四边形法则,三角形法则

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

向量点乘:判断同向反向、接近程度

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

点乘基本属性

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

点乘坐标系运算

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

向量投影

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

向量叉乘:判定左右、判定内外

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

叉乘基本属性(右手坐标系):不满足交换律

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

叉乘坐标系运算

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

叉乘结果是正的说明后项向量在前项向量的左侧,叉乘结果是正的说明后项向量在前项向量的右侧;

由此可以得到点在图形内还是在图形外

右手三维直角坐标系

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

矩阵

矩阵乘积

乘积的i行j列元素 = i行向量点乘j行向量

矩阵乘积属性:不满足交换律

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

矩阵的逆

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

向量的点乘和叉乘写成矩阵相乘的形式:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

A*:伴随矩阵

二、Transformation 变换

1. 模型变换 Modeling Transformation

缩放矩阵

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

镜像矩阵

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

切变矩阵

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

旋转矩阵

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

θ为逆时针旋转的角度

线性变换:一个向量 = 一个矩阵 * 另一个向量

齐次坐标变换

引入齐次坐标的理由是平移变换

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

引入齐次变换后:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

平移变换

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

向量具有平移不变性

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

点+点 = 这两个点的中点

仿射变换

( = 先应用前述 线性变换,再应用平移变换)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

引入齐次坐标后的二维线性变换

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

逆变换矩阵的效果就是将原来的变换还原:M ➡ M-1

向量会从右向左逐个运用变换矩阵

三维空间引入齐次变换:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

三维变换矩阵

(先线性变换,再平移)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

正交矩阵:矩阵的逆等于它的转置(例如旋转矩阵)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

三维旋转矩阵

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

罗德里格斯旋转公式:绕任意过原点的轴旋转任意角度

绕任意轴:把旋转中心点平移到原点再进行操作,最后把所有东西再移回去

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

四元数的引入:旋转与旋转之间的插值

2. 视图变换 Viewing Transformation

视图变换:改变相机位置、方向

初始相机定义

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

相机标准位置

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

相机旋转矩阵

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

模型要和相机一起变换

3. 投影变换 Projection Transformation

3D到2D

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

正交投影 Orthographic Projection

映射到标准立方体:先把中心点平移到原点,再缩放

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

透视投影 Perspective Projection

映射到立方体的变换矩阵:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

三、Rasterization 光栅化

定义视锥的长宽比(Aspect ratio)和可视角度(fovY)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

光栅化 = 绘制到屏幕上

像素:一个像素是一个有着均匀颜色的小方块,是RGB的混合

像素的坐标:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

视口变换矩阵:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

三角形得到广泛应用的原因:三角形是最基础的多边形;任何多边形都能拆成三角形;三角形内部一定是平面的;三角形内外定义是清晰的

采样

给一个三角形,判断像素中心在不在三角形内:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

光栅化

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

AABB包围盒

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

走样

走样:锯齿、摩尔纹、车轮效应

走样原因:信号变化太快,采样太慢

反走样

低通滤波

在采样之前先做模糊

傅里叶级数展开

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

采样频率如果太慢,就会产生走样

傅里叶变换

可以把某个函数/图像从时域Spatial Domain变到频域Frequency Domain(频谱)

低频多,高频少:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

滤波:把某个特定的频段去掉。

下图为高通滤波,只有高频信号可以通过。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

下图为低通滤波,只有低频信号可以通过。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

带通滤波

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

滤波 = 平均 = 卷积

卷积示例:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

时域上的卷积相当于频域上的乘积,时域上的乘积相当于频域上的卷积

每个像素取周围3*3的盒子(box filter)做点乘操作:模糊

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如果盒子在时域上变大,那么对应在频域上会变小

时域上:采样 = 原始信号 * 冲击函数

在频域上:采样就是在重复原始信号的频谱

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

产生走样的原因:

采样的间隔会影响频谱的复制粘贴间隔,采样的不够快就会导致复制粘贴原频谱的间隔小 (混叠)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

改善走样造成的问题的方法:增加采样频率(但是需要高分辨率);反走样:

先拿掉高频信号(模糊),再采样

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

对于一个三角形:对每个覆盖到的像素求平均

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

MSAA

多重采样抗锯齿,用更多采样点进行反走样

把一个像素分为多个采样点,近似一个合理的覆盖率

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

通过MSAA可以得到抗锯齿效果,但是增大了计算量,不过很多样本得到了复用,计算量不会增加那么大

其它抗锯齿方法

SSAA:先把低分辨率变为高分辨率处理(增加采样点),再变回低分辨率

TAA 时间性抗锯齿:目前最主流的抗锯齿技术,复用上一帧每个像素的值继续产生作用,能够很好地缓解物体运动造成的闪烁。抗锯齿效果极佳,但是会造成严重的画面模糊。

FXAA 快速近似抗锯齿:图像的后期处理,检测图像的边缘并对其进行模糊处理。抗锯齿效果较差,但是性能消耗极低。

SMAA边缘抗锯齿技术:类似于FXAA,是一种基于图像的抗锯齿技术,它通过检测和平滑图像中的边缘来减少锯齿效应。

TXAA:TAA+MSAA

FSR2:超分辨率 Super resolution:是 AMD开发的从低分辨率到高分辨率的优化方法,它会根据之前帧的信息以及当前帧的低分辨率图像生成高分辨率图像。这种技术可以在保持较高帧率的情况下,显著提升图像的细节和清晰度。

DLSS :是 NVIDIA 开发的一种图像重建技术,利用深度学习和 AI 算法来提升游戏的图像分辨率。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

四、 Shading 着色

Z-Buffer 深度缓存

对每个像素/采样点记录最浅深度(离我们最近的距离)为浮点型

时间复杂度为O(n),和顺序无关

顺序:MVP变换,Viewport,Rasterization,Shading

着色:对不同物体应用不同材质的过程

布林冯模型 Blinn-Phong反射模型

最基础的着色模型

高光、漫反射、环境光

shading point

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

n:法线向量

v:观测方向

l:光照方向

表面属性:颜色、亮度(shininess)

shading不考虑其它物体的存在,也不考虑阴影,只考虑每个点自己,有局部性(local)

漫反射 Diffuse Reflection

任一shading point周围单位面积接收到的能量和光照方向与法线方向之间的夹角的余弦成正比

cosΘ = l · n (l和n都为单位向量)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

球壳离光源距离为1时,定义光强为I;则球壳离光源距离为r时,定义光强为I/r2(球壳面积*光强守恒)

漫反射公式

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

到达的能量➡接收的能量

点有颜色的原因:它吸收了一部分能量,反射出去的是没吸收的能量

漫反射与v完全没关系,从各个地方看到的都是一样的

高光 Specular Term

高光反射是在观察方向接近镜面反射的方向,即法线向量接近半程向量方向

高光反射公式

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

用指数是降低容忍度,布林冯一般用100~200

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

环境光 Ambient Term

环境光反射公式

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

总结:布林冯反射模型公式:对每个点应用该公式

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

着色频率

Flat Shading:对每个三角形求法线,计算出着色结果就是一个三角形的着色结果

Gouraud Shading:对每个顶点着色,三个顶点为一个三角形,每个三角形内部的颜色通过插值的方法计算

求顶点法线:顶点相邻面的法线加权求平均

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Phong Shading:对每个像素着色

每条法线都是单位向量

图形渲染管线(Real-time Rendering)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

shader:每个像素都会执行一次的程序

vertex shader:顶点着色器

fragment/pixel shader:片段/像素着色器

GPU的并行度很高

纹理映射

uv

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

重心坐标

重心坐标是为了插值

对于三角形内的点坐标:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

通过面积比得到重心:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

做插值处理:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

但是重心坐标在投影下会变化,所以三维空间中的属性建议在三维空间中做插值,再对应到二维结果上去

纹理映射实现伪代码:

texel:纹理元素

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

纹理分辨率太低的解决方法:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Nearest:把小数部分四舍五入成为整数

Bilinear:双线性插值,找到相邻的4个整数点,进行两段lerp插值

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Bicubic:与Bilinear类似,是找到相邻的16个整数点,进行三段lerp插值

纹理分辨率太高(纹理太大)会产生走样问题:

原因:远处一个像素覆盖多个纹素

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

解决方法:避免采样

使用范围查询,快速得出平均值

MipMap:快、不准、正方形的范围查询

存储量是原来的4/3

一张图片中有很多图片,每一张图片的分辨率是递减的,渲染器在调用它们时会根据距离自动切换

像素对应的纹理区域近似:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

通过这个区域计算出它在第几层会变成一个像素大小

三线性插值:两次查询,一次插值

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

MipMap问题:Overblur

解决方法:

引入各向异性过滤Anisotropic Filtering

  1. Ripmaps and summed area tables 预先计算在x、y两个方向的压缩图,允许查到矩形区域

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  1. 引入EWA过滤,将不规则图形拆成很多椭圆,多次查询

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

纹理的应用

环境贴图

将环境光记录在球体上再展开会扭曲

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

解决办法 Cube Map:存在立方体上变成六张纹理图,但是需要额外的计算

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

凹凸贴图、法线贴图

用纹理图定义一个点的相对高度、法线信息,没有改变几何信息

有关法线信息的二维计算:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

有关法线信息的三维计算:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

位移贴图

相比于凹凸贴图,位移贴图是真的移动了顶点的位置

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

DirectX提供了动态曲面细分,根据需要细分模型

纹理还可以:定义三维程序噪声、存一些计算好的信息(AO信息)、体积渲染

五、Geometry 几何

几何表示方法

隐式几何 Implicit Representations of Geometry

满足一定特定关系的点都在一个平面上 f(x,y,z) = 0

判定一个点是否在平面上还是平面内或外很容易(函数大于等于小于0),但找出所有在平面上的点很难

表示方法:

  1. 代数平面(隐式):用函数式定义几何

  2. CSG (Constructive Solid Geometry) (隐式) : 用数学运算定义几何

  3. 距离函数(隐式):描述一个点到这个表面的最近距离,可正可负。可以进行blend操作(SDF : signed distance function)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  1. 水平集(隐式):类似于距离函数,区别是把距离写在格子上。等于0的地方就是物体表面。

  2. 分型(隐式):自相似

优点:表述很容易;查询点在里外较简单;容易做光线和表面求交点;对简单集合能给出确切描述;容易描述拓扑结构

缺点:很难描述复杂几何

显式几何 Explicit Representations of Geometry

通过参数映射的方法定义一个平面:(u,v) <—>(x,y,z)

点在平面里面还是外面很难看出

表示方法:

  1. 点云(显式):密集的点表示几何,变成不同的面
  2. 多边形面(显式):应用非常广泛,用三角形四边形等描述复杂的物体

常用文件格式:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

曲线和曲面

曲线
贝塞尔曲线

用一系列的控制点定义曲线

找到时间t上的点连成曲线:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

代数表示方法(线性插值):(这里的2不是平方,是次数)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

规定:

  1. t=0时一定在起点,t=1时一定在终点;
  2. 如果想对贝塞尔曲线做仿射变换,则只需要对控制点做仿射变换,但是对投影不是这样
  3. 画出来的贝塞尔曲线一定得在所有控制点形成的凸包(最小凸多边形)内
逐段(Piecewise)贝塞尔曲线

每次用较少的控制点定义一段贝塞尔曲线,然后把这些贝塞尔曲线连起来

曲线连续:

  1. 前一条终点 = 后一条起点

  2. 保证连起来的曲线是光滑的:前一条最后一段和后一条第一段导数相同,即:

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

其他

样条:满足一定连续性,是一个可控的曲线

B-样条:奇函数样条,是对贝塞尔曲线的扩展,具有局部性(有一定影响范围)

曲面

原理:在两个方向上分别应用贝塞尔曲线

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

因此需要一个二维的控制的东西:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

网格处理

几何处理:网格细分、网格简化、网格正规化

网格细分

upsampling

1. loop subdivision

只适用于全三角形网格

两步操作:三角形数量增多、调整三角形位置(区分新、旧顶点)

更新新的顶点的位置:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

更新旧的顶点的位置:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2. catmull-clark subdivision

对于网格的一般情况,不只是三角形

定义:四边形面、非四边形面、奇异点(度不为4的点)

做法:为每条边和每个面加上中点,连接所有的中点

网格简化

downsampling

二次误差度量:新的点是到原来各个面的距离平方和最小的点

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

按照二次误差度量由小到大做贪缩:优先队列/堆

网格正规化

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/683653.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

CSS函数:fit-content与matrix的使用

网格函数 fit-content()属于网格函数&#xff0c;除此之外的网格函数还有&#xff1a;CSS函数&#xff1a; 实现数据限阈的数字函数。顾名思义&#xff0c;这三个函数只能在网格布局中使用。fit-content()函数主要是用于给定布局可用大小&#xff0c;适应内容&#xff0c;其功…

【数据结构】排序(直接插入、折半插入、希尔排序、快排、冒泡、选择、堆排序、归并排序、基数排序)

目录 排序一、插入排序1.直接插入排序2.折半插入排序3.希尔排序 二、交换排序1.快速排序2.冒泡排序 三、选择排序1. 简单选择排序2. 堆排序3. 树排序 四、归并排序(2-路归并排序)五、基数排序1. 桶排序&#xff08;适合元素关键字值集合并不大&#xff09;2. 基数排序基数排序的…

十六、【源码】plugins插件

源码地址&#xff1a;https://github.com/mybatis/mybatis-3/ 仓库地址&#xff1a;https://gitcode.net/qq_42665745/mybatis/-/tree/16-plugin plugins插件 plugins功能分为两部分 1.首先是在xml解析时解析出配置的插件类&#xff0c;并实例化放入拦截器链中 2.其次执行…

量化投资分析平台 迅投 QMT(四)获取标的期权的代码

量化投资分析平台 迅投 QMT [迅投 QMT](https://www.xuntou.net/?user_code7NYs7O)我目前在使用有了底层标的如何获取期权的交易代码呢&#xff1f;上代码历史帖子 迅投 QMT 我目前在使用 两个月前&#xff08;2024年4月&#xff09;迅投和CQF有一个互动的活动&#xff0c;进…

Java实现2048游戏源代码(启动即可玩)

使用Java语言从零到一开发经典2048游戏的全部源代码及详尽的开发教程。 适合Java初学者、游戏开发爱好者以及想要深入理解Swing GUI框架的开发者学习与参考。 知识领域&#xff1a;游戏开发、Java编程、图形用户界面(GUI)设计 技术关键词&#xff1a;Java Swing、事件监听、多…

“探索‘循环购‘:快消品行业的新商业模式与增长策略“

大家好&#xff0c;我是吴军&#xff0c;来自一家深耕于软件开发和商业模式创新的科技公司。我们的专长在于为各类企业量身打造商城系统&#xff0c;并提供个性化的商业模式解决方案。迄今为止&#xff0c;我们已经助力众多企业成功实施了超过200种前沿的商业模式&#xff0c;实…

阿奇科技 简单java-swing计算器源码(可用于课设等)

此系统用的技术有java swing&#xff01; 实现的功能&#xff1a; 加减乘除&#xff08;可以进行小数运算&#xff09; 清空数据 最小化 小巧方便&#xff0c;功能齐全&#xff01; 页面截图: 源码地址&#xff1a;点击这里下载源码 获取全套代码&#xff0c;或咨询更多代码…

【JavaEE】Spring Boot 日志详解

一 日志概述 日志是用于记录系统运行状态、用户操作和重大事件的工具。 1.日志的用途 系统监控 监控现在几乎是一个成熟系统的标配, 我们可以通过日志记录这个系统的运行状态, 每⼀个方法的响应时间, 响应状态等, 对数据进行分析, 设置不同的规则, 超过阈值时进行报警. 比如统…

科技赋能,无障碍出行的新纪元

在现代社会&#xff0c;公共设施的建设不仅是衡量城市文明程度的标尺&#xff0c;更是实现社会公平与包容的重要载体。对于盲人群体而言&#xff0c;一个完善的公共设施网络&#xff0c;意味着他们能够更加独立、自信地融入社会&#xff0c;享受与视力健全者同等的公共服务与便…

湖南(品牌控价)源点调研 手机价格管理对品牌的影响分析

前言&#xff1a;手机自发明以来&#xff0c;过去一直是国际品牌占主导地位&#xff0c;从最初的爱立信、摩托罗拉&#xff0c;到后来的诺基亚、三星&#xff0c;苹果在这个手机行业里&#xff0c;竞争激励&#xff0c;没有百年企业&#xff0c;每个品牌的盛衰都有背后的历史背…

软件测试——Java自动化测试Selenium

目录 1.运行环境 2.环境配置 3.第一个浏览器程序 4.浏览器操作 5.元素定位 6.元素操作常用API 7.特殊元素定位与操作 8.元素三大等待 9.iframe操作 10.window操作 11.select选择框 12.js语句执行 13.鼠标操作 14.截图操作 1.运行环境 编译工具&#xff1a;IDEA …

教师自费出书的注意事项有哪些?

备案主编专著的优势&#xff1a;&#xff08;qkfb88688&#xff09; 1、副高、正高职称最高学术成果 2、专著可以代替核心 3、周期短、出书快、可重复使用 4、双号齐全&#xff1a;ISBN&#xff5e;CIP 5、版权长期有效 教师自费出书有以下一些注意事项&#xff1a; 关于书稿&…

python---正则表达式

本章目标: 1:能够知道在Python中使用正则要导入的模块; [了解] re模块 2:能够使用re模块匹配单个字符; [重点] \d \w 正则表达式的概述: 基本介绍 正则表达式,也叫做规则表达式,通常会说成[正则] 实际上正则表达式就是指符合一定规则的字符串,同时他能用于检查一段…

MyBatis拦截器使用方法

前言 MyBatis拦截器可以做的工作&#xff1a;SQL修改&#xff0c;分页操作&#xff0c;数据过滤&#xff0c;SQL执行时间性能监控等。 1. 基础介绍 1.1. 核心对象 从MyBatis代码实现的角度来看&#xff0c;MyBatis的主要的核心部件有以下几个&#xff1a; Configuration&am…

OpenStack所支持的虚拟化技术和KVM、Xen、Hyer-V、QEMU、Libvirt说明

OpenStack所支持的虚拟化技术主要包括以下几种&#xff1a; KVM (Kernel-based Virtual Machine): 基于Linux内核的虚拟化技术。在Linux内核中添加一个虚拟化模块来实现虚拟机的运行。是OpenStack用户使用较多的虚拟化技术&#xff0c;支持OpenStack的所有特性。通过QEMU模拟器…

【NoSQL数据库】Redis——哨兵模式

Redis——哨兵模式 Redis哨兵 Redis——哨兵模式1.什么是哨兵机制&#xff08;Redis Sentinel&#xff09;1.1 哨兵的作用 2.哨兵的运行机制3.故障处理redis常见问题汇总1、redis缓存击穿是什么&#xff1f;如何解决&#xff1f;2、redis缓存穿透是什么&#xff1f;如何解决&am…

详解!Python怎么配置环境变量

详解&#xff01;Python怎么配置环境变量 许多刚开始学习编程的初学者在 python的安装上会抱有一定的疑惑&#xff0c;为什么明明已经安装好了 python 环境&#xff0c;但并不能运行python 代码&#xff0c;这是因为 python 的安装过程中还有一步环境变量的配置&#xff0c;接…

微信“对方正在输入”背后的小心思:保持隐秘感,享受宁静的交流

微信&#xff0c;这个伴随我们起居、工作的超级应用&#xff0c;不仅仅是一款聊天软件&#xff0c;它几乎成为了我们社交生活的一部分。它的便捷&#xff0c;让我们的日常沟通如鱼得水。然而&#xff0c;在这个几乎完美的社交工具中&#xff0c;有一个功能&#xff0c;让不少人…

CSS真题合集(二)

CSS真题合集&#xff08;二&#xff09; 11. css3新增特性12. css3动画12.1 关键帧动画 (keyframes)12.2 animation12.3 transition12.4 transform 13. grid网格布局13.1 使用display: grid或display: inline-grid的HTML元素。13.2 定义网格13.3 13.4 自动填充和自动放置13.4 对…

信号发生器如何将频率调大,步尽值改成10

&#x1f3c6;本文收录于「Bug调优」专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&&…