SlideShare une entreprise Scribd logo
1  sur  14
Télécharger pour lire hors ligne
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
おしまい。

Contenu connexe

Tendances

griffon plugin を 実際に作ってみよう #jggug
griffon plugin を 実際に作ってみよう #jgguggriffon plugin を 実際に作ってみよう #jggug
griffon plugin を 実際に作ってみよう #jggug
kimukou_26 Kimukou
 
ホームディレクトリに埋もれた便利なコードをさがせ!
ホームディレクトリに埋もれた便利なコードをさがせ!ホームディレクトリに埋もれた便利なコードをさがせ!
ホームディレクトリに埋もれた便利なコードをさがせ!
Yohei Fushii
 

Tendances (20)

LabVIEW NXG Current Status @ 2020
LabVIEW NXG Current Status @ 2020LabVIEW NXG Current Status @ 2020
LabVIEW NXG Current Status @ 2020
 
Grailsのススメ(仮)
Grailsのススメ(仮)Grailsのススメ(仮)
Grailsのススメ(仮)
 
KubernetesとOpenShiftの話
KubernetesとOpenShiftの話KubernetesとOpenShiftの話
KubernetesとOpenShiftの話
 
griffon plugin を 実際に作ってみよう #jggug
griffon plugin を 実際に作ってみよう #jgguggriffon plugin を 実際に作ってみよう #jggug
griffon plugin を 実際に作ってみよう #jggug
 
2018 07-18 git-hub講座
2018 07-18 git-hub講座2018 07-18 git-hub講座
2018 07-18 git-hub講座
 
git ~start PullRequest~
git ~start PullRequest~git ~start PullRequest~
git ~start PullRequest~
 
Decsx launcherv 2.5
Decsx launcherv 2.5Decsx launcherv 2.5
Decsx launcherv 2.5
 
LabVIEW NXG Web Module Training Slide
LabVIEW NXG Web Module Training SlideLabVIEW NXG Web Module Training Slide
LabVIEW NXG Web Module Training Slide
 
Kubernetes Meetup Tokyo #23 kubebuilder-v2
Kubernetes Meetup Tokyo #23 kubebuilder-v2Kubernetes Meetup Tokyo #23 kubebuilder-v2
Kubernetes Meetup Tokyo #23 kubebuilder-v2
 
Session5 - LabVIEW NXG Training Course
Session5 - LabVIEW NXG Training CourseSession5 - LabVIEW NXG Training Course
Session5 - LabVIEW NXG Training Course
 
日本と世界のDockerコミュニティ
日本と世界のDockerコミュニティ日本と世界のDockerコミュニティ
日本と世界のDockerコミュニティ
 
Docker + Checkpoint/Restore
Docker + Checkpoint/RestoreDocker + Checkpoint/Restore
Docker + Checkpoint/Restore
 
Session1 - LabVIEW NXG Training Course
Session1 - LabVIEW NXG Training CourseSession1 - LabVIEW NXG Training Course
Session1 - LabVIEW NXG Training Course
 
Stylez GitLab勉強会 第1回
Stylez GitLab勉強会 第1回Stylez GitLab勉強会 第1回
Stylez GitLab勉強会 第1回
 
Re-frame and A-Frame
Re-frame and A-FrameRe-frame and A-Frame
Re-frame and A-Frame
 
Modern .NET
Modern .NETModern .NET
Modern .NET
 
イケてる技術で品質を担保しつつスピード感のある開発を実現する冴えたやり方
イケてる技術で品質を担保しつつスピード感のある開発を実現する冴えたやり方イケてる技術で品質を担保しつつスピード感のある開発を実現する冴えたやり方
イケてる技術で品質を担保しつつスピード感のある開発を実現する冴えたやり方
 
ホームディレクトリに埋もれた便利なコードをさがせ!
ホームディレクトリに埋もれた便利なコードをさがせ!ホームディレクトリに埋もれた便利なコードをさがせ!
ホームディレクトリに埋もれた便利なコードをさがせ!
 
JSがちょい好きになるプレゼン
JSがちょい好きになるプレゼンJSがちょい好きになるプレゼン
JSがちょい好きになるプレゼン
 
レガシー環境で個人ベースでなんとか頑張るDVCS(Git)運用
レガシー環境で個人ベースでなんとか頑張るDVCS(Git)運用レガシー環境で個人ベースでなんとか頑張るDVCS(Git)運用
レガシー環境で個人ベースでなんとか頑張るDVCS(Git)運用
 

Similaire à QML上にOpenGLのカスタムエレメントを表示する

初心者向けAndroidゲーム開発ノウハウ
初心者向けAndroidゲーム開発ノウハウ初心者向けAndroidゲーム開発ノウハウ
初心者向けAndroidゲーム開発ノウハウ
Kentarou Mukunasi
 
Python3 プログラミング勉強会
Python3 プログラミング勉強会Python3 プログラミング勉強会
Python3 プログラミング勉強会
Tetsuya Morimoto
 
Nifty cloud automationでクラウド構築・運用の自動化
Nifty cloud automationでクラウド構築・運用の自動化Nifty cloud automationでクラウド構築・運用の自動化
Nifty cloud automationでクラウド構築・運用の自動化
NIFTY Cloud
 
渋谷JVM#1 Immutable時代のプログラミング言語 Clojure
渋谷JVM#1 Immutable時代のプログラミング言語 Clojure渋谷JVM#1 Immutable時代のプログラミング言語 Clojure
渋谷JVM#1 Immutable時代のプログラミング言語 Clojure
Yoshitaka Kawashima
 

Similaire à QML上にOpenGLのカスタムエレメントを表示する (20)

it's Qt!
it's Qt!it's Qt!
it's Qt!
 
KotlinJSって正直どうなん
KotlinJSって正直どうなんKotlinJSって正直どうなん
KotlinJSって正直どうなん
 
KotlinでWebアプリ開発
KotlinでWebアプリ開発KotlinでWebアプリ開発
KotlinでWebアプリ開発
 
Angular2実践入門
Angular2実践入門Angular2実践入門
Angular2実践入門
 
カジュアルにMySQL Clusterを使ってみよう@MySQL Cluster Casual Talks 2013.09
カジュアルにMySQL Clusterを使ってみよう@MySQL Cluster Casual Talks 2013.09カジュアルにMySQL Clusterを使ってみよう@MySQL Cluster Casual Talks 2013.09
カジュアルにMySQL Clusterを使ってみよう@MySQL Cluster Casual Talks 2013.09
 
初心者向けAndroidゲーム開発ノウハウ
初心者向けAndroidゲーム開発ノウハウ初心者向けAndroidゲーム開発ノウハウ
初心者向けAndroidゲーム開発ノウハウ
 
新しい Visual Studio & .NET と新時代のアーキテクチャ
新しい Visual Studio & .NET と新時代のアーキテクチャ新しい Visual Studio & .NET と新時代のアーキテクチャ
新しい Visual Studio & .NET と新時代のアーキテクチャ
 
Open modeler
Open modelerOpen modeler
Open modeler
 
今から始める、Windows 10&新.NETへの移行戦略
今から始める、Windows 10&新.NETへの移行戦略今から始める、Windows 10&新.NETへの移行戦略
今から始める、Windows 10&新.NETへの移行戦略
 
Qt5のセンサーAPIを使ってみたい
Qt5のセンサーAPIを使ってみたいQt5のセンサーAPIを使ってみたい
Qt5のセンサーAPIを使ってみたい
 
Nodeにしましょう
NodeにしましょうNodeにしましょう
Nodeにしましょう
 
Runtime c++editing
Runtime c++editingRuntime c++editing
Runtime c++editing
 
Flutter設計のすゝめ
Flutter設計のすゝめFlutter設計のすゝめ
Flutter設計のすゝめ
 
Python3 プログラミング勉強会
Python3 プログラミング勉強会Python3 プログラミング勉強会
Python3 プログラミング勉強会
 
Nifty cloud automationでクラウド構築・運用の自動化
Nifty cloud automationでクラウド構築・運用の自動化Nifty cloud automationでクラウド構築・運用の自動化
Nifty cloud automationでクラウド構築・運用の自動化
 
PyQtではじめるGUIプログラミング
PyQtではじめるGUIプログラミングPyQtではじめるGUIプログラミング
PyQtではじめるGUIプログラミング
 
JA7YCQプログラミング勉強会 第1回 ~プログラミングやってみようか~
JA7YCQプログラミング勉強会 第1回 ~プログラミングやってみようか~JA7YCQプログラミング勉強会 第1回 ~プログラミングやってみようか~
JA7YCQプログラミング勉強会 第1回 ~プログラミングやってみようか~
 
【関東GPGPU勉強会#3】OpenCVの新機能 UMatを先取りしよう
【関東GPGPU勉強会#3】OpenCVの新機能 UMatを先取りしよう【関東GPGPU勉強会#3】OpenCVの新機能 UMatを先取りしよう
【関東GPGPU勉強会#3】OpenCVの新機能 UMatを先取りしよう
 
渋谷JVM#1 Immutable時代のプログラミング言語 Clojure
渋谷JVM#1 Immutable時代のプログラミング言語 Clojure渋谷JVM#1 Immutable時代のプログラミング言語 Clojure
渋谷JVM#1 Immutable時代のプログラミング言語 Clojure
 
オープン・ソースで構築するARMマイコン開発環境 ―― GCC,Eclipse,OpenOCDで統合開発環境,JTAGデバッグもできる!
オープン・ソースで構築するARMマイコン開発環境 ―― GCC,Eclipse,OpenOCDで統合開発環境,JTAGデバッグもできる!オープン・ソースで構築するARMマイコン開発環境 ―― GCC,Eclipse,OpenOCDで統合開発環境,JTAGデバッグもできる!
オープン・ソースで構築するARMマイコン開発環境 ―― GCC,Eclipse,OpenOCDで統合開発環境,JTAGデバッグもできる!
 

Dernier

Dernier (7)

NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 

QML上にOpenGLのカスタムエレメントを表示する