3个版本 (破坏性更新)
0.3.0 | 2023年8月17日 |
---|---|
0.2.0 | 2023年8月11日 |
0.1.0 | 2023年8月11日 |
#9 in #osc
90KB
2K SLoC
vmc
Rust中异步实现的虚拟运动捕捉协议。
虽然这个crate专为虚拟运动捕捉设计,但它也可以用作基于VMC的Open Sound Control协议的实现。
示例
有关更详细的示例,请参阅examples/
。
表演者
use vmc::{
VMCApplyBlendShapes, VMCBlendShape, VMCModelState, VMCResult, VMCStandardVRMBlendShape, VMCState, VMCTime
};
#[tokio::main]
async fn main() -> VMCResult<()> {
let socket = vmc::performer!("127.0.0.1:39539").await?;
loop {
socket
.send(VMCBlendShape::new(VMCStandardVRMBlendShape::Joy, 1.0))
.await?;
socket.send(VMCApplyBlendShapes).await?;
socket.send(VMCState::new(VMCModelState::Loaded)).await?;
socket.send(VMCTime::elapsed()).await?;
}
}
木偶
use tokio_stream::StreamExt;
use vmc::{VMCMessage, VMCResult};
#[tokio::main]
async fn main() -> VMCResult<()> {
let mut socket = vmc::marionette!("127.0.0.1:39539").await?;
while let Some(packet) = socket.next().await {
let (packet, _) = packet?;
for message in vmc::parse(packet)? {
match message {
VMCMessage::BoneTransform(transform) => {
println!("\tTransform bone: {} (pos {:?}; rot {:?})", transform.bone, transform.position, transform.rotation)
}
_ => {}
}
}
}
Ok(())
}
许可证
❤️ 此软件包基于Andreas Linz的rosc
和Franz Heinzmann的async-osc
。许可协议为MIT License或Apache-2.0。
依赖关系
~6–19MB
~207K SLoC