01为什么要引入齐次坐标,齐次坐标的意义
1. 使用齐次坐标,可以表示 平行线在透视空间的无穷远处交于一点。在欧氏空间,这变得没有意义,所以欧式坐标不能表示。即:齐次坐标可以表示无穷远处的点
2. 引入齐次坐标的目的主要是合并矩阵运算中的乘法和加法,表示为x=P∗X的形式。即它提供了用矩阵运算把二维、三维甚至高维空间中的一个点集从一个坐标系变换到另一个坐标系的有效方法。
02原神的渲染部分
首先是全局光照部分。因为原神自己宣称是全动态光照……直接光部分好说,反正都已经延迟了,而间接光部分,做成动态的也就是lpv,以及升级版的vxgi。lpv……成本在于最开始的rsm部分,也就是和原始光照数量有关。如果只处理天光,体素再稀疏点还是有可能在手机上运行的。而且看之前有人拆包的结果,里面确实有个lpv的库(顺便一提lpv
UE内置,vxgi也有插件进行支持)。但这种东西,真想在手机上跑还是疯狂了一些。而且原神在时间变动和天气变动时光照其实是有跳变的,如果真是实时GI好像并不会这样,这种跳变更容易出现在多套烘焙数据切换上。而且就原神的画面效果……多套烘焙数据插值也完全能做到。所以我觉得原神使用烘焙probe方式的间接光照还是可能的,即使包里有lpv,也可能只是放着没用,这个要看抓帧结果了。
03UGUI研究院之界面中使用DoTween
因为NGUI中已经有UITween了,可是UGUI中是没有这样的Tween的。我看过UGUI的Demo它的实现方式是用Animator来做的,这样每一个需要移动的对象就要挂上一个AmimationController并且还要去编辑动画。。
04Unity Shader之TRANSFORM_TEX方法
1. TRANSFORM_TEX主要作用是拿顶点的uv去和材质球的tiling和offset作运算, 确保材质球里的缩放和偏移设置是正确的
下面这两个函数是等价的。
o.uv = TRANSFORM_TEX(v.texcoord,_MainTex);
o.uv = v.texcoord.xy * _MainTex_ST.xy + _MainTex_ST.zw;
05OpenGL片段着色器是如何进行线性插值
OpenGL的片段着色器在进行渲染之前,实际上会对out里面的数据,例如FragPos,Normal进行线性插值例如顶点(1,0,0,1)和(3,0,0,1),就会对中间的像素插值(2,0,0,1)。由于一个面上的顶点法向量都是相同的,所以Normal进行插值的时候,同一个面上生成的值都是相同的。
在片段着色器中,会对面一个插值出来的像素计算它的颜色,进行(ambientColor + diffuse) * objColor的计算,由于每个像素点FragPos不同,所以会计算出如上图那样立方体面中心很亮的结果,而不是像我理解那样先计算正方形面的四个顶点,然后进行插值渲染,这样就会出现一个颜色都相同的立方体面。
06OpenGL的矩阵转换及投影矩阵的计算方法
在OpenGL中,眼睛空间中的3D点投影到近平面(投影平面)上。下图显示了眼空间中的点(xe,ye,ze)如何投影到近平面上的(xp,yp,zp)。裁剪(视锥剔除)和NDC转换都已集成到GL_PROJECTION 矩阵中。

07unity --24 物理引擎--刚体,碰撞体
什么时候用碰撞体? 物体非背景,要有“阻挡”效果的时候,如墙壁,桌椅,地板等等。
什么时候用刚体? 物体非背景,即有“阻挡”效果,又有物理受力效果。
什么时候使用触发器?物体可以是背景,也可以非背景,强调“接触”效果。如生命球,能拾取的金币等等。
08Lua循环与迭代器函数
Lua 语言提供了以下几种循环处理方式:
while 循环:在条件为 true 时,让程序重复地执行某些语句。执行语句前会先检查条件是否为 true
for 循环:重复执行指定语句,重复次数可在 for 语句中控制。
repeat...until :重复执行循环,直到 指定的条件为真时为止
循环嵌套:可以在循环内嵌套一个或多个循环语句(while do ... end;for ... do ... end;repeat ... until;)
09Lua的rawset和rawget浅析
raw:原始的,未加工的。
rawset/rawget:对“原始的”表进行直接的赋值/取值操作。
所以,raw方法就是忽略table对应的metatable,绕过metatable的行为约束,强制对原始表进行一次原始的操作,也就是一次不考虑元表的简单更新。另外,一次原始的操作其实并不会加速代码执行的速度,效率一样。

10linux下cp覆盖原so文件时引起的段错误原因
动态链接器本身也是一个共享对象,但有一些特殊性。首先,动态链接器本身不可以依赖于其他任何共享对象;其次动态链接器本身所需要的全局和静态变量的重定位工作由它本身完成。对于第一个条件,可以人为的控制在编写动态链接器时保证不使用任何系统库、运行库;对于第二个条件,动态链接器必须在启动时有一段非常精巧的代码可以完成这项艰巨的工作而同时又不能用到全局和静态变量。这种具有一定限制条件的启动代码往往被称为自举(Bootstrap)。
动态链接器入口地址即是自举代码的入口,当操作系统将进程控制权交给动态链接器时,动态链接器的自举代码即开始执行。自举代码首先会找到它自己的GOT。而GOT的第一个入口保存的即是“.dynamic”段的偏移地址,由此找到了动态连接器本身的“.dynamic”段。通过“.dynamic”中的信息,自举代码便可以获得动态链接器本身的重定位表和符号表等,从而得到动态链接器本身的重定位入口,先将它们全部重定位。从这一步开始,动态链接器代码中才可以开始使用自己的全局变量和静态变量。
而cp操作导致已经重定位的数据重新初始化,导致在调用函数的时候出现找不到函数符号的情况,进而导致程序崩溃
11链接、装载与库 --- 动态链接
动态链接器本身也是一个共享对象,但有一些特殊性。首先,动态链接器本身不可以依赖于其他任何共享对象;其次动态链接器本身所需要的全局和静态变量的重定位工作由它本身完成。对于第一个条件,可以人为的控制在编写动态链接器时保证不使用任何系统库、运行库;对于第二个条件,动态链接器必须在启动时有一段非常精巧的代码可以完成这项艰巨的工作而同时又不能用到全局和静态变量。这种具有一定限制条件的启动代码往往被称为自举(Bootstrap)。
动态链接器入口地址即是自举代码的入口,当操作系统将进程控制权交给动态链接器时,动态链接器的自举代码即开始执行。自举代码首先会找到它自己的GOT。而GOT的第一个入口保存的即是“.dynamic”段的偏移地址,由此找到了动态连接器本身的“.dynamic”段。通过“.dynamic”中的信息,自举代码便可以获得动态链接器本身的重定位表和符号表等,从而得到动态链接器本身的重定位入口,先将它们全部重定位。从这一步开始,动态链接器代码中才可以开始使用自己的全局变量和静态变量。
12怎么屏蔽苹果 watchOS 的 OTA 自动更新?
1、打开手机上的 Watch App,进入通用 -> 用量 -> 软件更新 -> 删除,删除储存的 OTA 更新。(如果没有则跳过此步)
2、打开 iBeta 尝鲜派官网 , 点击“屏蔽 OTA 软件更新”,需要向右滑一滑,找到最后一个屏蔽OTA更新,选择安装至 Apple Watch。
3、安装描述文件,并重启手表,即可屏蔽掉 OTA 更新
4、如果是iphone 直接打开 ibeta.me 然后右滑找到 屏蔽OTA更新,点击立即下载,下载后在通用-->描述文件里面找到tvOS,然后安装完成即可。

点击排行

站长推荐

猜你喜欢
站点信息
- 建站时间:2016-04-01
- 文章统计:728条
- 文章评论:82条
- QQ群二维码:扫描二维码,互相交流
