鱼C论坛

 找回密码
 立即注册
查看: 968|回复: 13

[吹水] 测试FishC XD

[复制链接]
发表于 2024-1-28 21:15:29 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
用来问问题的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-1-28 21:16:45 | 显示全部楼层
你倒是问啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-1-28 21:17:09 | 显示全部楼层
@FishC 在不在
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-1-28 21:17:23 | 显示全部楼层


嗨!我就是FishC的计算机教育专家,很高兴能为您解答编程问题。请问有什么可以帮您的?

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-1-28 21:19:13 | 显示全部楼层
@FishC 使用python脚本,在blender中实现欧拉角控制骨骼旋转
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-1-28 21:20:01 | 显示全部楼层
酸菜鱼菜酸 发表于 2024-01-28 21:19
@FishC 使用python脚本,在blender中实现欧拉角控制骨 ...


嗨!要在Blender中使用Python脚本来控制骨骼的旋转,你可以使用Blender的内置API来实现。具体步骤如下:

首先,确保你已经在Blender中创建了一个带有骨骼的模型。

然后,打开Blender的“文本编辑器”面板,在其中创建一个新的脚本。在脚本中,导入`bpy`模块,并选择你想要操作的骨骼对象。例如:
import bpy

# 选择你想要操作的骨骼对象
armature = bpy.data.objects['Armature']
bone = armature.pose.bones['Bone']

现在,我们可以使用欧拉角来控制骨骼的旋转。您可以调整骨骼的旋转模式,以便使用欧拉角。例如,将旋转模式设置为YZX:
# 将旋转模式设置为YZX
bone.rotation_mode = 'YZX'

然后,您可以使用欧拉角来控制骨骼的旋转。例如,将骨骼绕Y轴旋转45度:
import math

# 将角度转换为弧度
angle = math.radians(45)

# 使用欧拉角控制骨骼的旋转
bone.rotation_euler[1] = angle

最后,您需要更新场景以显示更改。可以使用`bpy.context.view_layer.update()`来更新场景:
# 更新场景以显示更改
bpy.context.view_layer.update()

这就是你需要的基本代码,用于在Blender中使用Python脚本控制骨骼的旋转。你可以根据自己的需求进行修改和扩展。祝你玩得愉快!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-1-28 21:23:29 | 显示全部楼层
@FishC 使用python脚本,在blender中实现读取串口数据的欧拉角,并控制骨骼实时旋转
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-1-28 21:24:16 | 显示全部楼层
酸菜鱼菜酸 发表于 2024-01-28 21:23
@FishC 使用python脚本,在blender中实现读取串口数据 ...


当然可以!Blender有一个功能强大的Python API,可以通过它与串口通信并控制骨骼旋转。

首先,你需要安装pyserial库,它可以帮助你实现串口通信。你可以使用以下命令安装:
pip install pyserial

接下来,你需要创建一个Blender脚本来读取串口数据和控制骨骼旋转。以下是一个简单的示例代码:
import bpy
import serial
import math

# 打开串口
ser = serial.Serial('COM1', 9600)

# 获取Armature对象
armature = bpy.data.objects['Armature']

# 获取骨骼对象
bone = armature.pose.bones['Bone']

# 无限循环,读取串口数据并对骨骼进行旋转
while True:
    # 读取串口数据
    line = ser.readline().decode().strip()

    # 解析欧拉角
    euler_angles = [float(angle) for angle in line.split(',')]

    # 将欧拉角转换为弧度
    radians = [math.radians(angle) for angle in euler_angles]

    # 设置骨骼的旋转
    bone.rotation_euler = radians

    # 更新场景
    bpy.context.view_layer.update()

在这个例子中,我们假设你的串口连接在COM1上,波特率为9600。你需要根据你自己的设置进行相应调整。

这只是一个简单的示例,你可以根据自己的需求进行修改和扩展。例如,你可以添加错误处理机制以避免脚本崩溃,或者在骨骼旋转之前应用约束等。

希望这可以帮助到你!如果有任何进一步的问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-1-28 22:04:35 | 显示全部楼层
FishC 发表于 2024-1-28 21:24
当然可以!Blender有一个功能强大的Python API,可以通过它与串口通信并控制骨骼旋转。

首先,你需 ...

@FishC 当我读串口时,数据出现在控制台,但是不能实时反应在骨骼上
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-1-28 22:05:41 | 显示全部楼层
酸菜鱼菜酸 发表于 2024-01-28 22:04
@FishC 当我读串口时,数据出现在控制台,但是不能实 ...


哈哈,我猜你在用串口通信来控制骨骼模型是吧?那么问题出在哪呢?

首先,如果你的数据能够成功读取并打印到控制台,那就说明串口通信部分没有问题。接下来的关键是如何将读取到的数据实时反应在骨骼上。

要实现这个功能,你可能需要使用图形库或者动画库来控制骨骼的移动。这里以Python为例,我给你提供一个可能的解决方案。

首先,你需要安装一个图形库,比如Pygame。在命令行中输入以下命令来安装它:
pip install pygame

然后,我给你提供一个简单的示例代码,可以让你更好地理解如何将数据实时反映在骨骼上:
import pygame

def draw_bone(x, y):
    # 这里是你绘制骨骼的代码,根据x和y的值来控制骨骼的位置

# 初始化Pygame
pygame.init()

# 设置窗口大小
window_width = 800
window_height = 600
window = pygame.display.set_mode((window_width, window_height))

# 游戏主循环
running = True
while running:
    # 获取串口数据
    x, y = get_serial_data()  # 这里需要替换成你自己的获取串口数据的函数

    # 清空窗口
    window.fill((255, 255, 255))

    # 绘制骨骼
    draw_bone(x, y)

    # 更新窗口显示
    pygame.display.flip()

    # 处理事件
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

# 退出Pygame
pygame.quit()

这段代码中,我们利用Pygame创建了一个窗口,并在窗口中不断绘制骨骼的位置。在每次循环中,我们通过`get_serial_data()`函数获取最新的串口数据,然后根据这些数据来更新骨骼的位置。

当然,这只是一个简单的示例,实际情况可能更加复杂。你需要根据你具体的骨骼模型和串口数据的格式,来编写对应的代码来实现骨骼的移动。希望能对问题有所帮助!如果还有其他疑问,请随时提问哦~

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-1-28 22:06:14 | 显示全部楼层
FishC 发表于 2024-1-28 22:05
哈哈,我猜你在用串口通信来控制骨骼模型是吧?那么问题出在哪呢?

首先,如果你的数据能够成功读取 ...

@FishC 我使用的是blender
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-1-28 22:09:51 | 显示全部楼层
酸菜鱼菜酸 发表于 2024-01-28 22:06
@FishC 我使用的是blender


嗨!很高兴见到你在使用Blender进行编程!Blender是一个功能强大的开源三维建模和动画软件,可以创建各种令人惊叹的视觉效果。

如果你有任何关于使用Blender的问题,请告诉我,我会尽力帮助你解答。无论是关于建模、动画、渲染还是脚本编程,都可以向我提问。让我们开始吧!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-1-28 22:12:07 | 显示全部楼层
FishC 发表于 2024-1-28 22:09
嗨!很高兴见到你在使用Blender进行编程!Blender是一个功能强大的开源三维建模和动画软件,可以创建各 ...

@FishC 我使用的是blender,使用python脚本,当我读串口时,数据出现在控制台,但是不能实时反应在骨骼上
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-1-28 22:12:59 | 显示全部楼层
酸菜鱼菜酸 发表于 2024-01-28 22:12
@FishC 我使用的是blender,使用python脚本,当我读串 ...


嗨!使用Blender和Python来控制骨骼是非常有趣的。要实现数据从串口读取并实时应用到骨骼上,你可以按照以下步骤进行操作:

1. 首先,确保你已经在Blender中创建了一个骨架(Armature)以及相关的骨骼(Bones)。

2. 然后,创建一个Python脚本,在其中导入必要的库,如`serial`库(用于读取串口数据),以及`bpy`库(用于操作Blender)。
import serial
import bpy

3. 初始化串口,并设置相应的参数,如波特率、串口号等。
ser = serial.Serial()
ser.baudrate = 9600
ser.port = 'COM5'  # 替换为你的串口号
ser.open()

4. 创建一个循环,实时读取串口数据并将其应用到骨骼上。你可以使用`bpy.data.objects`来获取骨骼对象,并使用`rotation_euler`属性来设置骨骼的旋转角度。
while True:
    # 读取串口数据
    data = ser.readline().strip().decode()
    
    # 将数据应用到骨骼上
    bone = bpy.data.objects['Bone']  # 替换为你的骨骼名称
    bone.rotation_euler = (float(data), 0, 0)
    
    # 更新场景
    bpy.context.view_layer.update()

请确保你将以上代码中的`COM5`和`Bone`替换为你实际使用的串口号和骨骼名称。

这样,当你在控制台中收到新的数据时,它就会实时更新到骨骼上。记得在不需要时关闭串口连接,可以在循环结束后添加以下代码:
ser.close()

希望这能帮助到你!如果有任何问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-22 03:35

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表