CopperCube 配合 FireBeetle 改变球体颜色

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

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

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

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

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

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

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

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

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

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

11.编写一个响应键盘的JavaScripe 文档,当收到不同的按键时,改变球体的颜色。文件命名为 FBTest.js 放到和上面 FBTest.ccb 同一个目录下

// register key events
ccbRegisterKeyDownEvent("keyPressedDown");

function keyPressedDown(keyCode)
{
	//z
	if (keyCode == 90)
	{
		var sN = ccbGetSceneNodeFromName("sphereMesh1");
		print(ccbGetSceneNodeMeshBufferCount(sN) );
		for (var x=0; x<ccbGetMeshBufferVertexCount(sN,0); ++x) {
		ccbSetMeshBufferVertexColor(sN, 0, x, 0x00ff0000);
		} 
	}

	//x
	if (keyCode == 88)
	{
		var sN = ccbGetSceneNodeFromName("sphereMesh1");
		print(ccbGetSceneNodeMeshBufferCount(sN) );
		for (var x=0; x<ccbGetMeshBufferVertexCount(sN,0); ++x) {
		ccbSetMeshBufferVertexColor(sN, 0, x, 0x0000FF00);
		} 

	}


	//c
	if (keyCode == 67)
	{
		var sN = ccbGetSceneNodeFromName("sphereMesh2");
		print(ccbGetSceneNodeMeshBufferCount(sN) );
		for (var x=0; x<ccbGetMeshBufferVertexCount(sN,0); ++x) {
		ccbSetMeshBufferVertexColor(sN, 0, x, 0x0000FF00);
		} 
	}


	//v
	if (keyCode == 86)
	{
		var sN = ccbGetSceneNodeFromName("sphereMesh2");
		print(ccbGetSceneNodeMeshBufferCount(sN) );
		for (var x=0; x<ccbGetMeshBufferVertexCount(sN,0); ++x) {
		ccbSetMeshBufferVertexColor(sN, 0, x, 0x000000FF);
		} 

	}
	
	print(keyCode );
}
  1. 编写FireBeetle 代码,我们需要使用 FireBeetle 的蓝牙功能,将其模拟为一个蓝牙键盘,当有不同按键按下后,发送按键信息。这样当CopperCube 生成的 EXE 收到后,会改变颜色
  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
*/
#include <BleKeyboard.h>
#define PINA 12
#define PINB  4
#define PINC 16
#define PIND 17

BleKeyboard bleKeyboard;

void setup() {
  Serial.begin(115200);
  Serial.println("Starting BLE work!");
  pinMode(PINA, INPUT_PULLUP);
  pinMode(PINB, INPUT_PULLUP);
  pinMode(PINC, INPUT_PULLUP);
  pinMode(PIND, INPUT_PULLUP);
  bleKeyboard.begin();
}

void loop() {
  if (bleKeyboard.isConnected()) {
    if (digitalRead(PINA) == LOW) {
      Serial.println("Sending 'z'");
      bleKeyboard.print("z");
      delay(200);
    }
    if (digitalRead(PINB) == LOW) {
      Serial.println("Sending 'x'");
      bleKeyboard.print("x");
      delay(200);
    }

    if (digitalRead(PINC) == LOW) {
      Serial.println("Sending 'c'");
      bleKeyboard.print("c");
      delay(200);
    }
    if (digitalRead(PIND) == LOW) {
      Serial.println("Sending 'v'");
      bleKeyboard.print("v");
      delay(200);
    }
  }
}
https://www.bilibili.com/video/BV1TZ4y1b7LY?share_source=copy_web

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

CAPTCHAis initialing...