Home
Explore
Submit Search
Upload
Login
Signup
Advertisement
Check these out next
Spring Bootで変わる Javaアプリ開発! #jsug
Toshiaki Maki
Guide to GraalVM (JJUG CCC 2019 Fall)
Koichi Sakata
JavaOne2014サンフランシスコ報告会in大阪
bitter_fox
JJUG CCC 2016 Fall: World is not a square, rendering world coastline map with...
torutk
JS Board で IoT は楽勝か?
Shingo Fukui
20150209 甲府-web新世紀2
Taisuke Fukuno
iOS6時代のTwitter / Facebook連携
Masahiro Murakami
OpenCVで作るスタンプAR
Takashi Yoshinaga
1
of
61
Top clipped slide
javafx-mini4wd
Jul. 11, 2014
•
0 likes
1 likes
×
Be the first to like this
Show More
•
1,946 views
views
×
Total views
0
On Slideshare
0
From embeds
0
Number of embeds
0
Download Now
Download to read offline
Report
Software
Kiyotaka Oku
Follow
Programmer at New Cast Co LTD
Advertisement
Advertisement
Advertisement
Recommended
DK2 ポジトラでモデルを動かし た か っ た …
Udasan
4.7K views
•
35 slides
うだたんの話 ~ VR アバターで自撮りする話
Udasan
2.9K views
•
26 slides
TDD BootCamp in JJUG CCC - レガシーコード対策編 -
Shuji Watanabe
6K views
•
71 slides
Build your AR app by using AR Foundation samples
Hirokazu Egashira
531 views
•
28 slides
ARCore Update (Jan 2020)
Hirokazu Egashira
522 views
•
21 slides
Introduction to AR Foundation
Hirokazu Egashira
523 views
•
24 slides
More Related Content
Similar to javafx-mini4wd
(20)
Spring Bootで変わる Javaアプリ開発! #jsug
Toshiaki Maki
•
54.6K views
Guide to GraalVM (JJUG CCC 2019 Fall)
Koichi Sakata
•
9.2K views
JavaOne2014サンフランシスコ報告会in大阪
bitter_fox
•
743 views
JJUG CCC 2016 Fall: World is not a square, rendering world coastline map with...
torutk
•
1.9K views
JS Board で IoT は楽勝か?
Shingo Fukui
•
5.2K views
20150209 甲府-web新世紀2
Taisuke Fukuno
•
2.4K views
iOS6時代のTwitter / Facebook連携
Masahiro Murakami
•
5.3K views
OpenCVで作るスタンプAR
Takashi Yoshinaga
•
1.6K views
可変値変数 var を極力避けることを模索するための事前知識 #cswift
Tomohiro Kumagai
•
4.1K views
pairsでのAngularJS x TypeScript x e2e @めぐすた#1
Takuma Morikawa
•
3.6K views
cloudstack devcloud
Kimihiko Kitase
•
2.3K views
Javaと小道具
Sho Ito
•
1.3K views
MVCもやもや話
Tetsuya Kaneuchi
•
9.3K views
はじめよう JavaFX 2.x(第3回 岡山Javaユーザー会)
a know
•
2.7K views
Live the Knight#7
ssuser033561
•
291 views
Azure のポータル画面で、AI フレーバな BOT の作成ハンズオン
Yasuaki Matsuda
•
1.1K views
20140315 ACEに聞け! SWFで始めるWorkFlow - jawsdays2014
Takuya Oketani
•
3K views
JavaOne2013報告会 JavaFX Update
Takashi Aoe
•
5.1K views
Introduction to Kanagawa Ruby Kaigi01 #kana01
Aki Ariga
•
4.9K views
㉒初期プロジェクトを改造!
Nishida Kansuke
•
6.4K views
More from Kiyotaka Oku
(20)
Osaka Venture Meetup #3
Kiyotaka Oku
•
381 views
巨大不明ビルドの継続的統合を目的とするビルドパイプラインを主軸とした作戦要綱
Kiyotaka Oku
•
1.9K views
BaseScriptについて
Kiyotaka Oku
•
1K views
ミニ四駆ジャパンカップで勝つ方法を考える
Kiyotaka Oku
•
7K views
Jenkins plugin memo
Kiyotaka Oku
•
4K views
Spockの基礎
Kiyotaka Oku
•
3.9K views
JUC2012
Kiyotaka Oku
•
2.2K views
GDK48総選挙の裏側
Kiyotaka Oku
•
1.4K views
Jenkins入門
Kiyotaka Oku
•
2.4K views
Grails/Groovyによる開発事例紹介
Kiyotaka Oku
•
8.2K views
Griffon不定期便〜G*ワークショップ編〜
Kiyotaka Oku
•
1.8K views
日本Grails/Groovyユーザーグループ
Kiyotaka Oku
•
459 views
GroovyConsole2
Kiyotaka Oku
•
800 views
GroovyConsole
Kiyotaka Oku
•
1.3K views
JJUG CCC 2011 Spring
Kiyotaka Oku
•
1.6K views
Jenkinsプラグインの作り方
Kiyotaka Oku
•
9.8K views
Devsumi Openjam
Kiyotaka Oku
•
1.4K views
Jenkins and Groovy
Kiyotaka Oku
•
2.7K views
とある断片の超動的言語
Kiyotaka Oku
•
520 views
Mote Hudson
Kiyotaka Oku
•
1.3K views
Advertisement
Recently uploaded
(20)
留信网认证可查【奥克兰大学文凭证书毕业证购买】
ihh14ds
•
2 views
在哪里可以做《俄克拉荷马大学文凭证书|毕业证》
lobd15
•
2 views
Jitera Inc.Company presentation_v5.pdf
SoshiSuzuki2
•
217 views
測量データ処理ソフト・MarineDiscoveryの紹介
ssuserbceee8
•
39 views
キレイなコードって.pdf
shumashimo1
•
12 views
留信网认证可查【威得恩大学文凭证书毕业证购买】
32lkhng
•
2 views
留信网认证可查【南安普顿大学文凭证书毕业证购买】
32lkhng
•
2 views
①【诺丁汉大学毕业证文凭学位证书|工艺完美复刻】
0987hgh789
•
2 views
留信网认证可查【艾格伍学院文凭证书毕业证购买】
32lkhng
•
2 views
留信网认证可查【太平洋大学文凭证书毕业证购买】
hh123hh1
•
2 views
留信网认证可查【新学院文凭证书毕业证购买】
hh123hh1
•
2 views
☀️《URI毕业证仿真》
sada332
•
2 views
①【伦敦政治经济学院毕业证文凭学位证书|工艺完美复刻】
0987hgh789
•
2 views
WEB-jsug info14_final.pdf
Draft One
•
4 views
留信网认证可查【萨福克大学文凭证书毕业证购买】
hh123hh1
•
3 views
①【利兹贝克特大学毕业证文凭学位证书|工艺完美复刻】
love445ds
•
2 views
①【劳里埃大学毕业证文凭学位证书|工艺完美复刻】
love445ds
•
2 views
①【萨斯喀彻温大学毕业证文凭学位证书|工艺完美复刻】
love445ds
•
2 views
HCL Sametime V12 概要
Software Info HCL Japan
•
195 views
測量支援ソフト「みとおしえ」「みとおしえクラウド」の紹介
ssuserbceee8
•
59 views
javafx-mini4wd
Javaプログラマのための ミニ四駆再入門 #yonayonajavafx @kiy0taka
告知
富士通乾電池提供 ミニ四駆ジャパンカップ2014 • 10/5(日) 大阪大会2 •
京セラドーム大阪・9Fスカイホール • たぶん8:00から受付開始
自己紹介 •奥 清隆(おく きよたか) •
id:kiy0taka、@kiy0taka •JGGUG関西支部 •関西Javaエンジニアの会 •株式会社ニューキャスト所属
Mr. Java Day
Tokyo
ミニ四駆の話をと言われて https://twitter.com/skrb/status/484356816084926465
富士通乾電池提供 ミニ四駆ジャパンカップ 2014
ジャパンカップ • 2012年にミニ四駆30周年を記念して復活! • 第三次ブームのきっかけになった •
昨年の動員数は2万人。 • 全盛期1996年は30万人超 • 安定の富士通乾電池提供
• 6月22日(日) 東京大会1 品川シーサイドフォレスト・オーバルガーデン(東京都品川区) •
6月29日(日) 大阪大会1 京セラドーム大阪・9Fスカイホール(大阪市西区) • 7月 6日(日) 愛知大会 愛・地球博記念公園 地球市民交流センター(愛知県長久手市) • 7月13日(日) 群馬大会 ニューサンピア高崎・多目的ホール(群馬県高崎市) • 7月20日(日) 静岡大会 ツインメッセ静岡(静岡県静岡市) • 8月 3日(日) 愛媛大会 今治港特設会場(愛媛県今治市) • 8月17日(日) 仙台大会 サンフェスタ・1Fイベントホール(仙台市若林区) • 8月24日(日) 東京大会2 品川シーサイドフォレスト・オーバルガーデン(東京都品川区) • 9月 7日(日) 広島大会 広島マリーナホップ(広島市西区) • 9月14日(日) 北海道大会 新千歳空港 イベントホール翔(北海道千歳市) • 9月21日(日) 福岡大会 かしいかえん シルバニアガーデン 大テント(福岡市東区) • 9月28日(日) 東京大会3 東京ビッグサイト(東京都江東区) • 10月5日(日) 大阪大会2 京セラドーム大阪・9Fスカイホール(大阪市西区) • 10月12日(日) 岡山大会 岡山おもちゃ王国(岡山県玉野市) • 10月19日(日) 東京大会4・チャンピオン決定戦 MEGA WEB(東京都江東区)
参加方法 • 昔のように事前抽選はない • 当日参加 •
でも遅くなると参加できない • 通称:0次予選
クラス • ジュニアクラス(中学生以下) • オープンクラス(誰でも) •
チャンピオンズ(公式大会優勝者) • ファミリークラス(小学校3年生まで、または共 同製作した中学3年生までの親子) • ファミリークラスは1次予選のみ
シード代表決定戦 • 全国各地のミニ四駆ステーションで行われる大 会で優勝すると2次予選から参加できる • お近くのミニ四駆ステーションへ •
http://www.tamiya.com/japan/mini4wd/ station_race/jcup2014_0603.pdf
ミニ四駆を始めるため に必要な物
はじめるために必要な物 • ミニ四駆 • パーツ •
工具 • コース • 友達
シャーシ • http://www.tamiya.com/japan/cms/ newstopics/2276-mini4chassis.html • 14種類? •
タイプ1∼3シャーシは手に入らない • とりあえずMAシャーシから始めればいいと思う
モーター • http://www.tamiya.com/japan/download/ pdf/mini4wd/parts/mini4wd_motor.pdf • たくさんある •
ハイパーミニ/ハイパーダッシュなんてもうない • MA/MSシャーシは両軸モーターなので間違えな いように
パーツ • ありすぎる • とりあえずモーター全種類買っとけ •
あとファーストトライパーツセットとか
ステー/プレート • 強度を上げたり、ローラーベースを広げたりする • 加工して自作パーツを作る
ブレーキ • レーンチェンジャーやドラゴンバックでコースア ウトしないように減速させる • 最近のモーター/コースでは必須アイテム
ダンパー • ジャンプして着地後に衝撃を吸収させる • ショック吸収タイヤなんて今や夢パーツ扱い
その他のパーツ • パーツについてはきりがないのであとはググれ • ネットで買うならヨドバシ.comが最強 •
パーツ1つでも送料無料で翌日配達
工具 • ドライバー • ボックスドライバー •
ニッパー • ペンチ • ヤスリ • ピンセット • デザインカッター • ノギス • ホビールーター
コース • JCJC (安いとこで14Kぐらい) •
オーバルホームサーキット (8Kぐらい) • もしくは近くのミニ四駆ステーションへ • レンタルできるが送料考えると割に合わない
#ミニ四駆を走らせたい お客様の中に、会社にコースあるって方はいませんか?
おまけ
JavaFX 3DとJBulletで 物理演算の話 ∼ミニ四駆シミュレータを作りたい∼
ミニ四駆シミュレータ https://www.youtube.com/watch?v=Ag16KQ7YrSg
JavaFX 3D • javafx.scene.shape.Shape3D •
Box/Cylinder/Sphere/MeshView
物理演算エンジン 物理演算エンジン(ぶつりえんざんエンジン、Physics engine)とは、質量・速度・摩擦・風といった、古典力 学的な法則をシミュレーションするコンピュータのソフ トウェアである。多くの場合、ミドルウェアライブラリ を指す。 略して物理演算、物理エンジン、Physicsとも 言う。 http://ja.wikipedia.org/wiki/物理演算エンジン
http://www.nicovideo.jp/tag/物理演算
JBullet • Bullet Physics
Library (http://bulletphysics.org/ wordpress/) のJava版 • 本家の最新版は2.83、バージョン3系が開発中らしい • JBulletは本家の2.72がベース • 開発は2010年で止まってるっぽい
ざっくりとした使い方 • DynamicsWorldを作る • 物体をDynamicsWorldに入れる •
DynamicsWorldにシミュレートさせる • 描画するのはBulletの仕事ではないので自前で用 意する → JavaFX 3D
JBulletでHelloWorld
HelloWorld.java • JBulletのサンプルについてる • 球体が自由落下して地面に跳ね返る •
画面はないので球体の座標が標準出力に出るだけ
DynamicsWorld // おまじない! CollisionConfiguration collisionConfiguration
= new DefaultCollisionConfiguration(); CollisionDispatcher dispatcher = new CollisionDispatcher(collisionConfiguration);! // 物理世界の大きさ! Vector3f worldAabbMin = new Vector3f(-10000, -10000, -10000);! Vector3f worldAabbMax = new Vector3f(10000, 10000, 10000);! // 物理世界に存在できる物体の数! int maxProxies = 1024;! AxisSweep3 overlappingPairCache = new AxisSweep3(worldAabbMin, worldAabbMax, maxProxies);! // ソルバーなにそれおいしいの! SequentialImpulseConstraintSolver solver = new SequentialImpulseConstraintSolver();! // 物理世界! DiscreteDynamicsWorld dynamicsWorld = new DiscreteDynamicsWorld(dispatcher, overlappingPairCache, solver, collisionConfiguration);! // 重力! dynamicsWorld.setGravity(new Vector3f(0, -9.8, 0));
地面を作る // 地面の形状(Box)! CollisionShape groundShape
= new BoxShape(new Vector3f(50.f, 50.f, 50.f));! ! // 地面の位置! Transform groundTransform = new Transform();! groundTransform.setIdentity();! groundTransform.origin.set(new Vector3f(0.f, -56.f, 0.f));! ! // モーションステート(これ重要)! DefaultMotionState myMotionState = new DefaultMotionState(groundTransform);! ! // 質量(単位はKg、0にすると無限大)! float mass = 0f;! // 地面の物理的なあれ! RigidBodyConstructionInfo rbInfo = new RigidBodyConstructionInfo(mass, myMotionState, groundShape, localInertia);! RigidBody body = new RigidBody(rbInfo);! ! // 力学世界につっこむ! dynamicsWorld.addRigidBody(body);
球体を作る // 球体! CollisionShape colShape
= new SphereShape(1.f);! collisionShapes.add(colShape);! ! Transform startTransform = new Transform();! startTransform.setIdentity();! ! // 質量1kg! float mass = 1f;! ! // 初期位置設定! startTransform.origin.set(new Vector3f(2, 10, 0));! ! DefaultMotionState myMotionState = new DefaultMotionState(startTransform);! ! RigidBodyConstructionInfo rbInfo = new RigidBodyConstructionInfo(mass, myMotionState, colShape, localInertia);! RigidBody body = new RigidBody(rbInfo);! ! dynamicsWorld.addRigidBody(body);
シミュレートする for (int i=0;
i<100; i++) {! dynamicsWorld.stepSimulation(1.f / 60.f, 10);! ...! }!
JBullet HelloWorld + JavaFX 3D
JBullet + JavaFX
3D • 力学世界に入れてる物体をJavaFX 3Dで描画する • JBulletのCollisionShapeと同じ形状/位置/姿勢の ものをJavaFXのShape3Dで作る • シミュレートして、それぞれの物体の位置/姿勢を JavaFXのノードに適用する
Node CollisionShape
地面を作る(JBullet) // 地面の形状(Box)! CollisionShape groundShape
= new BoxShape(new Vector3f(50.f, 50.f, 50.f));! ! // 地面の位置! Transform groundTransform = new Transform();! groundTransform.setIdentity();! groundTransform.origin.set(new Vector3f(0.f, -56.f, 0.f));! ! // モーションステート(これ重要)! DefaultMotionState myMotionState = new DefaultMotionState(groundTransform);! ! // 質量(単位はKg、0にすると無限大)! float mass = 0f;! // 地面の物理的なあれ! RigidBodyConstructionInfo rbInfo = new RigidBodyConstructionInfo(mass, myMotionState, groundShape, localInertia);! RigidBody body = new RigidBody(rbInfo);! ! // 力学世界につっこむ! dynamicsWorld.addRigidBody(body);
地面を作る(JavaFX) // 地面の形状(Box)! Box groundNode
= new Box(100, 100, 100);! ! // 地面の位置! boxNode.setTranslateX(0);! boxNode.setTranslateY(-56);! boxNode.setTranslateZ(0);
JavaFXの座標について 3D を行うのに欠かせないのが、座標です。もちろん、JavaFX でも
3 次元の座標 を扱うのですが、ちょっとだけ注意が必要です。 というのも、通常の 3D の CG Tool は y 軸が数学と同じで上方向を向いています。 ところが、JavaFX では 2D と 3D を区別なく使えるように しているためなのか、y 軸が下を向いています。 ツールで作ったモデルをインポートしたら、なぜかモデルが下を向いていたという こともあるので、注意が必要です。 もし、下向きの y 軸がいやなのであれば、z 軸を中心にし て 180 度回転させます。 JavaFX 8 で 3D その 1 - JavaFX in the Box http://skrb.hatenablog.com/entry/2013/12/25/002250
座標 JavaFX JBullet x軸に180 回転してやる
地面を作る(JavaFX) // 親ノードをx軸に180°回転! Group root
= new Group();! root.setRotationAxis(new Point3D(1, 0, 0));! root.setRotate(180);! ! root.getChildren().add(boxNode);
Nodeの変換 JavaFX JBullet Box BoxShape Cylinder
CylinderShape Sphere SphereShape MeshView BvhTriangleMeshShape Group CompoundShape
MotionState
地面を作る(JBullet) // 地面の形状(Box)! CollisionShape groundShape
= new BoxShape(new Vector3f(50.f, 50.f, 50.f));! ! // 地面の位置! Transform groundTransform = new Transform();! groundTransform.setIdentity();! groundTransform.origin.set(new Vector3f(0.f, -56.f, 0.f));! ! // モーションステート(これ重要)! DefaultMotionState myMotionState = new DefaultMotionState(groundTransform);! ! // 質量(単位はKg、0にすると無限大)! float mass = 0f;! // 地面の物理的なあれ! RigidBodyConstructionInfo rbInfo = new RigidBodyConstructionInfo(mass, myMotionState, groundShape, localInertia);! RigidBody body = new RigidBody(rbInfo);! ! // 力学世界につっこむ! dynamicsWorld.addRigidBody(body);
MotionState • dynamicsWorld.stepSimulation()を実行すると それぞれの物体の位置とかを計算してくれる • シミュレートごとに各物体の計算結果が MotionStateのsetWorldTransform()で渡され る •
DefaultMotionStateクラスを継承してJavaFX 用にあれしてやればいい
JavaFXMotionState @Override! public void setWorldTransform(Transform
centerOfMassWorldTrans) {! super.setWorldTransform(centerOfMassWorldTrans);! ! Quat4f rotation = new Quat4f();! centerOfMassWorldTrans.getRotation(rotation);! double rad = 2 * Math.acos(rotation.w);! ! Platform.runLater(() -> {! node.translateXProperty().set(centerOfMassWorldTrans.origin.x);! node.translateYProperty().set(centerOfMassWorldTrans.origin.y);! node.translateZProperty().set(centerOfMassWorldTrans.origin.z);! node.setRotate(rad * 180 / Math.PI);! node.setRotationAxis(new Point3D(! rotation.x / Math.sin(rad / 2),! rotation.y / Math.sin(rad / 2),! rotation.z / Math.sin(rad / 2)! ));! });! }
その他 • 2つの剛体を結合する制約とか • ソフトボディとか •
Vehicleとか • いろいろ調べないと分からない
ライブラリ作成中 • JavaFXのノードを作って物理的なパラメータを 渡せばあれしてくれる • GroovyFX用のも作成中 •
公開は未定
サンプル(Java) public class App
extends JBulletApp {! ! @Override! protected void create3D() {! Box box = new Box(50, 50, 50);! box.setTranslateY(-25);! box.setScaleX(0.5);! add(box, new BulletOption().restitution(1.0f));! ! Sphere sphere = new Sphere(5);! sphere.setTranslateY(30);! add(sphere, new BulletOption().mass(10).restitution(0.1f));! }! ! ...! }!
サンプル(GroovyFX) start {! stage(title: "Hello
World", visible: true, primary: true) {! scene {! perspectiveCamera(true, nearClip:0, farClip:1000)! simulator {! box([50, 50, 50], translateY:-25, mass:0, restitution:1.0)! sphere(5, translateY:20, mass:10, restitution:0.1)! }! }! }! }
まとめ • 大阪大会まで3ヶ月 • 参加される方は
@kiy0taka までご連絡を • あと会社にコースあるよって人も
ご清聴ありがとう ございました
Advertisement