31797浏览
查看: 31797|回复: 0

[ESP8266/ESP32] CopperCube 配合 FireBeetle 改变球体颜色

[复制链接]
这次使用CopperCube 制作2个球体,然后可以通过 FireBeetle 控制这两个球体的颜色。
1.     创建一个新的场景,删除场景中自带的立方体,然后创建一个球体(Sphere)
image001.png

2.     新建的球体是自带贴图的,这个贴图来自前面立方
image002.png

  
  • 关闭
  • [url=]上传图片[/url]
  • [url=]相册图片[/url]
  • [url=]网络图片[/url]

3.     选中球体,在Textures中选择第一个空贴图,然后在属性的 Materials 中点击更换贴图
image003.png

4.     之后球体上面的贴图就为空了

image004.png
5.     为了便于观察,我们给图赋予一个颜色,选中物体后右键,在弹出菜单中 选择 “Modify Selection”->”Setvertex Colors”。 在弹出的调色板上选择你喜欢的颜色
image005.png

6.     球体变成了红色,选中球体后再使用右键调出菜单进行: clone
image006.png

7.     现在场景中有2个红色球体了,为了便于观察,改成动态光照,在Materials中选择 Dynamic
image007.png

8.     在场景中创景一个光源

image008.png
9.     让光源动起来,具体方法在上次的文章中介绍过
image009.png

10.  之后保存场景为FBTest.ccb文件
image010.png

11.  编写一个响应键盘的JavaScripe文档,当收到不同的按键时,改变球体的颜色。文件命名为 FBTest.js 放到和上面 FBTest.ccb 同一个目录下
  1. // register key events
  2. ccbRegisterKeyDownEvent("keyPressedDown");
  3. function keyPressedDown(keyCode)
  4. {
  5.                //z
  6.                if (keyCode == 90)
  7.                {
  8.                               var sN = ccbGetSceneNodeFromName("sphereMesh1");
  9.                               print(ccbGetSceneNodeMeshBufferCount(sN) );
  10.                               for (var x=0; x<ccbGetMeshBufferVertexCount(sN,0); ++x) {
  11.                               ccbSetMeshBufferVertexColor(sN, 0, x, 0x00ff0000);
  12.                               }
  13.                }
  14.                //x
  15.                if (keyCode == 88)
  16.                {
  17.                               var sN = ccbGetSceneNodeFromName("sphereMesh1");
  18.                               print(ccbGetSceneNodeMeshBufferCount(sN) );
  19.                               for (var x=0; x<ccbGetMeshBufferVertexCount(sN,0); ++x) {
  20.                               ccbSetMeshBufferVertexColor(sN, 0, x, 0x0000FF00);
  21.                               }
  22.                }
  23.                //c
  24.                if (keyCode == 67)
  25.                {
  26.                               var sN = ccbGetSceneNodeFromName("sphereMesh2");
  27.                               print(ccbGetSceneNodeMeshBufferCount(sN) );
  28.                               for (var x=0; x<ccbGetMeshBufferVertexCount(sN,0); ++x) {
  29.                               ccbSetMeshBufferVertexColor(sN, 0, x, 0x0000FF00);
  30.                               }
  31.                }
  32.                //v
  33.                if (keyCode == 86)
  34.                {
  35.                               var sN = ccbGetSceneNodeFromName("sphereMesh2");
  36.                               print(ccbGetSceneNodeMeshBufferCount(sN) );
  37.                               for (var x=0; x<ccbGetMeshBufferVertexCount(sN,0); ++x) {
  38.                               ccbSetMeshBufferVertexColor(sN, 0, x, 0x000000FF);
  39.                               }
  40.                }
  41.               
  42.                print(keyCode );
  43. }
复制代码


12.  编写FireBeetle代码,我们需要使用 FireBeetle 的蓝牙功能,将其模拟为一个蓝牙键盘,当有不同按键按下后,发送按键信息。这样当CopperCube生成的 EXE 收到后,会改变颜色。
  1. /**
  2.    This example turns the ESP32 into a Bluetooth LE keyboard that writes the words, presses Enter, presses a media key and then Ctrl+Alt+Delete
  3. */
  4. #include <BleKeyboard.h>
  5. #define PINA 12
  6. #define PINB  4
  7. #define PINC 16
  8. #define PIND 17
  9. BleKeyboard bleKeyboard;
  10. void setup() {
  11.   Serial.begin(115200);
  12.   Serial.println("Starting BLE work!");
  13.   pinMode(PINA, INPUT_PULLUP);
  14.   pinMode(PINB, INPUT_PULLUP);
  15.   pinMode(PINC, INPUT_PULLUP);
  16.   pinMode(PIND, INPUT_PULLUP);
  17.   bleKeyboard.begin();
  18. }
  19. void loop() {
  20.   if (bleKeyboard.isConnected()) {
  21.     if (digitalRead(PINA) == LOW) {
  22.       Serial.println("Sending 'z'");
  23.       bleKeyboard.print("z");
  24.       delay(200);
  25.     }
  26.     if (digitalRead(PINB) == LOW) {
  27.       Serial.println("Sending 'x'");
  28.       bleKeyboard.print("x");
  29.       delay(200);
  30.     }
  31.     if (digitalRead(PINC) == LOW) {
  32.       Serial.println("Sending 'c'");
  33.       bleKeyboard.print("c");
  34.       delay(200);
  35.     }
  36.     if (digitalRead(PIND) == LOW) {
  37.       Serial.println("Sending 'v'");
  38.       bleKeyboard.print("v");
  39.       delay(200);
  40.     }
  41.   }
  42. }
复制代码


编译之后就能看到最终的结果了。



您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2023 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail