-
Notifications
You must be signed in to change notification settings - Fork 5
glTFの表示
Yuki Shimada edited this page Dec 3, 2022
·
16 revisions
RhodoniteでのglTFの表示のやり方を説明します。 RhodoniteはglTF1とglTF2、VRMをサポートしています。
一番簡単な方法は、GltfImporterクラスを使うことです。 このクラスはglTF1とglTF2、VRMを自動的に判定して適切にロードします。 このクラスのimportメソッドはawaitを使って呼び出すとIResult型のオブジェクトを返します。 読み込みが成功している場合、getメソッドを使って中身のexpressionオブジェクトを取り出すことができます。 このexpressionはそのままSystemクラスのprocessメソッドに渡して描画できます。
const result = await Rn.GltfImporter.import(gltfUrl, loadOption);
if (result.isOk()) {
const expression = result.get();
}
成功したかのチェックが面倒な場合は、unwrapForce()メソッドで強制的に取り出すことも可能ですが、resultの結果がエラーだった場合は例外が発生します。
const result = await Rn.GltfImporter.import(gltfUrl, loadOption);
const expression = result.unwrapForce();
バージョンを決めうちしたImporterもあります。Gltf1ImporterまたはGltf2Importerです。これらはexpressionではなく、RnM2という独自形式のデータをResultオブジェクトに包んで返します。 RnMはglTF2の各項目のインデックスで結ばれた論理的な接続関係を、実際のオブジェクトの参照として解決した状態のglTFデータです。 これをModelConverterに渡すことで読み込んだglTFのシーングラフのルートのEntityを得ます。
const result = await Rn.Gltf2Importer.import(
'../../../assets/gltf/glTF-Sample-Models/2.0/BoxAnimated/glTF/BoxAnimated.gltf'
);
const rnm = result.unwrapForce();
const rootGroup = Rn.ModelConverter.convertToRhodoniteObject(rnm);
const expression = new Rn.Expression();
const renderPass = new Rn.RenderPass();
renderPass.addEntities([rootGroup]);
expression.addRenderPasses([renderPass]);