Posted on 四月 19, 2024
Android学习笔记
AndroidAutoSize
集成非常简单,gradle引入以后,在manifest中,添加:
<application> <meta-data android:name="design_width_in_dp" android:value="360"/> <meta-data android:name="design_height_in_dp" android:value="640"/> </application>
就可以以宽度360dp的设计写ui,在不同的设备上相同的UI。
Posted on 四月 10, 2024
由Google Play签名app bundle
上传app bundle至Google Play,选择由Google Play签名。Google Play创建签名,本地打包时用本地创建的签名打包就可以,不必把本地签名上传至Google Play。上传的是本地签名的app bundle,Google Play重新对其签名。
参考:
https://developer.android.com/studio/publish/app-signing#generate-key
Updated on 四月 3, 2024
更新Android Studio及更新targetSdkVersion 33 后的问题解决
Invoke-customs are only supported starting with android 0 –min-api 26
按照网上办法设java1.8,不起作用。最后按照编译时报错的最后一页,点击上面的解决方案,去设置,解决此问题。不明所以。
Unable to make field private final java.lang.String java.io.File.path accessible: module java.base does not “opens java.io” to unnamed module
修改Gradle Plugin版本与Gradle版本匹配。
修改gradle的java版本
gradle.properties
增加一行
org.gradle.java.home=
Apps targeting Android 12 and higher are required to specify an explicit value for android:exported
when the corresponding component has an intent filter defined.
Manifest中启动activity增加android:exported
Posted on 十二月 5, 2023
Flutter集成uni小程序(uniMP)踩坑
按照官方文档分别集成调试Android、iOS。
https://nativesupport.dcloud.net.cn/UniMPDocs/UseSdk/android.html
https://nativesupport.dcloud.net.cn/UniMPDocs/UseSdk/ios.html
Android
初始化SDK时报has leaked ServiceConnection io.dcloud.feature.unimp. that was originally bound here
不能在Activity中初始化,需要在Application中初始化,布造为什么。需要将APP的Application设为一个继承自FlutterApplication的类,在其中初始化uniMPSDK。
启动小程序报 运行路径中无uni小程序(__UNI_XXXXXXXX)应用资源,请检查应用资源是否正常部署
参照demo,在build.gradle中添加
aaptOptions { additionalParameters '--auto-add-overlay' //noCompress 'foo', 'bar' ignoreAssetsPattern "!.svn:!.git:.*:!CVS:!thumbs.db:!picasa.ini:!*.scc:*~" }
iOS
初始化SDK时崩溃,报Terminating app due to uncaught exception ‘NSInvalidArgumentException’, reason: ‘*** -[NSBundle initWithURL:]: nil URL argument’
对照着demo将:
Link Binary With Libraries添加完整;
Copy Bundle Resources添加完整。
不知道是哪个操作使得不报错。
Updated on 十一月 20, 2023
CentOS 7 vsftpd报331 Please specify the password. PASS ******** 530 Login incorrect. 问题解决
在阿里云上新开了个服务器,第一步搭建ftp可把我难住了,按照之前的日志,http://zhuqiaochu.truestudio.tech/%e9%98%bf%e9%87%8c%e4%ba%91centos%e6%90%ad%e5%bb%baftp/ 就是不行,报331 Please specify the password. PASS 530 Login incorrect.
闲话少叙,解决办法是:
编辑 /etc/pam.d/vsftpd 将 auth required pam_shells.so 注释掉,然后重启vsftpd。
其原因是,默认配置只允许能shell的用户登录,但是创建ftp用户时,往往为了安全,禁止ssh登录,一般多为/usr/sbin/nologin,所以就无法登录了。所以把其注掉,就可以登录了。
参考:
https://blog.csdn.net/weixin_42272246/article/details/123631435
Updated on 七月 13, 2022
Android近期心得
RxPermissions
申请权限的,感觉不错。
Android sqlite批量insert
项目需要一次性插入大量数据,for循环一条一条insert,考虑到速度可能会比较慢,测试了一下速度,1w条耗时517秒。
查找资料,for循环前开启事务,结束后提交事务,速度提升至12.33秒。这个速度已经可以接受了。
再有可以分组,每组一条语句insert 400条数据(据说超过500条会报错),速度可以进一步大幅提升。由于上述方法速度已经可以满足需求,分组insert没有测试。具体可以参考:
https://www.jianshu.com/p/2a698774d950
Android使用IceDiscovery心得
需要引入IceDiscovery包:
implementation group: 'com.zeroc', name: 'ice', version: '3.7.7' implementation group: 'com.zeroc', name: 'icediscovery', version: '3.7.7'
另外代码中需要配置:
initData.properties.setProperty("Ice.Plugin.IceDiscovery", "com.zeroc.IceDiscovery.PluginFactory");
注意参考官方demo
Posted on 二月 10, 2022
Flutter新坑笔记
Exception in thread “main” java.util.zip.ZipException: zip END header not found
release报上述错误,解决办法是删除 root directory 下的 .gradle
文件夹。
cd ~ rm -rf .gradle
Updated on 十二月 29, 2021
Dart笔记
一直稀里糊涂地用,没仔细学习一下。记录一下在官网学习的笔记吧。
sync* 、 async* 、yield
标记为sync*的函数返回一个Iterable,用例如下:
void main() { final numbers = getRange(1, 10); for (var value in numbers) { print('$value'); } } Iterable<int> getRange(int start, int end) sync* { for (int i = start; i <= end; i++) { yield i; } }
async*和sync*类似,不过是异步的,返回值会被包裹在Stream中,用例如下:
Stream<int> countForOneMinute() async* { for (int i = 1; i <= 60; i++) { await Future.delayed(const Duration(seconds: 1)); yield i; } } main() async { await for (int i in countForOneMinute()) { print(i); // 打印 1 到 60,一个秒一个整数 } }
函数
=> 表达式 是 { return 表达式; } 的简写
匿名函数
([[类型] 参数[, …]]) {
函数体;
}
运算符
~/ 除并取整
命名式构造函数
const double xOrigin = 0; const double yOrigin = 0; class Point { double x = 0; double y = 0; Point(this.x, this.y); // Named constructor Point.origin() : x = xOrigin, y = yOrigin; }
Posted on 十二月 23, 2021
Substance Painter学习笔记
视图操作改为和Blender一致
https://blog.csdn.net/ttm2d/article/details/104044207
基本操作
Updated on 十二月 25, 2021
Blender学习笔记
基本操作快捷键(个人理解)
快捷键 | 功能 |
按住鼠标中键拖动 | 旋转视角 |
Ctrl(Command) + 鼠标中键上下拖动 | 缩放(感觉滚轮滚动更常用) |
Shift + 鼠标中键拖动 | 拖动视角 |
Alt(Option) + 中键点击 | 设点击点为视角中心点 |
按住鼠标中键拖动 后 按住Alt(Option) | 吸附45°滚动 |
按住Alt(Option) 后 按住鼠标中键拖动 | 吸附180°滚动 |
Num1 | Y轴视角 |
Num3 | X轴视角 |
Num7 | Z轴视角 |
Num9 | 180°切换视角 |
Num2,4,6,8 | 不同方向旋转 |
Num5 | Perspective,Orthographic切换 |
Shift + 空格 | 呼出快捷操作 |
Shift + 空格 后 B | 选择 |
B | 框选物体 |
C | 刷子选择 |
Shift + 空格 后 空格 | 放置Cursor |
Shift + 鼠标右键 | 放置Cursor(感觉这个更方便) |
Shift + S 后选择 | 可以设物体Origin为防止Cursor点 |
Shift + 空格 后 G | 选择物体并移动 |
上述过程中按住Ctrl | 按一定距离拖动 |
物体选中状态时 按 G 拖动鼠标 | 移动物体 |
上述过程中按住中键 | 吸附到xyz轴拖动 |
上述过程中按住Shift | 高精度拖动 |
Shift + 空格 后 R | 选择物体并旋转(注意,旋转白色圈是 按照当前视角旋转) |
上述过程中按住Ctrl | 每5°旋转 |
物体选中时按R | 旋转物体 |
上述过程中按住中键 | 按xyz轴旋转 |
上述过程中按 X,Y,Z | 按xyz轴旋转(感觉很有用) |
上述过程中按住Shift | 高精度旋转 |
Shift + 空格 后 S | 选择物体并缩放(点击面按面缩放, 点击白圈模型等比缩放) |
物体选中状态时 按 S 拖动鼠标 | 缩放 |
上述过程中按住中键 | 按xyz轴缩放 |
Alt + G,R,S | 移动、旋转、缩放清零 |
数字键盘 . | 选中物体居中(感觉很有用) |
Shift + A | 添加物体(感觉挺常用) |
N | 呼出Context Toggle |
Tab | 进入编辑模式 |
Shift + Z | 切换Viewport Shading |
Alt + Z | 开启透视 |
Ctrl + Alt + Q | 开启/关闭三视图(感觉挺有用) |
M | 创建集合,类似ps的文件夹,把几个图层 0.放入进去 |
Ctrl + P | 设为父子关系(一起移动)。先选择子, 再Shift选择父,然后Ctrl + P,选择Keep Transform |
Ctrl + B 出来+后 放开按键,鼠标左键选择范围 | 只渲染当前范围内的图像 |
上述模式下,Ctrl + Alt + B | 退出当前模式 |
Ctrl + A | 调出Apply菜单,应用变换 |
使用Tip
- Context Toggle中,View栏,如果选中Lock To 3D Cursor,则缩放时以Cursor为锚点缩放
- 在Shading tab下的Display render preview可以查看渲染效果。点击Render Properties,可以选择Render Engine,Cycles更真实。在Cycles模式下渲染的图会有噪点,可以选中Denoise设置降噪
- 视窗右上角鼠标移过去会变成+,点击拖动新增加一个视窗。作用是例如一个视窗看渲染效果,一个视窗编辑物品位置等
编辑模式
1,2,3 | 切换选择点、边、面 |
选择边模式下,Alt + 左键点击某个边 | 选择顶面连续的边(循环边) |
同上Ctrl + Alt + 左键点击某个边 | 选择所有的立边(并排边) |
选择边或点后,Ctrl + B | 倒角(bevel)(感觉很有用)(倒角后可以设置 一些参数,例如倒角的面数) |
O + 滚轮缩放 | 点击O后,缩放滚轮,可以调整区域,在区域内 的点,可以使用G等操作平滑拉抻 |
Ctrl + 1,2,3,4,5 | 表面细分修改 |
Shift + D | 复制 |
P | 使选中部分变成单独的对象 |
A | 选中所有点 |
Alt + A | 取消选中所有点 |
Ctrl + I | 反选(感觉挺有用) |
H | 隐藏 |
Alt + H | 取消隐藏 |
E | 挤出 |
Ctrl + R | 环切 |
上述滚动滑轮 | 增加减少环切个数 |
I | 内插面 |
Shift + E | 调整折痕 |
Shift + N | 重新计算法线方向 |
L | 选择关联(例如选择了一个面后,按L,可以选择 这个面的关联面) |
Vertex Paint
Shift + K | 将颜色应用于整个Mesh |
雕刻模式
点击顶部Sculpting进入雕刻模式
F | 缩放雕刻范围 |
选择一种雕刻,按住Ctrl | 反方向雕刻(个人理解) |
UV Editing模式
Ctrl+E | 调出菜单,例如可以选择Mark Seam 标记缝合边 |
A全选,U -> Unwrap | 展开UV |
UV编辑器下点击任意一点,再按L | 选中这片UV上所有 |
标记缝合边就像把盒子沿着边剪开一样,如何剪才能将4个面展开到平面上。
操作就是选边然后Ctrl + E Mark Seam,A全选,U Unwrap,不断去尝试。
表面细分修改(Subdivision Surface Modifier)和平滑着色(Smooth Shading)
使用表面细分修改,物体面数就发生改变了,变得更多,但是tab进编辑发现还是编辑低模。个人猜想表面细分修改的初衷是显示高模但是保持低模方便编辑。
平滑着色没有改变物体面数。
具体区别有待进一步发掘。
平滑着色可以开启Auto Smooth,并是设置角度,一定角度范围内才平滑。
细分Subdivide
和表面细分类似,但是改变了低模面数。可以设置Number of Cuts,Smoothness。
吸附(snap)
开启吸附后,可以选择吸附在什么上,如果选择面,则移动的点会吸附到其他物体的面上。如果开启Project Individual Elements,则其他牵连移动的点也会吸附在物体的面上。
材质参数
Roughness | 粗糙度。数值越小,越接近镜面 |
Subsurface | 次表面散射。数值越大,越通透的感觉, 类似蜡、皮肤、塑料,越小越不透明,类似水泥、粉笔。 参考https://www.jianshu.com/p/7ec66604c4a2 |
Transmission | 透明度,越大越透明 |
甜甜圈糖皮拖动形成液滴Tips
当创建完糖皮后,使用Subdivision增加一倍面数,不要太高,不容易编辑,也不要太低,没有效果。
拖动液滴时,只保留最底部边,要把其他所有的点都隐藏掉(Ctrl + I反选),不然其他点会拖累。
甜甜圈撒粒子
首先创建一粒糖。
选择糖皮,点击右侧的Particle Properties,点击+,选择hair,在Render里选择Object,然后在下方的Instance Object选择一粒糖。
Render下可以选择Scale。调整Scale Randomness会随机大小,但是对于糖粒不适合,糖粒应该是粗细一致,长度不一的。正确的方法是:
复制几个糖粒,修改其长度、弯曲程度。将这几个糖粒放到一个collection中,上述Render中选择Collection(而非原来的Object),这样在下方就可以选择刚才创建的Collection了。
Collection每项随机权重问题
点选Use Count,可以修改各个Object的比例。
在Hair下面点击Advanced,会多出速度、旋转、物理。调整旋转,Orientation Axis(坐标系轴向)选择Normal(法线)。这样会绕着糖皮表面法线旋转。Randomize:全方位旋转随机化。Randomize Phase:绕法线旋转随机化。
权重绘制(Weight Paint)
选择糖皮,Ctrl + Tab进入权重绘制模式。绘制权重区域。绘制完成后,回到粒子,Vertex Groups -> Density选择Group,这样就按照权重绘制糖粒了。
Object Data Properties可以看到所有的Vertex Group。
遇到的问题:生成的粒子在糖皮的下方。
原因是糖皮使用了Modifier -> Solidify,所以需要把粒子的Emission -> Source -> Use Modifier Stack勾选,就可以了。
另有一说是可以修改Modifier的Solidify的Normals的Flip,虽然也成功,但是感觉不是正解。这个功能好像是改变法线方向。
随机颜色
首先给糖粒赋上材质,然后到shading页面,下方可视化编程区域,新增一个(Shift + A)Input -> Object Info。可以看到有个Random节点,它可以产生0 – 1的随机浮点数。如何利用这一点产生随机的颜色呢?在添加一个Converter -> ColorRamp。在渐变上添加不同颜色,修改Linear为Constant,使之不渐变。这样,所有的糖粒都变成随机颜色了。
关于复制后,edit object,原来的object也跟着改变的问题
是由于快捷键按错了的原因,应该用Shift + D,而非Option + D(关联复制)
查看与设置Origin
开启、关闭查看Origin是在右上Show Overlays,点击其右侧向下剪头,选中Origins。
设置Origin可以在物体点击右键 -> Set Origin设置,其中,Origin to Geometry是设在几何中心(应该是)。
Texture绘制
在Texture Paint中,如果Object显示的是粉色,则说明此Object是没有Texture的。
创建Texture图片后,在Shading页面,选中物体后,在下方面板创建一个Image Texture,并把前面创建的Testure填入。这样就可以在Texture Paint页面绘制Texture了。
为了追求自然, 可以设置Texture Mask。
对于面包上深色的部分, 可以使用笔刷颜色黑色,Blend为Overlay,这样笔刷涂抹的地方就加深颜色了。
程序置换
在Shading页面,选中物体,在下方面板创建Noise Texture。
想要快速查看纹理效果,可勾选插件:Node Wrangler,Ctrl+Shift+左键点击节点 就可在模型上快速看到其效果。
查看效果后发现好像拉抻了,需要添加一个纹理坐标节点:Input > Texture Coordinate。Object连接到Vector。
添加Vector -> Displacement,噪声的Fac连接到Height,Displacement连接到材质输出的Displacement。Ctrl+Shift+左键点击Principled BSDF即可看到结果。
个人感觉这种效果是法线贴图那种,不是真的凹凸。若要实现真的凹凸,需要设置材质中的Setting -> Displacement,选择Displacement and Bump。调整Displacement的Scale,看到最终效果。
置换的基础是根据网格点来完成的,所以网格点数越高效果越好,点数不够粗糙尖锐就增大Subdivision Surface Modifier的参数。
注:白色凸起,黑色凹陷
多个噪点源叠加
复制Noise Texture,调整Scale。现在的目的是混合叠加两个Noise Texture,方法是新增Color -> MixRGB,将两路Noise Texture输出赋到MixRGB两个颜色输入上。调整Fac值为1,混合模式选择Add。再将输出Color输出到Displacement的Height。
利用ColorRamp形成颜色Gate的效果
在大噪点输出和MixRGB之间,新增加ColorRamp,调整黑色颜色位置,使得强度低于一半的噪点都显示黑色,输出连接到MixRGB。
凹凸叠加颜色加深
还是使用MixRGB,color1使用的是Texture的Color,噪点mix的结果,输出到MixRGB的Fac上,Color2设为凸起的颜色,混合模式为Overlay。Fac输入的深色部分,取的是Color1,浅色部分取的是Color2.
杯子建模笔记
Bridge Edge Loops
制作杯子把,最后与杯子相连,快速的方法是将要连接的两个面删掉,然后选中这两个面的四个顶点,点击F3,搜索bridge,点击搜索结果,即生成了桥接。
调整折痕
选中杯身与杯把的接面四个点,Shift + E调整折痕。
折痕属于视觉效果调整,不会增加定点数,而环切线会
重新计算法线方向
制作液体发现显示不正常。点击Overlays,开启Face Orientation,发现所有物体都是蓝色的,唯独液体是红色的。蓝色的表示正面,红色表示背面。
进入编辑模式,全选所有,Shift + N重新计算法线方向(Recaculate Normals)。
杯子与液体间有间隙导致折射看起来不对的问题
解决办法是,穿模。把液体稍微放大,穿过杯子内壁,使之没有缝隙。尚无更好的解决办法。
复制材质
选中被粘贴的Object,然后按Shift,选需要已经有材料可以复制的Object,然后点击Ctrl + L,可以选择Link的选项。
上述过程是link,如果改变了材质,所有link此材质的都会改变。如果想只改变某个Object的材质,应该点击材质名称右边的数字,即可copy。
为一个Object分配不同的材质
新创建材质或link材质然后独立复制出来,编辑模式下选择要使用该材质的面,然后点击Assign,即可应用。
Blender 2.8 油管最火教程播放地址:
https://www.bilibili.com/video/BV1az4y1X7Tr
https://www.bilibili.com/video/BV1sh411o7eE
https://www.bilibili.com/video/BV1M54y1S7CB
https://www.bilibili.com/video/BV1V54y1i7K6
笔记:
https://www.yuque.com/docs/share/f9eac9d3-0610-40e9-817d-cd41c50c6a49?#
https://www.yuque.com/docs/share/8f56a780-0c60-4e19-af82-c67af3db9006?#
https://www.yuque.com/docs/share/72fafb76-ea4e-45e2-8e21-d6378a2be3b6?#
https://www.yuque.com/docs/share/45719055-6dc3-45e9-b1c9-9ff9791754ea?#