いまさら 超時空要塞マクロス 愛・おぼえていますか 1

TV放映(1982~83年)終了後、1984年に上映された「愛・おぼえていますか」です。キャッチフレーズの「それは時空を超えたラブソング」でしたね。映画の描写は緻密で「さすが劇場版」と思えた作品ですね。

Sponsored



舞台は土星宙域で展開しているゼントラーディ軍のブリタイ司令とエキセドル参謀のマクロスから捕獲した物品や電波情報についての会話から始まります。そしてマクロスが土星の影から現れ、バルキリー隊による戦闘が始まります。開幕時からバルキリーはファストパック付きのスーパーバルキリーでした。発進方法もTV版のプロメテウスからの滑走ではなく、アームド1から懸架された状態から推進器を起動しての発進シーンは、無重力空間を意識したもので斬新でした。

アーマードバルキリーも登場します。TV版と違うのは胸部のミサイルの数ですね。マクロスクロニクルの図のように片側5発となっています。

ミンメイちゃんは、既に確固たるアイドルの地位を得ていました。コンサート中にゼントラーディ軍との戦闘が始まってしまい、コンサート会場の避難場所で待機していました。

しかし、そこにゼントラーディ軍のヌージャデル・ガーが侵入し、あろうことかコンサート会場に落下します。あわてて逃げようとするミンメイちゃんですが、トランスフォーメーションによる艦内ブロックの移動でお付きのカイフンと離れ離れになってしまったうえ、ヌージャデル・ガーに追われてしまいます。危機一髪のところで一条君のバルキリーがヌージャデル・ガーを撃破するのですが、トランスフォーメーションと重力制御装置の故障で一条君のバルキリーと一緒に無人のエンジンブロックに落下(?突入)してしまいました。

ここからは、サービスカットの連続です。マクロスがタイタンから発信する際の加速度によって、無重力空間のエンジンブロックにいる二人は慌てます。

あろうことか、アイドルの胸を触ったり(もちろん事故です)、

スカートがまくれあがり、中が見えそうになったりして大変でした。でもまぁ、若い二人は無重力環境に馴れるのも早く、すぐに移動のコツをつかみ楽しく過ごすのでした。そして、本映画で最大のサービスシーンとなるミンメイちゃんのシャワーシーンです。

その後、自身の身の上話をする二人ですがミンメイちゃんは地球に残っていた両親のことを心配していました。そこで一条君は、話題を変えて当時ゴシップとなっていた共演相手とのことに話題を振ります。「あれは演技よ」とはぐらかすミンメイちゃん。「やってみせましょうか?」と一条君とキスに至ります。

キスの最中に重力制御の回復と隔壁の開放が行われ、二人のキスはパパラッチされてしまうのでした。(つづく)

いまさら 超時空要塞マクロス デストロイド ファランクス

デストロイド 「ファランクス」です。他のデストロイドと異なるのは、マクロス艦内で開発・製造された、ということでしょう。

諸元 SDR-04-Mk.XII ファランクス (SDRはSpace Diffence Robotの略称)
分類 宇宙用近接防空型デストロイド
所属 地球統合軍
設計 マクロス艦内兵器工廠
開発 マクロス艦内兵器工廠
製造 マクロス艦内兵器工廠
全高 12.05m(サーチライト上端まで)
全備重量 47.2t
エンジン (主機)クランス・マッファイMT828 熱核反応炉
(副機)新中州重工CT03 小型熱核反応炉
出力 (主機)2800SHP
(副機)970kW
武装 SHIN-SHM10 短射程高機動自己誘導ミサイル 22発ポッド×2
(通称:デリンジャー22連装ミサイルポッド)
テクスコ・DARDA-3C 電子系破壊用グレーザ・レーダー(探知兵器)
乗員人数 1名

「超時空要塞マクロス」の世界では、近接防空型デストロイドとして、地対空または艦対空迎撃に活躍していました。もともと宇宙用として開発されましたが、地上での運用も確認されています。

地球にむけて帰還途上のマクロスでは、防空力の補強が緊急の課題とされていました。防空の要として期待されていたディフェンダーは、の応急策として、懐に入られると何もできないディフェンダーが照準、装弾システムの複雑さから、なかなか量産に乗らずにいました。そこで、マクロス艦内で急遽対空兵装の開発を行うことになりました。その際、SLV―111ダイダロスの艦内に多数保管されていた04系の歩行システムを流用し、近接防御用のデストロイドが完成し2009年7月にロールアウトしました。ディフェンダーでの経験を活かし、照準、兵装を単純化しています。そのコンセプトは、ディフェンダーらの対空射撃を掻い潜って急速接近する敵機に対してミサイルの弾幕を張るというショートレンジの迎撃を行うというものでありました。

04系デストロイドの歩行パーツを使い、単純な撃ちっ放し式ミサイルポッドを付けた簡素な設計です。ミサイルの排煙処理も左右のミサイルポッドで完結しています。

さらに劇中では頭部の形状が異なる機体が存在したりと、「現場合わせ」の間に合わせの機体の感が強いものでした。

もちろん、”腕”はありませんので、近接戦闘には滅法弱く、ヌージャデル・ガーの体当たりを受けて、分解寸前になっていました。

 

しかし、主機・副機ともに反応エンジンを使用しており、ミサイルポッド後方の大型推進ノズルを吹かせば短時間の高機動運動が可能でした。移動範囲は狭いのですが、ミサイル放出後の移動に重宝したようです。

簡素化のために設けられた胸部内のガンマ線照射式レーダーは、最大出力で照射した場合、相手機のパイロットを焼殺することができたといわれていますが、劇中で使用されたようなシーンは確認されていません。

緊急量産型の機体ですが、ディフェンダーの穴を埋め、コストも低く、一応の成功を見た機体といえるでしょう。

 

いまさら 超時空要塞マクロス デストロイド ディフェンダー 2

何気に、お気に入りのディフェンダーなので、もう少し語らせてください。

手持ちの資料で、いままでの戦車砲の弾頭質量(重量)と初速の関係を求めてみました。

近似曲線から求めるに、初速3300m/secを達成するには、弾頭質量が1.15kg程度の軽量なものになってしまいます。

次に、弾丸発射による反動ですが・・・。

砲をL75と仮定すると砲身長はおおよそ5.85mです。発射から0.0035秒で砲身を飛び出し、その加速度は、930769m/sec2です。砲弾質量を1.15kgとすると反力は109tfとなります。同様の計算で求めたKwK 43L70の1.43倍ですね。駐退機の効果の見積もりができないので(すみません。どなたか教えてください)単純には比べられませが、ターレットリングに相当する腕の付け根のベアリングの設計には気を使いそうですね。

あと、射撃時の反動を受け止めるための脚部の制御なんかも興味があるところです。

ビーム兵器ではなく、実体弾兵器を主兵装としているディフェンダーって硬派なかんじで好きなんです。

 

いまさら 超時空要塞マクロス デストロイド ディフェンダー

デストロイド 「ディフェンダー」です。トマホークが遠中距離砲撃戦用なら、ディフェンダーは対空、近接戦闘用です。劇中では、艤装が完全ではないマクロスの各部に配置され対空戦闘(戦闘ポッドの迎撃)に従事していました。そのためか、デストロイドの中での登場回数は2番目です。

アマゾン.co.jpより

型式 ADR-04-Mk.X ディフェンダー (ADRはAnti-air Diffence Robotの略称)
分類 対空迎撃型デストロイド
所属 地球統合軍
設計 ビガース/クラウラー社
開発 ビガース/クラウラー社
製造 ビガース/クラウラー社
全高 10.73m(アンテナまで)
全備重量 27.7t
エンジン (主機)クランス・マッファイ MT828 熱核反応炉
(副機)GE EM10T 燃料発電機
出力 (主機)2800SHP
(副機)510kW
武装 エリコーンTYPE966 PFG 78mm液冷高速自動砲
(通称コントラベスII)2連装×2
乗員人数 1名

04シリーズのひとつで、両腕の2連対空砲から大口径78mm弾を1砲身あたり毎分500発(4門計毎分2,000発)発射可能です。弾帯は両肩部の交換式弾倉から供給されます。エリコーンコントラベスIIは初速3300m/secと高速で宇宙空間での超遠距離射撃を目標とした精密なレーダー照準システムが搭載されているせいかコストが高く、量産できず、機体配備数は伸びなかったのです。

テレビのシーンでは、両側の砲からビームが出ているようにも見えましたので、実体弾を打ち出すことは、設定資料を見てから知りました。ラインメタル社の120mm44口径が1600m/secですし、火薬式の限界は2000m/secと言われていますので、ディフェンダーの砲はレールガン方式かなにかなのでしょう。

 

 

いまさら 超時空要塞マクロス デストロイド トマホーク 2

引き続き、デストロイド トマホークに注目していきましょう。

・脚部の機構

履帯に代わって、上部構造物を支えて不整地を走破し、砲撃時の反動を吸収するための脚部は重要な部分です。特に、04系はモジュール化により他機種にも使用されています。

現在の2足歩行ロボットの股関節は、片側3自由度を有しています。

マクロスクロニクルの資料によれば、トマホークが属する04系の構造は図のようになっているそうです。片側の自由度は3のようです。

現在の技術で球面モーターというものがあります。下のリンクは、産総研で研究されているものの動画です。

球面モーター – YouTube

これが、OverTechnorogyで小型・軽量・高出力化されれば、デストロイドの駆動に使えるようになると思います。

最高速度180km/hに達し、背部下方のスラスターを用いればジャンプ移動も可能となっています。これなら、リガードと十分渡り合えることになります。

熱核反応炉など動力源は、上部構造物にあると思います。武装ごとに必要な出力が違うでしょうし、上部に置けばエネルギーの発生源と消費部位を腰部(ロータリージョイントなど)介さずに連結できます。回転部へのエネルギー・信号の伝達は現在でも技術上の課題です。

いまさら 超時空要塞マクロス デストロイド トマホーク

デストロイド「トマホーク」です。マクロスで人気のあるメカの一つです。

登場回数は結構多いのですが、盛大に撃ち合うシーンは少なく、ダイダロスアタックの時の斉射くらいでしょうか。長距離で敵艦と撃ち合うには火力が足りず、高速で移動する戦闘ポッドとの戦闘はディフェンダーやスパルタンの方が目立っていました。

諸元
MBR-04-Mk.VI トマホーク
分類 重装砲撃型デストロイド
所属 地球統合軍
設計 ビガース/クラウラー社
開発 ビガース/クラウラー社
製造 ビガース/クラウラー社
全高 11.27m(頭部まで)
全備重量 31.3t
エンジン (主機)クランス・マッファイ MT828 熱核反応炉
(副機)GE EM9G 燃料発電機
出力 (主機)2800SHP
(副機)450kW
武装 PGB-11 荷電粒子ビーム砲×2
M-89 空冷マシンガン×2
TZ-III ガンクラスター×2
(レーザー砲、機関砲、火炎放射器など)
12連発ロケット弾ランチャー×2
6連発対空自己誘導ミサイル×1
乗員人数 2名

「超時空要塞マクロス」に登場する重装砲撃型デストロイドです。型式名のMBRはMain Battle Robotの略です。現用の主力戦車、MBT(Main Battle Tank)に由来してつけられたものです。その開発コンセプトは、機体前面に各種武装を配し、集中的火力により中・近距離域の敵陸上兵力を殲滅する、というものでした。
Mk.IVは初めて制式採用されたデストロイドシリーズの主力機であり、MK.Iの両腕を荷電粒子ビーム砲に置き換え、火力向上を図っています。格闘能力の低下は、胸部ガンクラスターの機関銃やグレネードランチャー、火炎放射器などの近接兵器で補っています。肩腕部はウェポンベイとして随時換装可能で、04系の特徴である上半身の独立した燃料発電機により稼動します。Mk.VIは出力強化型で、右肩にエリコーン対空自己誘導ミサイル6連発オプションパックを装備している。主力戦車的な機体であり、ダイダロスアタック時には最前列に陣取り、水平方向への強力な攻撃力を見せつけました。
トマホークの属する04シリーズは主機熱核反応エンジンと歩行制御システムを内蔵する下半身を共通プラットフォームとすることで、量産性・運用性の向上やコストダウンを図っています。例えるならトマホークが主力戦車、ディフェンダーが自走対空機関砲、ファランクスが自走対空ミサイルで、共通シャーシを用いたAFVのファミリー化と同じ発想といえますね。

 

いまさら 超時空要塞マクロス デストロイド スパルタン

いまさらですが、デストロイドに注目してみたいと思います。まずは、スパルタンです。

すでにご存じかと思いますが、「デストロイド」は「超時空要塞マクロス」に登場する架空のロボット兵器です。デストロイドは陸上兵器がロボットに発展したと想定した場合のものです。設定資料によりますと、デストロイドの系譜はビガース社・クラウラー社が共同開発した04シリーズと、センチネンタル社・クランスマン社が共同開発した07シリーズがあることになっています。スパルタンはMBR-07-MK2ですので後者の系統です。画面では動きが速くてわからなかったのですが、資料集をよく見ると、股関節にあたる部分や足の形が04シリーズと異なることがわかります。

左はMk.Iで右がMk.IIですね。スパルタンは、近接格闘型デストロイドということで、異星人との肉弾戦を想定した歩兵的機体です。Mk.Iに対空火器を付加したのがMk.IIで、のちにMk.Iも全機この仕様に改装されました。
07系の駆動系は、高出力の反応動力炉1基で駆動します。副動力を除いて軽量化し、その分を装甲と運動性能の両立に用いています。背面にはロケットノズルを備え、機動性の向上に一役かっています。腰部の複雑な動力伝達系の故障と主機DT2000シリーズの開発遅延から、07系は本機のみですが、理想主義的な高性能はパイロットから評価されていました。これら07系の設計思想はセンチネンタル社が係わるバトロイドの開発にもフィードバックされました。

スパルタン最大の特徴は、格闘戦を主目的としていますので両腕の先端の手の部分が五指のマニピュレーターになっていることです。また、格闘戦用ということで、パイロットのシートベルトもハーネスタイプのがっちりしたものとなっています。(下図)

 

実際の格闘戦(16話)でも、ひとまわり大きい敵戦闘ポッドおよびバトルスーツ相手に大型のマニピュレータでリガードの脚部を破壊するなど健闘しています。戦後の統治下では、ゼントラーディ人不満分子の鎮圧活動における警察警備的な活躍での利用が目立ちます(第34話では主人公一条輝が搭乗する)。この際には専用の暴徒鎮圧用棍棒を使用しています。

劇中では戦闘ポッド相手に健闘している場面と、反対にこてんぱんにやられている場面(ヌージャデル・ガーに投げ飛ばされるシーン)とがあり、やはり戦果は操縦者の技量に依存するのでしょうね。

 

諸元
MBR-07-Mk.II スパルタン
分類 近接格闘型デストロイド
所属 地球統合軍
設計 センチネンタル社/クランスマン社
開発 センチネンタル社/クランスマン社
製造 センチネンタル社/クランスマン社
全高 11.31m(肩まで)
全備重量 29.4t
エンジン グゲンハイマー DT2004 熱核反応炉[8]
出力 3200SHP
武装 TZ-IV ガンクラスター×1
(レーザー砲、機関砲、火炎放射器など)
RQV-10 対空レーザー機銃×2
ビフォーズ12連発近接自己誘導ロケット弾ランチャー×2
CH2 typeD 格闘用クローハンド×2
乗員人数 1名

いまさら 超時空要塞マクロス リガード ODE 自由落下

読み込んだSTL形式のデータを表示するところまでは達成しました。今回は、ODEでリガードを自由落下させてみましょう。

リガードのモデルで「質量」に関わるものは球形としています。これは扱いを簡単にするためです。そして、接触の判定に用いられる「形状」についてSTLデータからの三角形を使用しています。動画内の焦げ茶色の平面は地面を表しています。リガードのモデルと地面が接触する面の反発力は0、摩擦係数も0としています。重心を表す球は接触判定の対象外としています。(地面を貫通します。)

リガードのモデルの座標系(局所座標系)の原点を確認してみましょう。赤い球で局所座標系の原点を表示すると、下のように足元のあたりになります。リガードモデルを自由落下させると、着地のショックで少し揺れますが、すぐに静止します。右側に動画をリンクさせていますので見てください。(初めて画面の録画に挑戦したもので、上手くいかなかったのですが、雰囲気はわかって頂けると思います。)

Animation

これを、下の位置に移動させます。球を大きく表示しただけですが、赤いリガードもカッコイイかも。でも結果はあまり変わり映えしませんね。3Dプリンタで製作するためのモデルですから、安定性はそれなりに考えられているのですね。

Animation2

もう少し重心を後ろに移動させてみましょう。今度は見事にスリップダウンしました。

Animation-u

Animation-l

では、今回のCodeを添付します。後方に転倒した時のデータとなっています。CodeについてはこれからPythonを勉強して改善していこうと思います。そしてODEを用いて鳥の脚(逆関節)の2足歩行について検討していく予定です。

Sample_STL_read4

 

いまさら 超時空要塞マクロス 第36話(最終回) やさしさサヨナラ

第36話最終回となる「やさしさサヨナラ」です。反応炉エンジンの部品の強奪に成功し、カムジンたちは逃げ去っていきました。一条君とミンメイちゃんは、本編で3回目となる二人きりの夜を迎えます。早瀬さんといいミンメイちゃんといい、やはり主人公の一条君には強い女性運があるようですね。

クリスマスを終えたマクロスシティーは暗い冬の空です。そんな中、マクロスの展望台から一人空を見上げる早瀬さんは、軍を辞めることを考え思い悩んでいました。もちろん、原因は一条君とミンメイちゃんです。

その一条君も、ミンメイちゃんから軍を辞めるように迫られていました。「あなたが軍人を辞めてくれるなら、私、歌手を辞めてもいいわ。」とまで言ってもらっていました。そして、一条君とであった頃に戻りましょうと。この時に使われていたのが、「結婚式でもやりますか」のシーンです。つまるところこれは、ミンメイちゃんからの逆プロポーズなのでしょうか。

一方、エンジンの部品を手に入れたカムジンたちは、戦艦を一隻稼働状態に仕上げていました。そして昔のように戦場で暴れまくるために出発します。まずはマクロスを目標に進路を取ります。まあ、カムジンはマクロスにこだわりますね。あんなボロ船なんかほっといて行けばいいのにと思うのですが。

一人黄昏ている早瀬さんのところに、クローディアさんがグローバル総司令が呼んでいることを告げます。そして、早瀬さんの胸中を察して励まします。そんなクローディアさんに、早瀬さんは自身のコンプレックスを話すのでした。出頭した早瀬さんにグローバル総司令は新しい任務を依頼します。それは、新しい星間移民船の艦長でした。除隊を申請しようとする早瀬さんに、グローバル総司令は、「一条大尉が原因かね?」と突いてきます。「女性の士官が突然軍を辞めたいと言い出すときは、決まってそんなものさ」と年長者の貫禄を見せます。「文化を絶やさないためにも宇宙への移民を始めようと思う」という総司令の説得に早瀬さんの心は動かされるのでした。

一条君の方は相変わらず、決断できずに迷っています。そこに、宇宙移民艦の艦長を引き受けることを決意した早瀬さんが、お別れの挨拶にやってくるのでした。そして、一条君に自分の想いを自分の言葉で伝えるのでした。「一条君、あなたが好きです」と。そして、ミンメイちゃんにも「あなたも歌を大切に」とミンメイちゃんにも言葉を送るのでした。去りゆく早瀬さんを追いかけようとした一条君をミンメイちゃんが制止します。そして、まさにそのとき、カムジンたちの戦艦からのミサイル攻撃が始まるのでした。

市街がつぎつぎと破壊されいてくのを見て、早瀬さんと一条君は迎撃に向かおうとします。それをミンメイちゃんは、一条君の出撃を止めようとします。「どうして、そんなにまでして闘いにいくの?!」と。それに対し、早瀬さんは「ミンメイさん。あなたは一体誰のために歌を歌うの。」と問いかけます。そして「あなたの歌を愛してくれている人たちのためじゃなくて」「私たちが戦いに行くのもあなたが歌を歌うことと同じ理由なの」と続けます。それでもミンメイちゃんは「一人ぼっちにしないで」とすがります。それを振り切って一条君も出撃するのでした。

カムジンたちの戦艦は、マクロスを射程にとらえます。そして主砲の一撃をマクロスに放ちます。

それは、マクロス右舷中央部に命中。現司令センター区画を吹き飛ばします。市民の見ている中、ゆっくり後方へ倒れていくマクロス。早瀬さんの安否を気遣いながらも、一条君のバルキリー隊は空戦ポッドとの乱戦へ突入していきます。早瀬さんの機転で司令センターのメンバーはブリッジへ急ぎます。そこにはクローディアさんとグローバル艦長が待っていました。

浮上したマクロスから放たれた一撃は見事カムジンたちの戦艦を捉えます。

最期を悟ったカムジンは、体当たり攻撃を仕掛けます。マクロス側も残ったデストロイドでありったけの火力を向けるのでした。このとき、またも謎のデストロイドが映っています。某誌で取り上げられていましたが改めて見ると確かにありました。

カムジンたちの命を懸けた攻撃で、マクロスは右腕となるダイダロスを引きちぎられ大破させられましたが、轟沈は免れました。そして、これによりゼントラーディ人による大規模な反乱も終結したのでした。

廃墟となった街で、早瀬さんと一条君の互いの無事を確かめあう姿を見たミンメイちゃんは自分の決意を告げます。「知らない街へ行ってみる。そこでもう一度歌ってみる。もう歌を辞めるなんて言わない」と。そしていつの日か本当の自分の歌が歌えるようになったら、早瀬さんの艦に乗せてくれるよう頼むのでした。

二人のもとを去っていくミンメイちゃんの姿は降る雪で隠されていきます。降りゆく雪は、肩を抱き合う早瀬さんと一条君も包んでいくのでした。

 

いまさら 超時空要塞マクロス リガード 3Dモデル 2

前回からの続きです。Open Dynamics Engineでは、任意の三角形は、節点の座標データと、節点の番号データの配列で扱われます。STLデータでは、各三角形の頂点座標と法線ベクトルで構成されているので、少々変換が必要です。下はPyOdeのTutorialから、TriMeshDataの説明です。

前回のコードの読み込む処理を変更しました。

import os
import struct

from OpenGL.GL import *
from OpenGL.GLU import *
from OpenGL.GLUT import *
import pygame
from pygame.locals import *

import numpy as np
from struct import unpack

NormalV =[]
NodePoint = []
Vertex1 = []
Vertex2 = []
Vertex3 = []
NVertex = [[0,1,2],[0,1,2]]

Eye_from_x = 60.0
Eye_from_y = 50.0
Eye_from_z = 100.0

Center_X =0.
Center_Y =0.
Center_Z =0.

T_Color = [0.5, 0.7, 0.5, 1.0] #Object Color
 
def BinarySTL(fname):
 global NVertex
 #read start of file to determine if its a binay stl file or a ascii stl file
 fp=open(fname,'rb')
 h=fp.read(80)
 type=h[0:5]
 fp.close()

if type=='solid':
 print ( "reading text file"+str(fname))
 return
 else:
 print ("reading binary stl file "+str(fname,))
 fp = open(fname, 'rb')
 Header = fp.read(80)
 nn = fp.read(4)
 Numtri = unpack('i', nn)[0]
 #print nn
 record_dtype = np.dtype([
 ('normals', np.float32,(3,)), 
 ('Vertex1', np.float32,(3,)),
 ('Vertex2', np.float32,(3,)),
 ('Vertex3', np.float32,(3,)) , 
 ('atttr', '<i2',(1,) )
 ])
 data = np.fromfile(fp , dtype = record_dtype , count =Numtri)
 fp.close()
 
 Normals = data['normals']
 Vertex1= data['Vertex1']
 Vertex2= data['Vertex2']
 Vertex3= data['Vertex3']
 
 p = np.append(Vertex1,Vertex2,axis=0)
 p = np.append(p,Vertex3,axis=0) #list(v1)
 Points =np.array(list(set(tuple(p1) for p1 in p)))

NVertex = np.resize(NVertex,(len(Vertex1),3))
 NVertex[0][0] = Points.tolist().index([Vertex1[0][0],Vertex1[0][1],Vertex1[0][2]])
 NVertex[0][1] = Points.tolist().index([Vertex2[0][0],Vertex2[0][1],Vertex2[0][2]])
 NVertex[0][2] = Points.tolist().index([Vertex3[0][0],Vertex3[0][1],Vertex3[0][2]])
 for i in range(1,len(Vertex1)):
# print(i)
 NVertex[i][0] = Points.tolist().index([Vertex1[i][0],Vertex1[i][1],Vertex1[i][2]])
 NVertex[i][1] = Points.tolist().index([Vertex2[i][0],Vertex2[i][1],Vertex2[i][2]])
 NVertex[i][2] = Points.tolist().index([Vertex3[i][0],Vertex3[i][1],Vertex3[i][2]])
 
 return Header,Points,Normals
 
 return
 
def draw_box():
 global NormalV,NodePoint,NVertex

 glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, T_Color)
 glPushMatrix()
 glBegin(GL_TRIANGLES)
 for i in range(len(NormalV)):
 glNormal3f(NormalV[i][0],NormalV[i][1],NormalV[i][2])
 glVertex3f(NodePoint[NVertex[i][0]][0],NodePoint[NVertex[i][0]][1],NodePoint[NVertex[i][0]][2])
 glVertex3f(NodePoint[NVertex[i][1]][0],NodePoint[NVertex[i][1]][1],NodePoint[NVertex[i][1]][2])
 glVertex3f(NodePoint[NVertex[i][2]][0],NodePoint[NVertex[i][2]][1],NodePoint[NVertex[i][2]][2])
 glEnd()
 glPopMatrix()

def prepare_GL():
 global quadratic

 quadratic = gluNewQuadric()
 glViewport(0,0,640,480)

 glClearColor(0.8,0.8,0.9,0)
 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
 glDisable(GL_LIGHTING)
 glEnable(GL_LIGHTING)
 glEnable(GL_NORMALIZE)
 glShadeModel(GL_FLAT)

 glMatrixMode(GL_PROJECTION)
 glLoadIdentity()
 gluPerspective (90,1.3333,0.1,1000.)

 glMatrixMode(GL_MODELVIEW)
 glLoadIdentity()

 glLightfv(GL_LIGHT0,GL_POSITION,[0,0,1,0])
 glLightfv(GL_LIGHT0,GL_DIFFUSE,[1,1,1,1])
 glLightfv(GL_LIGHT0,GL_SPECULAR,[1,1,1,1])
 glEnable(GL_LIGHT0)

glDisable(GL_CULL_FACE)

gluLookAt (Eye_from_x, Eye_from_y, Eye_from_z, Center_X, Center_Y, Center_Z, 0.0, 0.0, 1.0)

def init_GL():

 glutInit ([])

 glutInitDisplayMode (GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH)

 x = 0
 y = 0
 width = 640
 height = 480
 glutInitWindowPosition (x, y);
 glutInitWindowSize (width, height);
 glutCreateWindow ("test".encode("cp932"))
 glEnable(GL_DEPTH_TEST)
 glEnable(GL_CULL_FACE);
 glCullFace(GL_BACK);

def _keyfunc (c, x, y):
 global Eye_from_x ,Eye_from_y, Eye_from_z,Center_Z
 
 if c == "p".encode("cp932"):
 Center_Z = Center_Z + 5.0
 elif c == "l".encode("cp932"):
 Center_Z = Center_Z - 5.0
 elif c == "j".encode("cp932"):
 Eye_from_x = Eye_from_x + 5.0
 elif c == "f".encode("cp932"):
 Eye_from_x = Eye_from_x - 5.0
 elif c == "b".encode("cp932"):
 Eye_from_z = Eye_from_z + 5.0
 elif c == "c".encode("cp932"):
 Eye_from_z = Eye_from_z - 5.0
 elif c == "u".encode("cp932"):
 Eye_from_y = Eye_from_y + 5.0
 elif c == "r".encode("cp932"):
 Eye_from_y = Eye_from_y - 5.0
 elif c == "q".encode("cp932"):
 sys.exit (0)
 else:
 print ("key missed")
 
 glutPostRedisplay()

def _drawfunc ():

    green = [0.2, 0.8, 0.3, 1.0]
    blue = [0.0, 0.0, 1.0, 1.0]
    red = [1.0, 0.0, 0.0, 1.0]
    prepare_GL()

    draw_box()
    glutSwapBuffers ()



def _idlefunc ():
 
 glutPostRedisplay ()



#main program loop
def main():
 global NormalV,Vertex1,Vertex2,Vertex3,NVertex,NodePoint

fname = "Zentradi_Battlepod_-_Low_Poly.stl" # "porsche.stl"

head,NodePoint,NormalV = BinarySTL(fname)

print(NVertex)
 print(len(NVertex))

print(NodePoint)
 print(len(NodePoint))
 
 max_x = -99999999999.
 min_x = 99999999999.
 max_y = -99999999999.
 min_y = 99999999999.
 max_z = -99999999999.
 min_z = 99999999999.
 for i in range(len(NodePoint)):
 if (max_x < NodePoint[i][0]): max_x = NodePoint[i][0]
 if (min_x > NodePoint[i][0]): min_x = NodePoint[i][0]
 if (max_y < NodePoint[i][1]): max_y = NodePoint[i][1]
 if (min_y > NodePoint[i][1]): min_y = NodePoint[i][1]
 if (max_z < NodePoint[i][2]): max_z = NodePoint[i][2]
 if (min_z > NodePoint[i][2]): min_z = NodePoint[i][2]
 print (max_x,min_x)
 print (max_y,min_y)
 print (max_z,min_z)
 Center_X = (max_x+min_x)/2.
 Center_Y = (max_y+min_y)/2.
 Center_Z = (max_z+min_z)/2.
 
 init_GL()
 glutKeyboardFunc (_keyfunc)
 glutDisplayFunc (_drawfunc)
 glutIdleFunc (_idlefunc)

glutMainLoop ()



if __name__ == '__main__':
 main()

貼り付け時にカラムがおかしくなってしまっているかも・・・。

今回が左(色を変えました)、前回が右です。うまくいっているようです。

次回は、ODEにおける質量などの情報の付加です。