Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
QML上にOpenGLのカスタムエレメントを表示する
Search
Noboru Murakami
June 15, 2013
Programming
180
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
QML上にOpenGLのカスタムエレメントを表示する
OpenGLで描画するQMLのカスタムエレメントを作成し、
それをQMLの標準のエレメントと一緒に表示します。
Noboru Murakami
June 15, 2013
Other Decks in Programming
See All in Programming
AmebaブログはKMPから卒業します
kmars0605
0
200
Long Living Tokens, Die, Die, Die! (or: The One Ring is Banned in Modern)
sylph01
0
320
Herb in Rails 8.2: Your ERB views, now HTML-aware @ Rails World 2026, Austin, Texas
marcoroth
0
220
現場と育てるRailsモデリング 〜Spreadsheetから始めたモデル設計〜
siroemk
2
630
RAG の “R” を Swift で覗いてみる 〜「意味から探す」検索の仕組み〜
nao_randd
0
170
最近”作らせてる” ローカルAIアプリの話
akit37
0
480
When benchmarks go bad - what I learned from measuring performance wrong
hollycummins
0
220
AIで開発が速くなった先で、開発チームは何を目指すか
shihochan
1
1.6k
dotNET_vulnclicker_intro.pdf
deka_morita
0
140
コーディング自動化の次へ。人の介入をゼロにするファクトリーとサポートAIによる実践
timakin
5
3.9k
パスワード再設定メールのURLについて知っておこう
uyuki234
0
160
AWSに止められる覚悟してますか?
morizo_1984
2
540
Featured
See All Featured
Amusing Abliteration
ianozsvald
1
350
Are puppies a ranking factor?
jonoalderson
2
4.1k
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
2
310
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.4k
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.6k
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
760
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
2
6.3k
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
540
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2.2k
The untapped power of vector embeddings
frankvandijk
2
1.9k
[SF Ruby Conf 2025] Rails X
palkan
3
1.5k
Transcript
QML上にOpenGLのカスタムエレメントを 表示する @n_murakami1
アジェンダ • 自己紹介 • 開発環境 • OpenGLのカスタムエレメントとは • どんなときに使うの? •
QMLで3Dモデルを表示する方法 • 実装方法 • 参考資料
自己紹介 • 名前 村上 昇 • 仕事 車載機器(IVI)のHMI開発環境の構築 • Qt歴 2年数ヶ月 • 興味 –
Qt – HTML5 – TIZEN(特にIVI) • ブログ(基本的には自分用の学習メモ) – http://ameblo.jp/dumbobambino/
開発環境 • OS:Windows7(64bit) • Qtバージョン:Qt4.8.4、Qt5.0.2 • Qt Creatorバージョン:2.7.0 ※Virtualbox上のUbuntuではQt4.8.4でopenglを有効に した時に、QMLが正常に表示できませんでした。
OpenGLのカスタムエレメントとは • (特に決まった用語ではないですが) OpenGL、OpenGLESのAPIを使って描画処理 を自分で記述する、QMLの自作のElementの ことで、C++で作成します。 Item { QMLWidget0502{} ←コレ(Element名は自分で定義する) Rectangle{
width: 100 height: 100 color: "#88ff0000" } }
どんなときに使うの? • 標準のQMLのElementではやりたい事が出来 ない時 – 例えば、3Dモデルを表示するとか
QMLで3Dモデルを表示する方法 • Qt Quick 3Dを使う – http://doc.qt.digia.com/qt-quick3d-snapshot/ というのが王道なやり方ですが、現状は開発 中で、Qt4.8.4はもちろん、Qt5.0.2のリリー ス物にも入っていません。
だから、OpenGLのカスタムElementを使う
実装方法
実装方法概要 Qt Version 利用クラス 特徴 4.8.4 QDeclarativeItem 4.8系だとこれを使うしかない? 5.0.2 QQuickItem
直接描画面へ描画する。消費メモリや速度で有利。 5.0.2 QQuickPaintedItem 間接的な2D surfaceを使う。ラスタライズ、描画の 2段階処理になる。 QPainterを使って描画したいときに使う。 (z方向を)QMLの標準のElementの間にしたい時はこ れを使えば出来るのかもしれない。(未確認) ▪参考URL Mixing Scene Graph and OpenGL http://qt-project.org/doc/qt-5.0/qtquick/qtquick-visualcanvas-scenegraph.html#mixing-scen e-graph-and-opengl QQuickItem http://qt-project.org/doc/qt-5.0/qtquick/qquickitem.html#details QQuickPaintedItem http://qt-project.org/doc/qt-5.0/qtquick/qquickpainteditem.html#details
Qt5での2つの実装方式 ・・・ QMLの標準Element ・・・ OpenGLのCustom Element 直接描画面へ描画 FBOへ描画してから描画面へ描画 ←FBO 標準Elementの間に描画 できるかも(未確認) 消費メモリや速度面で有利。
標準Elementの前か後ろに描画可能。 間には描画できない。 FBO (FrameBufferObject)
Qt4.8.4での実装のポイント • QDeclarativeItemを継承するクラスを作成 • setFlag(ItemHasNoContents, false);を実行 • paintメソッドをオーバーライドして描画処理を記述 • OpenGLの命令前後にpaintメソッドの引数で渡されるQPainter
のbeginNativePainting()とendNativePainting()を実行する サンプルはこちら • QMLWidget03.zip • QMLWidget04.zip
Qt5.0.2での実装のポイント ※描画面へ直接描画する方式についての説明 • QQuickItemを継承するクラスを作成 • paint() slotを定義 • QQuickWindowのbeforeRendering() かafterRendering()
signal とpaint() slotをconnect • paint() slotに描画処理を記述 サンプルはこちら(自作のものは色々トライ&エラー中なのでまだ アップしてません) • http://qt-project.org/doc/qt-5.0/qtquick/scenegraph-openglunde rqml.html
参考資料 • Mixing Scene Graph and OpenGL – http://qt-project.org/doc/qt-5.0/qtquick/qtquick-visualcanvas-scene graph.html#mixing-scene-graph-and-opengl
• QQuickItem – http://qt-project.org/doc/qt-5.0/qtquick/qquickitem.html#details • QQuickPaintedItem – http://qt-project.org/doc/qt-5.0/qtquick/qquickpainteditem.html#detai ls
おしまい。