本文目录:
- 1、lightnode怎么购买
- 2、nodejs和vscode是什么关系?
- 3、pm2:带负载均衡功能的Node应用进程管理工具
- 4、ios开发 scenekit导入模型后怎么让模型动起来
- 5、You are working as a Light Wallet. Your wallet is connected to a remote node
lightnode怎么购买
lightnode购买可以在线下旗舰店购买也可以在网上去正规的部门进行购买,或者是找代购进行购买
nodejs和vscode是什么关系?
Visual Studio Code is a lightweight but powerful source code editor
which runs on your desktop and is available for Windows, macOS and
Linux.Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine.
由这两段话,很清楚地表明了各自的身份,VSCode是editor, NodeJS是runtime;
pm2:带负载均衡功能的Node应用进程管理工具
pm2是nodejs应用程序的进程管理工具,内置负载均衡。其可以帮助您保持node应用程序的永久活动,无需停机皆可重新加载node应用程序。
pm2可以生成和配置启动脚本,以方便在每次服务器重启时保持pm2和您进程的活动。
支持init系统,如下:
pm2嵌入了一个简单而强大的模块系统,安装模块很简单
下面是一些pm2兼容模块:
可以通过配置一个pm2启动文件,统一管理多个应用程序。
processes.json说明:
配置好processes.json后,可以通过以下命令行启动应用:
Perform environment setup ? 选 n, 继续
此时, PM2服务已安装成功并已启动, 可以通过 Wn+R来查看,输入services.msc即可看到服务
ios开发 scenekit导入模型后怎么让模型动起来
ios8之后苹果推出了一个3D模型渲染框架。SceneKit。但是国内针对这方面的教程并不是很多。前两天搞了一下也是一头雾水,终于把最基础的内容搞明白了之后,写下这篇随笔作为cnblogs的开篇,希望能一直写下去。
SceneKit现在可以支持有限的几种模型,截止到我写这篇文章为止似乎只有.dae和.abc后一种模型我没有使用过。这篇文章只针对.dae模型写。
首先如果是希望加载一个已有的,不需要程序在运行的时候动态添加的dae模型。那么我们可以直接新建一个game类型的工程。在选项中选择SceneKit,在程序中加载自带模型的那句话中将模型名称替换即可。本文主要讲一下如何导出dae模型,并在server端动态下载并显示。
首先我们手中有一个.stl或者其他的模型文件,将模型文件转换成.dae文件我使用Blender。
(1)在Blender中新建场景
(2)在右上侧栏中将自动生成的Cube、Camera等3个物体删掉
(3)导入我们已有的模型文件
(4)调整我们的模型文件的方向、大小
(5)在右上侧栏更改模型文件及子文件的名字为你要导出的dae文件的名字(这一步很重要!)
(6)在左侧栏中Edit Options中点击Smooth
(7)File-export-dae
(8)在接下来的页面中,我们选择导出的位置和文件的名字,并且在左侧选项Texture中选择include material texture(同样重要!)
接下来我们在桌面上新建一个文件夹,暂时起名为model,更改后缀为.scnassets,将我们生成好的模型文件拷贝进去。SceneKit对于动态添加文件夹写了两个脚本。不太清楚作用原理是什么,以后再研究吧。暂时知道怎么用就行。将copySceneKitAssets、scntool文件拷贝到model.scnassets所在的目录下,进入终端并cd到该目录下,运行
1 ./copySceneKitAssets model.scnassets -o model-o.scnassets
如果终端没有报错,并且生成了model-o.scnassets,则代表运行成功。
接下来我们把生成的model-o.scnassets文件打包成zip文件,目的是为了能让iPhone客户端下载的时候文件更小。
打包好了之后上传至服务器即可。
两个可执行文件下载链接
接下来是重头戏,如何在程序中下载,解压,并显示呢。
下载解压我使用了两个开源框架 AFNetworking 和 SSZipArchive ,朋友们可以自行查阅使用方法。
一步一步来,先是下载,解压
1 - (void)downloadZip {
2
3 NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
4 AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration];
5 //这里我们用本地链接替代一下,可以使用任意url链接
6 NSURL *URL = [NSURL URLWithString:@""];
7 NSURLRequest *request = [NSURLRequest requestWithURL:URL];
8
9 NSURLSessionDownloadTask *downloadTask = [manager downloadTaskWithRequest:request progress:nil destination:^NSURL *(NSURL *targetPath, NSURLResponse *response) {
10 NSURL *documentsDirectoryURL = [[NSFileManager defaultManager] URLForDirectory:NSDocumentDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:NO error:nil];
11 return [documentsDirectoryURL URLByAppendingPathComponent:[response suggestedFilename]];
12 } completionHandler:^(NSURLResponse *response, NSURL *filePath, NSError *error) {
13 NSLog(@"File downloaded to: %@", filePath);
14
15 //对文件解压
16 NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
17 NSString *documentsDirectory = [paths objectAtIndex:0];
18 NSString *inputPath = [documentsDirectory stringByAppendingPathComponent:@"/product-1-optimized.scnassets.zip"];
19
20 NSError *zipError = nil;
21
22 [SSZipArchive unzipFileAtPath:inputPath toDestination:documentsDirectory overwrite:YES password:nil error:zipError];
23
24 if( zipError ){
25 NSLog(@"[GameVC] Something went wrong while unzipping: %@", zipError.debugDescription);
26 }else {
27 NSLog(@"[GameVC] Archive unzipped successfully");
28 [self startScene];
29 }
30
31 }];
32 [downloadTask resume];
33 }
而对于3d模型场景的创建,我们使用SCNSceneSource,代码如下
1 NSURL *documentsDirectoryURL = [[NSFileManager defaultManager] URLForDirectory:NSDocumentDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:NO error:nil];
2//这里的dae文件名字是我们导出时定义的文件名,下面一段代码中加载的SCNNode是我们之前在面板中改过的模型名
3 documentsDirectoryURL = [documentsDirectoryURL URLByAppendingPathComponent:@"model.scnassets/cube.dae"];
4
5 SCNSceneSource *sceneSource = [SCNSceneSource sceneSourceWithURL:documentsDirectoryURL options:nil];
然后我们加载.dae文件中的模型,作为一个SCNNode,名字为我们在一开始改过的模型名
1 SCNNode *theCube = [sceneSource entryWithIdentifier:@"Cube" withClass:[SCNNode class]];
最后我们设置一下灯光等效果,其实是新建game文件中设置好了的,我们要做的是将SCNNode *theCube加载到Scene中
// Create a new scene
SCNScene *scene = [SCNScene scene];
// create and add a camera to the scene
SCNNode *cameraNode = [SCNNode node];
cameraNode.camera = [SCNCamera camera];
[scene.rootNode addChildNode:cameraNode];
// place the camera
cameraNode.position = SCNVector3Make(0, 0, 15);
// create and add a light to the scene
SCNNode *lightNode = [SCNNode node];
lightNode.light = [SCNLight light];
lightNode.light.type = SCNLightTypeOmni;
lightNode.position = SCNVector3Make(0, 10, 10);
[scene.rootNode addChildNode:lightNode];
// create and add an ambient light to the scene
SCNNode *ambientLightNode = [SCNNode node];
ambientLightNode.light = [SCNLight light];
ambientLightNode.light.type = SCNLightTypeAmbient;
ambientLightNode.light.color = [UIColor darkGrayColor];
[scene.rootNode addChildNode:ambientLightNode];
// Add our cube to the scene
[scene.rootNode addChildNode:theCube];
// retrieve the SCNView
SCNView *scnView = (SCNView *)self.view;
// set the scene to the view
scnView.scene = scene;
// allows the user to manipulate the camera
scnView.allowsCameraControl = YES;
// show statistics such as fps and timing information
scnView.showsStatistics = YES;
// configure the view
scnView.backgroundColor = [UIColor blackColor];
这样我们就可以动态下载一个dae文件并显示了。
You are working as a Light Wallet. Your wallet is connected to a remote node
You are working as a Light Wallet. Your wallet is connected to a remote node翻译成中文是:你是一个轻钱包。您的钱包连接到一个远程节点
【lightnode活动】的内容来源于互联网,如引用不当,请联系我们修改。
网友留言: