自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(215)
  • 收藏
  • 关注

原创 ERROR: commit ...: email address ... is not registered in your account, and you lack ‘forge committe

最后重新git push。

2024-03-04 10:31:23 458

原创 Kanzi常用操作4

十四、如何自定义消息首先创建属性然后将数据设置为消息即可十五、如何通过代码获取节点以空节点为例ScreenSharedPtr screenNode = getScreen();//获取屏幕单例 turnleftcontrolNode_ = screenNode->lookupNode<EmptyNode2D>( "#turnleftcontrol");//lookupNode获取节点,其中模板参数是节点类型,函数的实参是节点的别名经过测试,节点名不能..

2021-09-10 13:36:17 955

原创 20、计算机图形学——微平面理论和Cook-Torrance BRDF

一、微平面理论如下图中的海面,从远处看,就像镜子一样平整,反光很强烈但是从近处看,却能法线,海平面是有微小的凹凸不平。可以认为,海平面是由无数个微小的镜面组成,而每个微小的镜面都有法线如果法线的分布地较为密集,如下图中上面的情况,那么就可以认为微平面的法线都和垂直方向挨得很近,那么,反射出来的光形成的效果就接近镜面,和金属反光很类似但是如果法线分布的方向较为松散,如下图中下面的情况,那么就可以认为微平面的法线都和垂直方向成角较大,那么,光反射的方向就会朝四面八方,就不会有高光

2021-08-28 15:16:31 872

原创 19、计算机图形学——蒙特卡洛路径追踪

一、蒙特卡洛积分蒙特卡洛积分主要解决的问题是当被积函数很难被以函数的形式表示时,需要对该被积函数指定概率密度函数并进行多次采样。然后用采样得到的局部面积除以局部采样点的概率来近似得到整体的面积(积分)。当采样次数足够多时,将这些整体近似值除以采样次数,就能得到一个整体值得平局,则该整体值的平均就表示该积分的近似值。可见,采样次数越多,最后得到的值越精确二、蒙特卡洛路径追踪在https://blog.csdn.net/Master_Cui/article/details/1

2021-08-26 19:31:45 1082

原创 18、计算机图形学——BRDF与渲染方程

一、BRDF(Bidirectional Reflectance Distribution Function)双向反射分布函数基于https://blog.csdn.net/Master_Cui/article/details/119787704中的内容,就可以基于辐射度量学理解反射先看下图中法线的右侧,符合照度(Irradiance)模型,表示单位面积上接受到了能量再看法线的左侧,符合radiance模型,表示将单位面积上,沿着单位立体角将能量辐射出去所以,反射就可以理解为:根据镜面反

2021-08-25 09:39:29 1580

原创 Kanzi常用操作3

十、如何添加动画首先选择节点,添加一个animation player然后选中创建出来的动画片段并双击之后会弹出一个坐标系将想要控制的属性拖入该坐标系的左侧栏坐标系中的手掌图标负责拖动坐标系以及属性控制线如果想要编辑控制线,首先要选中十字图标,然后单击控制线,此时控制线变成白色最后选中四边形图标,就可以添加控制点了再次选回十字图标,就可以编辑该控制点添加多个属性控制点并编辑,就可以形成动画了十一、如何添加状态机以及调试首先.

2021-08-24 16:53:24 670

原创 17、计算机图形学——辐射度量学

一、为什么要引入辐射度量学因为white-style光线追踪即使加入了光的反射和折射,但是在计算光线的亮度时,依然采用的是blinn-phong光线模型,而blinn-phong光线模型本身就不是一种精确模型,所以在此基础上的white-style光线追踪得到的渲染结果也是不精确地。而辐射度量学能够精确的表示光线的物理性质,所以为了更好的渲染结果,将辐射度量学引入了光线追踪。二、要用到的概念2.1、Radiant Energy(辐射能量)辐射能量的意思就是光线辐射产生的电磁能量,单位

2021-08-18 19:50:44 864

原创 16、计算机图形学——基于AABB进行光线追踪的加速(下)

三、KD-tree加速光线追踪前面已经说过,均匀空间划分存在一个划分粒度的问题,所以,为了解决这个问题,就出现了基于树形结构的空间划分。基于KD-tree进行空间划分就是其中一种KD-tree每次划分的时候,会按顺序沿着x、y、z轴进行依次划分(也可以不按照这个顺序来),如下图所示,首先进行x轴方向的划分,然后对两个部分进行y方向的划分,然后再进行x轴方向的划分,依次递归,当每个小AABB足够小或者每个AABB找那个的物体个数很少时,递归终止在KD-tree中,存储物体信息的节点都是叶子结.

2021-08-17 19:30:44 435

原创 Kanzi常用操作2

1、绑定绑定类似于C++中的引用,一个变量的变化会引起连锁反应如何设置绑定slider控制以文字显示为例首先找到要控制哪个节点的哪个属性,比如要控制text的Text属性,就可以在text节点上添加一个绑定这就表明要控制text节点的Text属性然后要找到由哪个节点的哪个属性来控制(绑定)text节点的Text属性,这里使用slider的value控制text节点的Text属性,只需要将slider的value属性拖动到白框中即可绑定完成后,text节点的Text属性的颜

2021-08-16 17:30:57 787

原创 15、计算机图形学——基于AABB进行光线追踪的加速(上)

white-styled光线追踪需要计算光线与每个三角形面的交点,并投影到像素上,并且还要考虑光线的反射和折射,所以,计算量很大(GPU你忍一下)那么,如何降低white-styled光线追踪的计算量呢一个基本的思想就是把三维场景中的物体用一个外壳包起来,如果光线和这个外壳都没有交点,那么,必然和物体的表面也没有交点基于这个思想,就产生了AABB一、AABB(Axis-Aligned Bounding Box)AABB中文翻译是轴对齐包围盒,三对儿面都与xyz轴平行为

2021-08-16 11:49:15 644

原创 14、计算机图形学——whited-style光线追踪

一、为啥需要光线追踪以往的Blinn-Phong光照模型在渲染场景时,对于光的漫反射和镜面反射都只会计算一次,但是实际上在一个场景里面,光有可能既存在反射也存在折射,而且,反射次数和折射次数并不只是一次因此,Blinn-Phong在精确计算光照强度的时候是不太准确的,而光线追踪渲染方式,就是为了解决Blinn-Phong光照模型存在的问题二、光线追踪的三个假设在光线追踪渲染模型中,光是沿着直线传播,光线和光线之间不会产生碰撞,所有的光路都是可逆的三、光线追踪的过程首先

2021-08-15 17:07:48 402

原创 Kanzi常用操作1

1、如何让球体不走样将摄像机的参数FOV调整小一些,原理见计算机图形学笔记2、如何添加整个工程的背景直接在视口上面加一个图片即可3、如何修改2D字体的颜色??2D字体实际是一张图片,前景是字体,背景是其他部分,所以,修改2D字体颜色需要修改前景颜色的画刷4、如何修改3D字体的颜色直接修改font color5、如何将图片或者文字做成可点击添加两个属性6、如何给状态机中添加属性选中状态机中的状态组然后选

2021-08-13 10:05:40 457

原创 13、计算机图形学——阴影贴图

一、图形学中阴影的产生原理阴影产生的原因就在于相机能看到的地方而光源无法照射到,所以,基于此,就有了下面的过程首先从光源的方向放一个相机,进行一次透视投影,但是,只保存透视投影后深度信息然后,从真正的相机视角去对当前场景进行透视投影之后,将相机看到的所有点,全部通过光源的透视投影矩阵重新投影到光源相机上,又会得到一副深度图然后,就可以进行判断了,如下图中的橙色线所示,橙色线所触及到的点就通过光源相机进行投影得到的深度与真正相机看到之后再投影到光源相机得到的深度是相等的,那么就说明

2021-08-07 16:33:31 827

原创 如何将文件从安卓设备中拷贝到PC中

比如现在在sdcard下有个叫做1.txt的文件如何使用adb命令把这个文件拷贝到PC下呢操作如下,直接使用adb pull即可

2021-08-06 18:03:25 710

原创 12、计算机图形学——几何(网格细分与网格简化)

一、网格细分1.1、概念网格细分指的是将原有模型上的网格分成更多个网格,从而将模型变得更加精细,提高渲染出来的效果,让画面更加漂亮下图就是一个网格细分的示意,左图是细分前的效果,右图是细分后的效果可见,细分后的面数更多,模型更加精细。1.2、网格细分算法1.2.1、Loop算法首先说一下,Loop是人名,不是循环。Loop算法的主要过程如下:(1)、将三角形按照下图的方式一分为四(2)、计算细分完之后,新顶点的位置如上图所示,白色顶点就是新顶点..

2021-08-06 13:32:22 4666 1

原创 adb安装apk是出现INSTALL_FAILED_INSUFFICIENT_STORAGE

出现了INSTALL_FAILED_INSUFFICIENT_STORAGE,就表明安卓设备的磁盘空间不足,就需要删除一些文件,释放一些空间具体操作:1、adb shell进入命令行模型2、su获取超级用户权限,因为后面要删除的时候可能会提示权限不够,所以提前获取超级用户权限3、df查看磁盘使用率最后看看那个使用率高,就使用命令rm进行删除即可...

2021-08-06 11:32:22 1646

原创 11、计算机图形学——几何(贝塞尔曲线与曲面)

一、贝塞尔曲线1.1、简介下图中蓝色的线就是贝塞尔曲线,每条贝塞尔曲线都有控制点(下图中有四个),贝塞尔曲线必须经过第1个和最后一个控制点,并且需要和第起止控制点相切1.2、如何得到贝塞尔曲线首先找到三个控制点然后取线段b0b1上的一个点,获取的方法依然是线性插值然后取线段b1b2上的一个点,获取的方法也是线性插值得到两个线性插值的点后,连接着两个点,并在这两个点组成的线段上再次进行线性插值取点将上图中线性插值出来的所有点B02都连接起来就是一条贝塞尔

2021-08-03 12:40:41 2480

原创 10、计算机图形学——几何介绍(曲面的分类以及示例)

一、隐式曲面及示例隐式曲面顾名思义就是不能直接看到曲面的形状,而是通过表达式的方式来表示曲面。所以,该曲面的优势就是查找某个点是否在曲面上比较快,而该类型曲面缺点就是曲面的表达不直观比如下面这三个就是典型的隐式曲面表达式很不直观,但是很容易判断出点是否在曲面上除了几何表示之外,隐式曲面还可以通过其他隐式曲面的交并补得到对应的隐式曲面比如下图还有下图通过对隐式曲面的交并补操作,可以得到稍微复杂的曲面。除了上述两种方式外,还可以使用符号距离函数和水平集来表示隐式曲

2021-08-01 18:55:10 2893

原创 9、计算机图形学——纹理的应用(环境贴图、凸凹贴图、法线贴图以及位移贴图)

一、环境贴图比如下面的这张图,左边的是一张表示环境光的纹理,这个纹理表示屋子内部四面八方都是啥样,右边是一个茶壶, 将纹理映射到这个茶壶上,就能茶壶上渲染出周围的环境还有这样的球形环境贴图(sphere map)左边依然是环境贴图,就像地球仪把地球表面展开成右边的平面。随着球的移动,环境贴图的内容也会发生改变,所以,球形环境贴图只能表示一部分环境, 比茶壶的环境贴图表达的信息要少球形环境贴图通常也叫材质球但是,由于球形贴图展开后,边缘部分会产生一定程度的畸变,所以就产生了立方盒纹

2021-07-29 20:28:20 1736

原创 8、计算机图形学——纹理的相关问题及解决办法

一、纹理映射的相关问题1.1、小纹理大像素大纹理小像素简单说就是纹理很小,但是被平铺在了一块像素超过纹理贴图大小的区域上,这样就会导致一个纹理像素要对应多个屏幕像素,导致纹理失真走样如下图所示造成这种情况的原因就是因为采用了最近邻纹理采样的方式,最近邻纹理采样的原理如下其中,图中的十字表示纹理坐标(纹理坐标是0-1的小数,所以可以取非整数),因为左上角的纹理像素的中心点与纹理坐标的位置最接近,所以,直接将该纹理像素返回,所以最终结果就是一个深蓝色。而再对其他纹理坐标进行采样时,得

2021-07-29 20:27:10 1738

原创 7、计算机图形学——图形管线渲染与纹理映射

一、图形渲染管线管线渲染其实就是将三维物体如何呈现到计算机屏幕上的过程,图形渲染管线的整体大致流程如下顶点处理过程就是进行MVP变换,最终得到一系列的二维坐标点。而三角化就是将这一系列的二维坐标点进行组装成三角形或者线顶点处理和三角化结束后,得到了一些列的图形,那么,接下来自然是对这些图形进行光栅化光栅化结束之后,就要对对应的像素进行着色,因此进入了着色处理阶段,着色阶段可以通过光照模型或者纹理映射的方式对光栅化的像素进行着色着色之后,还有根据深度信息

2021-07-29 20:25:26 716

原创 6、计算机图形学——着色频率、插值与插值的矫正

一、着色频率通过光照模型可知,最终的光照结果和光照点的法线向量关系很大。所以,根据不同的法线向量,就有不同的着色方法。在图形学中,法线分为:面法线、顶点法线和像素法线。光照和这三种法线相互作用,就有了三种不同的渲染频率1.1、面着色(flat shading)面着色就是利用物体面表上的每个三角形的法线向量进行光照强度的计算,进而决定物体表面的颜色。该方法效果较差(物体表面不光滑,棱角较多)1.2、顶点着色 (vertex shading)顶点着色就是利用每个顶点的法向量来计算

2021-07-29 20:23:19 1025

原创 5、计算机图形学——着色与光照模型

一、着色(shading)的概念着色,顾名思义就是给物体上色。在计算机图形学中,着色就是确定物体上或者图形上的每个像素的颜色。像素或者物体表面的颜色受光照和材质的影响,光照中光线的颜色一定程度上决定物体表面的颜色。而物体的材质决定物体对光线中不同颜色分量的反射率。反射率越高,相应的颜色分量占比越大。就拿头发染色来说,如果头发没有进行任何染色,那么头发的材质就不会反射任何光线,所以,看到的颜色就是黑色的。如果对头发进行染色后,头发的材质发生了变换,导致头发会反射阳光中一定的颜色分量,最终合成出来棕

2021-07-29 20:19:47 2256

原创 4、计算机图形学——光栅化、抗锯齿、画家算法和深度缓冲算法(Z-buffer)

一、光栅化(Rasterization)1.1、概念光栅raster这个词就是德语中屏幕的意思,光栅化的意思就是将图像绘制在屏幕上进行显示。1.2、三角形光栅化过程简述首先,为什么要以三角形的光栅化为例呢,因为三角形是最基本的多边形,大部分的模型都是用一个个三角形表示,任意的其它多边形其实都可以转化成多个三角形的形式,因此以三角形的光栅化为例如下图所示,给定了三个点,如何将得到的三角形绘制在右边的屏幕上?首先需要进行采样,采样的意思就是对给定的函数进行离散化,比如上图中,要实

2021-07-29 20:18:06 3872

原创 3、计算机图形学——模型视图变换、投影变换与视口变换

一、模型视图变换模型视图变换主要是为了让摄像机回归到世界坐标的原点并且和拍摄物体一起进行变换,便于计算模型视图变换的根据就是物体和相机的相对位置不变,那么,投影得到的图片也是不变的首先规定相机拍摄方向朝向-Z,相机的位置位于e,相机的正上方可以用向量t来表示,那么将相机移动到世界坐标的原点的过程如下图首先需要将相机平移值世界坐标原点,平移矩阵就可以写成然后分别需要将g旋转到-Z,将t旋转到Y,将g叉积t的方向旋转到X,然而,这个旋转对应的旋转矩阵并不容易写出,但是如果将Z旋转到-

2021-07-29 20:13:18 2883 2

原创 2、计算机图形学——3D变换

1.1、3D点和向量的齐次坐标表示根据1中的第二部分齐次坐标可知,3D点的齐次坐标可表示为1.2、3D仿射变换的一般形式根据1中的第三部分变换的组合可知,3D点的仿射变换的齐次坐标方程可表示为1.3、3D缩放根据1中的2D线性变换中的缩放变换可类推3D的缩放变换的齐次坐标为1.4、3D平移根据1中的2D变换中的平移变换可类推3D的平移变换的齐次坐标为1.4、3D旋转变换3D旋转变换与2D旋转略有不同,2D旋转只是绕着原点进行逆时针旋转,而3D空

2021-07-29 20:10:49 1145

原创 1、计算机图形学——2D变换与齐次坐标

一、2D变换1、缩放变换缩放变换就是将图形上的点的各个维度同时放大或者缩小,比如,讲一个图片的长宽都缩小0.5倍则缩小之后,新的图片上的点(x', y')可以表示为用写成矩阵的形式就是如果长和宽缩放因子不一样,就把缩放因子单独写一下即可对应的图形就是这样的2、对称变换对称变换就是变换前的图片和变换后的图片按坐标轴对称,例如按Y轴的对称变换结果如下图形上每一点的Y轴坐标不变,但是横坐标都加了个负号写成矩阵的形式就是这样的3、剪

2021-07-29 20:07:09 2799 1

原创 如何使用TeamViewer在局域网内远程连接另一台电脑

TeamViewer一般都用来远程连接两台电脑,但是最近工作的时候,就要使用teamview进行局域网远程控制。具体操作如下1、首先需要配置两台电脑在同一个网段,并关闭两台电脑的防火墙2、然后修改两台电脑的TeamViewer设置,首先点击其他----》选项之后按照下图设置接收LAN的连接呼入即可...

2021-05-18 11:38:15 7659

原创 C和C++中的##和#

一、C和C++中#C和C++中的#和宏一起使用,表示将#后面的内容转换为字符串示例#define TEST(n) #nint main(int argc, char const *argv[]){ cout<<TEST(9)<<endl; cout<<TEST(qwe)<<endl; return 0;}上述代码中,当执行TEST(9)和TEST(qwe)时,会将其分别替换为#9和#qwe,进而将#9和#qwe转换为"

2021-05-18 10:57:10 930

原创 gtest源码分析

一、流程分析gtest是谷歌的一个单元测试框架,使用时,main函数的编写大致如下int main(int argc, char **argv){ //... ::testing::InitGoogleTest(&argc, argv); RUN_ALL_TESTS(); system("pause"); return 0;}上述的代码中的核心就是RUN_ALL_TESTS,实现很简单inline int RUN_ALL_TESTS() { return

2021-05-06 15:09:40 732

原创 23.C++类对象的指针为空时,调用成员函数不会挂掉

最近工作的时候遇到了一个现象,当通过C++类对象的指针调用没有使用this指针的成员函数时,不会出现段错误测试代码#include <iostream>using namespace std;class test{public: test(); ~test(); void func_not_use_this(){cout<<__func__<<endl;} void func_use_this() {cout<<__fun

2021-04-28 13:33:25 1100

原创 如何使用OpenCppCoverage检查单元测试的行覆盖率

OpenCppCoverage是在Windows检查单元测试行覆盖率的一个工具。官网在OpenCppCoverage (github.com)首先需要安装对应的可执行文件,点击链接Releases · OpenCppCoverage/OpenCppCoverage (github.com)找到对应的版本下载接口安装方式有两种,源码安装和二进制安装,这里选择二进制安装一路下一步即可安装完之后,打开Windows的命令行工具,这里用powershell,输入OpenCpp,.

2021-04-28 11:00:34 2089 3

原创 如何给安卓应用添加权限

一、首先找到APP中的AndroidManifest.xml,在其中添加下面两行代码<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />添加完之后,xml文件如下图二、在app的Java文件夹,找到Jav

2021-04-27 10:03:33 5257

原创 安卓应用如何引用动态库

在APP的build.gradle中添加如下代码release { jniLibs.srcDirs += ['../../../../lib/android/release'] }其中后面的是一个相对路径,根据动态库的位置自行修改添加完之后,gradle文件是这样的注意安卓的路径中千万不能有空格上述只是添加了一个release版本的动态库,debug版本的动态库也是同理...

2021-04-27 09:59:32 281

原创 22.Visual Studio提示由于找不到dll,无法继续执行代码的问题解决

最近在给代码做单元测试,用的是已经编译好的gtest动态库,将包含路径和链接路径都设置好以后,运行程序的时候会提示如下错误提示找不到dll相关原理在Windows下,生成dll时,都会生成一个同名的.lib文件,该.lib文件记录包含dll中的函数名和位置,dll包含实际的函数和数据,.exe(执行程序)使用lib文件链接到dll文件。在应用程序的可执行文件中,存放的不是被调用的函数代码,而是dll中相应函数代码的地址,从而节省了内存资源。dll和lib文件必须随应用程序一起发.

2021-04-27 09:57:23 40012 7

原创 21.Ubuntu安装软件时出现无法获得锁 /var/lib/dpkg/lock-frontend的问题解决

在安装完Ubuntu虚拟机后,每次启动时,如果想安装一些软件,总会出现下面的错误该错误表示有进程正在执行安装操作,获取了安装锁,所以其他进行想要安装时,需要等待安装锁被释放,但是刚开机根本没有程序在安装...不知道为啥解决办法:删除对应目录下的文件sudo rm /var/lib/dpkg/lock-frontend删除后,再安装就好了...

2021-04-16 14:36:30 1224

原创 如何使用Android studio创建签名

一、点击build中的generate signed bundle / apk二、选择APK,点击Next并选择Create New三、填写签名信息其中,各个条目的意义如下Key store path : 签名文件路径Password : 签名密码Confirm : 确认密码Alias : 别名Validity ( years ) : 有限期 (年)First and Last Name : 全名Organizational Unit :

2021-04-15 19:35:24 4129

原创 20.Android studio提示Cmake Error executing external native build for cmake...

最近在用户Android studio打开一个工程后,点击sync时,报了这样一个错误上网查了很多资料,没解决。同时,点击run按钮后,build窗口提示了这样的错误查看对应工程下的cmakelists,查看错误提示的路径下的cmake文件打开上述文件,提示无法找到这个文件原因:之所以没有找到,也是在创建该工程的时候,名字叫updatefromkzb,因而生成的源文件也叫这个名字,而自己后来手动改了这个源文件名,导致源文件名和cmakelists中的文件名不一致,在使用A

2021-04-15 18:59:03 767

原创 17、Kanzi插件——2D插件官方示例

一、示例效果二、代码结构代码结构如下图前两个文件mf_sample_grabber.cpp和mf_sample_grabber.hpp实现了一个回调类;主要的作用是:当对视频进行帧采样时,将采样结果送回至UI线程(主线程)进行画面像素的刷新文件video_controller.h定义了一个接口类,包括play,pause,stop等播放动作,而在video_util.h和video_util_mf.cpp对上述接口进行了具体的定义和实现最后,在插件代码中分别vide.

2021-04-15 10:00:48 937

原创 16、Kanzi插件——通过Kanzi Engine插件创建自定义动作+代码解析

一、创建自定义动作当收到燃油变化的消息时,相应动作代码整体如下class PLUGINDEMO_API Plugindemo : public kanzi::Node3D{public: //字符串属性 static kanzi::PropertyType<kanzi::string> StringProperty; //引用节点的字符串 static kanzi::PropertyType<kanzi::string> NodeRefByStringProp

2021-04-12 09:24:29 543

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除