SlideShare a Scribd company logo
1 of 42
C++,OpenGL,Qt,Squirrelで
ポリゴンモデラーを作る


~ OpenModeler ~
自己紹介
•   名前      泉芳樹
•   所属      河原電子ビジネス専門学校
•   twitter @izumi_yoshiki
•   GitHub https://github.com/izumiyoshiki
団体紹介

• 日本Androidの会    四国支部
  (jagshikoku)

四国支部長の兼久さんにセミナーする
 チャンスを作って頂きました。
宣伝

•OpenGL勉強会
twitterで告知してま
 す。

     @izumi_yoshiki
今日の内容

1、なぜ作るか
2、何を使って作るか
3、Qt
4、OpenGL
5、Squirrel
6、まとめ
1、なぜ作るか
• 個人で3Dは敷居が高いイメージ
• ポリゴンモデラーが高価だから
1、なぜ作るか
• フリーのポリゴンモデラー
  Windows      :Metasequoia   メタ
  セコイア
  Windows/Mac :Blender        ブレ
  ンダー
1、なぜ作るか
• 私は主にMacを使っているので
  Macで動くポリゴンモデラーが欲
  しい。

• Blenderは操作感が独特でなかな
  か使いこなせない。

• 自分で作ってしまおう。
1、なぜ作るか
• ポリゴンモデルのデータ形式が多種
mqo, dae, fbx, obj, x, etc…

• ポリゴンデータのパーサー(解析器)を作っ
  たりしていると自分でデータ形式を作りたく
  なる。
     json形式のモデルデータはまだ無いので
  json形式のデータが欲しい。

• 自分で作ってしまおう。
2、何を使って作るか
• Macで作るにはcocoaがある。私は使った
  事がない。

• クロスプラットフォームで動くQtがある。
  これも使った事がない。

• どちらにしても勉強しながらなのでQtを
  使う。

• C++/Qtが決定。
2、何を使って作るか
• 3Dライブラリは何を使うか。

• DirectXが有名だがWindowsのみでしか動か
  ない。

• OpenGLはどのプラットフォームも対応し
  ているのでOpenGLを使う。

• C++/Qt/OpenGLが決定。
2、何を使って作るか
• Blenderはスクリプト言語にPythonを採用
  している。

• 高価なポリゴンモデラーのMayaは独自の
  スクリプト言語MELを載せている。

• OpenModelerも何かスクリプト言語を採用
  しよう。
2、何を使って作るか
• スクリプト言語ってなに?

• よく使われていた方法は、
  データ部分を切り離して、後でデータだけ変更
  できるようにしている。

• スクリプト言語は、
  ロジック部分もデータとして扱い、
  ロジック部分を切り離して、後でロジックも変更
  できるようにしている。
2、何を使って作るか
• スクリプト言語はゲームでよく採用され
  ているLua(ルア)とSquirrel(スクワー
  ル)が良さそう。

• スクリプトなのでビルドしなくても中身
  が変更できる。
2、何を使って作るか
• Luaは軽量でCで書かれているスクリプト
  言語。

• Wikipediaのスクリプト言語にも採用され
  た。

• 他、多数のゲームで採用されている。
2、何を使って作るか
• SquirrelはC++で書かれていてLuaを使って
  いた Alberto Demichelis さんがLuaの不満点
  を解消するために作ったスクリプト言
  語。

• Squirrelはクラスが作成できる。Luaは標準
  ではクラスをサポートしてない。

• Squirrelは配列が0から始まる。Luaは配列
  は1から始まる。
2、何を使って作るか
• 他にも色々ありますが、Squirrelを採用し
  ます。

• C++/Qt/OpenGL/Squirrelに決定。
小休止
3、Qt
• QtのHelloWorldのソース

main.cppです
3、Qt
#include <QtGui/QApplication>
#include "mainwindow.h“

int main(int argc, char *argv[])
{
  QApplication application(argc, argv);
  MainWindow window;
  window.show();
  return application.exec();
}
3、Qt
QtのHelloWorldのソース

mainwindow.hです
3、Qt
#include <QMainWindow>
namespace Ui {
     class MainWindow;
}
class MainWindow : public QMainWindow{
     Q_OBJECT
public:
     explicit MainWindow(QWidget *parent = 0);
     ~MainWindow();
private:
     Ui::MainWindow *ui;
};
3、Qt
• QtのHelloWorldのソース

mainwindow.cppです
3、Qt
#include "mainwindow.h“
#include"ui_mainwindow.h“

MainWindow::MainWindow(QWidget *parent) :
  QMainWindow(parent),ui(new Ui::MainWindow)
{
  ui->setupUi(this);
}

MainWindow::~MainWindow(){ delete ui; }
4、OpenGL
• QtでOpenGLのHelloWorldのソース

opengl.hです
4、OpenGL
#include <QGLWidget>

class OpenGL : public QGLWidget{
     Q_OBJECT

public:
    OpenGL(QWidget *parent = 0);
    ~OpenGL();
protected:
    virtual void initializeGL();
    virtual void resizeGL(int width, int height);
    virtual void paintGL();
};
4、OpenGL
QtでOpenGLのHelloWorldのソース

opengl.cppです
4、OpenGL
#include "opengl.h“

OpenGL::OpenGL(QWidget *parent) :
 QGLWidget(parent) {}

OpenGL::~OpenGL(){}
4、OpenGL
void OpenGL::initializeGL(){
  glClearColor(0.0, 0.0, 0.0, 1.0);
}

void OpenGL::resizeGL(int width, int height){
  glViewport(0, 0, width, height);
  glLoadIdentity();
  glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0);
}
4、OpenGL
void OpenGL::paintGL(){
  glClear(GL_COLOR_BUFFER_BIT |
           GL_DEPTH_BUFFER_BIT);
  glColor3d(0.0, 1.0, 0.0);
  glBegin(GL_TRIANGLES);
  glVertex2d(0.1, 0.1);
  glVertex2d(0.9, 0.1);
  glVertex2d(0.5, 0.9);
  glEnd();
}
4、OpenGL
5、Squirrel
Squirrelの使用方法は

プロジェクトにライブラリを2つ登録して
 おきます。
・libsqstdlib.a
・libsquirrel.a

test.nutというスクリプトファイルを読み込
  んで
使用します。
5、Squirrel
SquirrelのHelloWorldのソース

main.cppです。
5、Squirrel
int main(int argc, char* argv[])
{
    HSQUIRRELVM v;
    v = sq_open(1024);
    sqstd_seterrorhandlers(v);
    sq_setprintfunc(v, printfunc,errorfunc);
    sq_pushroottable(v);
    if(SQ_SUCCEEDED(
         sqstd_dofile(v, _SC("test.nut"), SQFalse, SQTrue))
    ) {
         call_foo(v,1,2.5,_SC("teststring"));
    }
    sq_pop(v,1);
    sq_close(v);
    return 0;
 }
5、Squirrel
void call_foo(HSQUIRRELVM v, int n,float f,const SQChar *s)
{
  SQInteger top = sq_gettop(v);
  sq_pushroottable(v);
  sq_pushstring(v,_SC("foo"),-1);
  if(SQ_SUCCEEDED(sq_get(v,-2))) {
       sq_pushroottable(v);
       sq_pushinteger(v,n);
       sq_pushfloat(v,f);
       sq_pushstring(v,s,-1);
       sq_call(v,4,SQFalse,SQTrue);
  }
  sq_settop(v,top);
}
5、Squirrel
void printfunc(HSQUIRRELVM v,
               const SQChar *s,
                ...)
{
  va_list vl;
  va_start(vl, s);
  scvprintf(stdout, s, vl);
  va_end(vl);
}
5、Squirrel
void errorfunc(HSQUIRRELVM v,
                 const SQChar *s,
                 ...)
{
  va_list vl;
  va_start(vl, s);
  scvprintf(stderr, s, vl);
  va_end(vl);
}
5、Squirrel
スクリプトファイルのtest.nutのソースです
5、Squirrel
function foo(i, f, s)
{
   print("Called foo(), i="+i+
          ", f="+f+
          ", s=' " +s+ " 'n");
}
6、まとめ
• C++/Qt/OpenGL/Squirrelで作成します。

• ゲーム制作のためのポリゴンモデ
  ラー。

• プログラマのためのポリゴンモデ
  ラー。

• みなさんも一緒に OpenModeler を
御清聴ありがとうございまし
      た
• twitter @izumi_yoshiki

• GitHub
  https://github.com/izumiyoshiki

More Related Content

What's hot

Interactive Music II ProcessingとSuperColliderの連携1
Interactive Music II ProcessingとSuperColliderの連携1Interactive Music II ProcessingとSuperColliderの連携1
Interactive Music II ProcessingとSuperColliderの連携1
Atsushi Tadokoro
 
Interactive Music II - SuperCollider入門
Interactive Music II - SuperCollider入門Interactive Music II - SuperCollider入門
Interactive Music II - SuperCollider入門
Atsushi Tadokoro
 
プログラム初級講座 - メディア芸術をはじめよう
プログラム初級講座 - メディア芸術をはじめようプログラム初級講座 - メディア芸術をはじめよう
プログラム初級講座 - メディア芸術をはじめよう
Atsushi Tadokoro
 
Media Art II openFrameworks アプリ間の通信とタンジブルなインターフェイス
Media Art II openFrameworks  アプリ間の通信とタンジブルなインターフェイス Media Art II openFrameworks  アプリ間の通信とタンジブルなインターフェイス
Media Art II openFrameworks アプリ間の通信とタンジブルなインターフェイス
Atsushi Tadokoro
 

What's hot (20)

Interactive Music II ProcessingとSuperColliderの連携1
Interactive Music II ProcessingとSuperColliderの連携1Interactive Music II ProcessingとSuperColliderの連携1
Interactive Music II ProcessingとSuperColliderの連携1
 
GoogleのSHA-1のはなし
GoogleのSHA-1のはなしGoogleのSHA-1のはなし
GoogleのSHA-1のはなし
 
Interactive Music II - SuperCollider入門
Interactive Music II - SuperCollider入門Interactive Music II - SuperCollider入門
Interactive Music II - SuperCollider入門
 
Docker やってみた
Docker やってみたDocker やってみた
Docker やってみた
 
async/await のしくみ
async/await のしくみasync/await のしくみ
async/await のしくみ
 
Unityで覚えるC#
Unityで覚えるC#Unityで覚えるC#
Unityで覚えるC#
 
[Tokyo NodeFest 2015] Hardware Hacking for Javascript Developers
[Tokyo NodeFest 2015] Hardware Hacking for Javascript Developers[Tokyo NodeFest 2015] Hardware Hacking for Javascript Developers
[Tokyo NodeFest 2015] Hardware Hacking for Javascript Developers
 
elasticsearchソースコードを読みはじめてみた
elasticsearchソースコードを読みはじめてみたelasticsearchソースコードを読みはじめてみた
elasticsearchソースコードを読みはじめてみた
 
Var handles jjug_ccc_spring_2018
Var handles jjug_ccc_spring_2018Var handles jjug_ccc_spring_2018
Var handles jjug_ccc_spring_2018
 
Scalaで実装するGC
Scalaで実装するGCScalaで実装するGC
Scalaで実装するGC
 
[Container Runtime Meetup] runc & User Namespaces
[Container Runtime Meetup] runc & User Namespaces[Container Runtime Meetup] runc & User Namespaces
[Container Runtime Meetup] runc & User Namespaces
 
オンプレ&HTTP Proxyな環境でRancherOS入れてみた話
オンプレ&HTTP Proxyな環境でRancherOS入れてみた話オンプレ&HTTP Proxyな環境でRancherOS入れてみた話
オンプレ&HTTP Proxyな環境でRancherOS入れてみた話
 
LINQ in Unity
LINQ in UnityLINQ in Unity
LINQ in Unity
 
Synthesijer zynq qs_20150316
Synthesijer zynq qs_20150316Synthesijer zynq qs_20150316
Synthesijer zynq qs_20150316
 
TruffleSqueakの紹介
TruffleSqueakの紹介TruffleSqueakの紹介
TruffleSqueakの紹介
 
プログラム初級講座 - メディア芸術をはじめよう
プログラム初級講座 - メディア芸術をはじめようプログラム初級講座 - メディア芸術をはじめよう
プログラム初級講座 - メディア芸術をはじめよう
 
Introduction to NotifyPropertyChangedGenerator
Introduction to NotifyPropertyChangedGeneratorIntroduction to NotifyPropertyChangedGenerator
Introduction to NotifyPropertyChangedGenerator
 
node-gypを使ったネイティブモジュールの作成
node-gypを使ったネイティブモジュールの作成node-gypを使ったネイティブモジュールの作成
node-gypを使ったネイティブモジュールの作成
 
Media Art II openFrameworks アプリ間の通信とタンジブルなインターフェイス
Media Art II openFrameworks  アプリ間の通信とタンジブルなインターフェイス Media Art II openFrameworks  アプリ間の通信とタンジブルなインターフェイス
Media Art II openFrameworks アプリ間の通信とタンジブルなインターフェイス
 
Deep Dive async/await in Unity with UniTask(UniRx.Async)
Deep Dive async/await in Unity with UniTask(UniRx.Async)Deep Dive async/await in Unity with UniTask(UniRx.Async)
Deep Dive async/await in Unity with UniTask(UniRx.Async)
 

Viewers also liked (20)

Emprendimiento
EmprendimientoEmprendimiento
Emprendimiento
 
26
2626
26
 
Comparatives and superlatives
Comparatives and superlativesComparatives and superlatives
Comparatives and superlatives
 
Treball fotogràfic i símbols de components electrònics
Treball fotogràfic i símbols de components electrònicsTreball fotogràfic i símbols de components electrònics
Treball fotogràfic i símbols de components electrònics
 
Slideshare
SlideshareSlideshare
Slideshare
 
Media kit metanetwork es
Media kit metanetwork esMedia kit metanetwork es
Media kit metanetwork es
 
Propuesta
PropuestaPropuesta
Propuesta
 
Titorial para crear cuenta gmail
Titorial para crear cuenta gmailTitorial para crear cuenta gmail
Titorial para crear cuenta gmail
 
Regimen laboral portuario
Regimen laboral portuarioRegimen laboral portuario
Regimen laboral portuario
 
47
4747
47
 
Emprendimiento
EmprendimientoEmprendimiento
Emprendimiento
 
Si j’étais un pirate
Si j’étais un pirateSi j’étais un pirate
Si j’étais un pirate
 
Viagem entre o Senegal e a Gâmbia
Viagem entre o Senegal e a GâmbiaViagem entre o Senegal e a Gâmbia
Viagem entre o Senegal e a Gâmbia
 
Apresentação III - Fórum ABAT - SPED - Cruzamento Eletronico e Auditoria
Apresentação III - Fórum ABAT - SPED - Cruzamento Eletronico e AuditoriaApresentação III - Fórum ABAT - SPED - Cruzamento Eletronico e Auditoria
Apresentação III - Fórum ABAT - SPED - Cruzamento Eletronico e Auditoria
 
VIII Seminário de Tecnologias Robtec - Mercedes-Benz
VIII Seminário de Tecnologias Robtec - Mercedes-BenzVIII Seminário de Tecnologias Robtec - Mercedes-Benz
VIII Seminário de Tecnologias Robtec - Mercedes-Benz
 
48
4848
48
 
trabajadores
trabajadorestrabajadores
trabajadores
 
Dica 024
Dica 024Dica 024
Dica 024
 
педсовет март 2012
педсовет март 2012педсовет март 2012
педсовет март 2012
 
27
2727
27
 

Similar to Open modeler

Javaで簡単にgpgpu aparapi
Javaで簡単にgpgpu aparapiJavaで簡単にgpgpu aparapi
Javaで簡単にgpgpu aparapi
Ken'ichi Sakiyama
 
おまえらこのライブラリ使ってないの? m9 (2013-07)
おまえらこのライブラリ使ってないの? m9	(2013-07)おまえらこのライブラリ使ってないの? m9	(2013-07)
おまえらこのライブラリ使ってないの? m9 (2013-07)
Toru Furukawa
 
関ジャバ JavaOne Tokyo 2012報告会
関ジャバ JavaOne Tokyo 2012報告会関ジャバ JavaOne Tokyo 2012報告会
関ジャバ JavaOne Tokyo 2012報告会
Koichi Sakata
 

Similar to Open modeler (20)

20160728 hyperscale #03
20160728 hyperscale #0320160728 hyperscale #03
20160728 hyperscale #03
 
【関東GPGPU勉強会#2】OpenCVのOpenCL実装oclMat
【関東GPGPU勉強会#2】OpenCVのOpenCL実装oclMat【関東GPGPU勉強会#2】OpenCVのOpenCL実装oclMat
【関東GPGPU勉強会#2】OpenCVのOpenCL実装oclMat
 
【関東GPGPU勉強会#3】OpenCVの新機能 UMatを先取りしよう
【関東GPGPU勉強会#3】OpenCVの新機能 UMatを先取りしよう【関東GPGPU勉強会#3】OpenCVの新機能 UMatを先取りしよう
【関東GPGPU勉強会#3】OpenCVの新機能 UMatを先取りしよう
 
SwaggerとAPIのデザイン
SwaggerとAPIのデザインSwaggerとAPIのデザイン
SwaggerとAPIのデザイン
 
オープン・ソースで構築するARMマイコン開発環境 ―― GCC,Eclipse,OpenOCDで統合開発環境,JTAGデバッグもできる!
オープン・ソースで構築するARMマイコン開発環境 ―― GCC,Eclipse,OpenOCDで統合開発環境,JTAGデバッグもできる!オープン・ソースで構築するARMマイコン開発環境 ―― GCC,Eclipse,OpenOCDで統合開発環境,JTAGデバッグもできる!
オープン・ソースで構築するARMマイコン開発環境 ―― GCC,Eclipse,OpenOCDで統合開発環境,JTAGデバッグもできる!
 
OpenGLプログラミング
OpenGLプログラミングOpenGLプログラミング
OpenGLプログラミング
 
OpenCLに触れてみよう
OpenCLに触れてみようOpenCLに触れてみよう
OpenCLに触れてみよう
 
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2
 
Getting Started GraalVM (再アップロード)
Getting Started GraalVM (再アップロード)Getting Started GraalVM (再アップロード)
Getting Started GraalVM (再アップロード)
 
Javaで簡単にgpgpu aparapi
Javaで簡単にgpgpu aparapiJavaで簡単にgpgpu aparapi
Javaで簡単にgpgpu aparapi
 
ちゃんとWeb会議スライド『Coffee script』
ちゃんとWeb会議スライド『Coffee script』ちゃんとWeb会議スライド『Coffee script』
ちゃんとWeb会議スライド『Coffee script』
 
おまえらこのライブラリ使ってないの? m9 (2013-07)
おまえらこのライブラリ使ってないの? m9	(2013-07)おまえらこのライブラリ使ってないの? m9	(2013-07)
おまえらこのライブラリ使ってないの? m9 (2013-07)
 
今時のDev opsの取り組み事例集
今時のDev opsの取り組み事例集今時のDev opsの取り組み事例集
今時のDev opsの取り組み事例集
 
OCaml でデータ分析
OCaml でデータ分析OCaml でデータ分析
OCaml でデータ分析
 
Swiftのアプリ開発でハマったこと
Swiftのアプリ開発でハマったことSwiftのアプリ開発でハマったこと
Swiftのアプリ開発でハマったこと
 
どこでも動くゲームを作るためのベタープラクティス
どこでも動くゲームを作るためのベタープラクティスどこでも動くゲームを作るためのベタープラクティス
どこでも動くゲームを作るためのベタープラクティス
 
ocamloptの全体像
ocamloptの全体像ocamloptの全体像
ocamloptの全体像
 
全部入り!WGPで高速JavaScript+HML5体験
全部入り!WGPで高速JavaScript+HML5体験全部入り!WGPで高速JavaScript+HML5体験
全部入り!WGPで高速JavaScript+HML5体験
 
関ジャバ JavaOne Tokyo 2012報告会
関ジャバ JavaOne Tokyo 2012報告会関ジャバ JavaOne Tokyo 2012報告会
関ジャバ JavaOne Tokyo 2012報告会
 
SwiftとCocoaPodsで始めるサクサクiOS開発!
SwiftとCocoaPodsで始めるサクサクiOS開発! SwiftとCocoaPodsで始めるサクサクiOS開発!
SwiftとCocoaPodsで始めるサクサクiOS開発!
 

Recently uploaded

Recently uploaded (12)

新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 

Open modeler