catalinaの備忘録

ソフトウェアやハードウェアの備忘録。後で逆引きできるように。

Nvidia Jetson TK1のセットアップ

やっと届いたNvidiaのJetson。

思っていた以上におかしなところで詰まったので、メモ。

一番困ったのはパソコンモニタにHDMIの口が無いってことだったんですけどね。。。

 

 

クイックスタートガイド(本家)

http://developer.download.nvidia.com/embedded/jetson/TK1/docs/2_GetStart/Jeston_TK1_QuickStartGuide.pdf#nameddest=Introduction

 

ハードウェア側の準備

Nvidia Jetson-TK1を準備する

  • HDMI出力端子をパソコンのモニタにつなぐ
  • USB端子にUSBハブをつなぐ
  • USBハブにマウスとキーボードをつなぐ
  • LANケーブルを接続する。LANにはDHCPサーバがあればラク。無いなら、同一サブネットに存在するようIP設定する。
  • SDカード指しておく(外部ストレージとして)
  • Jetsonの電源を入れる(電源が3つ足なので、変換コネクタが必要なら適宜入れる。)

ここまででJetsonが起動してモニタにUbuntuの画面が出てくる。ふつうにブラウジングもできる。

なんか動かしたい人は、クイックスタートガイドの最初のほうに書かれてるサンプルコード持ってくると満足感を得られるかも。

ビルド済みバイナリのtarballなのでとりあえずは動いた。

 

前準備

Flashing Jetsonの章にかかれているとおりに、flashをアップデートする。

ターゲット(JetsonTK-1)に書き込むので、イメージを準備するためにubuntuのホストPCが必要。

今回使った環境は

Windows8.1 + VMware + ubuntu

必須の設定として

  • USBホストデバイスをVMwareから使えるようにする
  • ネットワークはブリッジモード(JetsonにSSHで直接ログインできる環境が必要)
  • 付属のUSBケーブルをホストPCにUSBを接続。ケーブルのもう一方をJetsonのMicroUSB-Bに接続。(flashの書き込みに必要)

 

開発環境の準備(JetPack)

ここはマニュアルに記述されている手順通りに進める。

Before you Beginに記述されている前準備で必要なことを確認する。

このあたり(Jetson TK1 Development Pack)からJetPackを落としてくる。クロスコンパイルするために必要な環境らしい。

 

JetPackのインストール

ダウンロードしたばかりのJetPackは実行権限がついていないので、chmod +x filename でつけてあげる。

上記のクイックスタートガイドに従い、ファイルマネージャからダブルクリックで起動させる。

時折ターミナルが開いてjetsonのパスワードを要求して来たり、利用許諾を受け入れるかどうかとか聞かれるので、acceptなりyesなりで適当に進める。

しばらく進めると、またしてもrootfsの更新などが入るので気長に待つ。

 

このときにターミナルに以下のような文言が表示されるのでいうことに従う。

 

Please put your device to Force USB Recovery Mode, when your are ready, press Enter key

To place system in Force USB Recovery Mode:
1. Power down the device. If connected, remove the AC adapter from the device. The device MUST be powered OFF, not in a suspend or sleep state.
2. Connect the Micro-B plug on the USB cable to the Recovery (USB Micro-B) Port on the device and the other end to an available USB port on the host PC.
3. Connect the power adapter to the device.
4. Press and release the POWER button, if necessary; press and hold the FORCE RECOVERY button: while depressing the FORCE RECOVERY button, press and release the RESET button; wait two seconds and release the FORCE RECOVERY button.

 

4の手順までうまくいけば、以下のようなことが確認できる

  • JetsonのHDMI出力が無く、モニタに何も映らない
  • ホストPCのubuntu上でlsusbをすると、nvidia jetsonデバイスが目視確認できる

この状態であれば、enterキーを押してflashの書き込みができる。

 

サンプルプログラムや開発ツールなどの一式のデプロイ

cudatoolkit,opencv, perftoolのセットアップ

ここのインストール手順がどうしてこうなっているのか謎。自分が何かを間違えたんじゃないかと思うくらいに。

 

running target_sudoと記述されたターミナルが表示されたら、ターミナルはそのままにしておく。

そのまま別ターミナルもしくはターゲットデバイスのキーボードを直接操作してログインして

 

cd cuda-l4t/

sudo ./cuda-l4t.sh cuda-repo-l4t-r21.2-6-5-pred_6.5-34-armhf.deb 6.5 6-5

とする。

(シェル引数の意味はcuda-l4t.shに書かれている。)

これでcuda, opencv, perftoolがインストールされる。

ちなみに、cuda-l4tのディレクトリは上記のrunning target_sudoが表示された時点でデプロイ済み

 

なんか色々とおかしい気がするけど、まずは動作させることまでできたので良しとしましょう。

opc_hack_and_make に参加してみた

オリンパスからでている、opcに関するイベントがあったので参加してみた。

http://fabcafe.com/tokyo/events/opc_hack_and_make

想像よりも多くの人が集まっていた。

イベントの内容は、
  • パイロットプロジェクトの発表
  • opc,sdkの解説
  • テスターさんのアプリの体験
等。

自分は「これでどんなことができるのか」を知ることが目的だったので、sdkの解説に参加。

質疑応答では疑問点も解決できたので、目的自体は達成したと思う。
ほかの参加者から出ていた質問の内容も、大きな夢、作りたいものがあるという意気込みを感じた。
こういう刺激が新しいモノやサービスを生み出す原動力になるんだろう。


さて、自分の反省点としては、こういうイベントは場慣れしてないのもあって、多くの人と話すことはできなかったこと。
こればかりは、慣れの問題なのかもしれない。

話は変わるが、発注していたnvidiaのJetsonが届いていた。
opcのテスターは落選してしまったし、しばらくはこいつと戯れてみよう。

Arduinoを使って魔法陣ライトアッププロジェクト(魔法陣側のライトアップシステム検証)

コスプレで魔法詠唱中には魔法陣を出したいプロジェクト。

テープLEDを使った電飾は実現可能だということがわかったので、制御モジュールも自作しようということで作り始めました。

 

魔法陣モジュールの全体図

f:id:Catalina1344:20141214213647p:plain

前回のブログエントリで、テープLEDを使ったライトアップはできることまで確認済み。

そこで、次はArduinoでテープLEDを制御することを考える。

点灯パラメータはTWE-liteモジュールから、ZigBee通信で受け取った信号を使う。

実際の制御信号は杖に仕込んだ加速度センサなどから生成したいけど、それはまたおいおい検討していく。

 

今回やること

  • 今回はTWE-liteとArduinoの接続実験
  • Arduinoを使ったテープLEDの点灯実験

 

まず、TWE-liteとArduinoの仕様

ZigBeeワイヤレスモジュール TWE−Lite DIP−PCB (半完成品セミキット): 無線、高周波関連商品 秋月電子通商 電子部品 ネット通販

Arduino Leonardo (ピンソケット・ピンヘッダ未実装): マイコン関連 秋月電子通商 電子部品 ネット通販

なんでLoenardoかと言われると、深い意味はない。ウチに転がってたので使おうってだけ。

ZigBeeを使う理由も特になし。モバイルで動かすことを想定しているので消費電力の低い無線通信だったら何でもよかった。他に候補としてあったのはLowLevelBlueToothとか。

 

TWE-LiteのPWM出力をArduinoで受け取る

直結してもうまくいかなかった。

ただし、Arduinoは動作電圧は5V, TWE-Liteは動作電圧は3V。

というわけで、回路はこんな感じになりました。

f:id:Catalina1344:20141214210829p:plain

ポイント

  • ArduinoのAREFピンにTWE-Liteの動作電圧と同じ3Vを入力する
  • Arduinoのプログラム中でanalogReference( EXTERNAL )してAD変換の基準電圧をAREFの3Vにあわせる
  • TWE-Liteの出力はPWMなので、適当な積分回路を通してからArduinoのアナログ入力に与える

これでTWE-Liteの入力信号をArduinoのソフトウェア内で扱うことができるようになった。

ちなみにPWMを直接Arduinoに与えると0と1023の2値しか出してくれなかった。

ADCの仕様わからないからなんとも言えないけども、積分

した電圧を与えるとうまくいくので、ADC側の仕様の問題かもしれない。

 

ArduinoでテープLEDを制御する

まずはパーツ紹介

前回のブログエントリで紹介したテープLEDに追加で、こんなパーツ買ってきた。

家に転がってたものも一応掲載。

ブレッドボード用DCジャックDIP化キット: 組み立てキット 秋月電子通商 電子部品 ネット通販

東芝 2SK2231 FET

フルカラーテープLED(RGBLED45個付1.5mタイプ): LED(発光ダイオード) 秋月電子通商 電子部品 ネット通販

24W級スイッチングACアダプター12V2A NT24−1S1220: 電源一般 秋月電子通商 電子部品 ネット通販

 

さて、12Vの電圧をブレッドボードにつないで、+側をテープLEDの+端子につなぐ。

この端子に対して制御すればいいんだけども、テープLEDは1.35Aが最大で流れるらしい。そのままマイコンつなぐと当然壊れるし、2SC1815ではちょっと力不足。

そこで、2SK2231を使うことにした。以前のエントリで書いたモータの制御で使ったやつですね。これなら1.35Aは全然余裕。

とりあえず赤色のLED端子に対して実験する。

回路図。

f:id:Catalina1344:20141214214912p:plain

回路図書き終わってから気づいたけど、ARDUINOの出力部分にプルダウン抵抗付け忘れてますね。あとで修正しましょう。

これで魔法陣側モジュールの技術要素の確認まで完了した。

 

さて、調子に乗ってRGB全部制御してみたのがこちらの写真。

f:id:Catalina1344:20141213160516j:plain

写真左がArduino Leonardo, 中央がDCジャックとMOS-FET(2SK-2231), そこから伸びてるリード線がテープLED用の信号線。

 

いい感じに点灯してくれた。(自画自賛)

 

これで魔法陣側モジュールの技術要素は問題ないことが確認できた。

次は杖に仕込むモーション検出用のセンサの検討ですね。

魔法陣コースター作ってみた

 

経緯

コスプレで足元に魔法陣出したい。杖振り回すと、魔法陣と杖が連動して光ってほしい。

というわけで、実現可能性を検証するために色々試してみた。

いい感じになったので、マグカップとか置けるようにコースターにしてみました。

まずは写真。

 

通常光で点灯

f:id:Catalina1344:20141206212139j:plain

最大出力で白色点灯

f:id:Catalina1344:20141206212134j:plain

 

青色光で点灯(マグカップ載せてみた)

f:id:Catalina1344:20141207155551j:plain

 

赤色光で点灯(マグカップ載せてみた)

f:id:Catalina1344:20141207160100j:plain

 

氷マナで冷えてしまったコーヒーも炎マナで一気に過熱して暖かく……はならない。

まあ気持ちだけってことで。

 

材料

アクリル板

東急ハンズの店頭で買ったのだけど、ネットからだと見当たらず…どこにあるんだろう。

スポンジ板

NR黒セルスポンジ 5×100×100|【東急ハンズネットストア】

光モ-ル カブセ 12 1m -ホームセンター通販サイト・コメリドットコム

ビニールテープ

Amazon.co.jp: ビニールテープ (黒)19mm×20m: 文房具・オフィス用品

 

テープLED

フルカラーテープLED(RGBLED18個付30cmタイプ): LED(発光ダイオード) 秋月電子通商 電子部品 ネット通販

テープLED用の電源

24W級スイッチングACアダプター12V2A NT24−1S1220: 電源一般 秋月電子通商 電子部品 ネット通販

テープLED用コントローラ

フルカラーLEDコントローラー(赤外リモコン式): 半導体 秋月電子通商 電子部品 ネット通販

 

 

作るのに必要な機材

  • 電源(ふつうの家庭用電源でOK)
  • レーザーカッター(アクリルの刻印用。適当なシェア工房でお借りしましょう)
  • カッターナイフ(スポンジのカット用)
  • はさみ(ビニールテープのカット用)
  • のこぎり(枠のカット用)
  • 自分を信じる心

 

作り方

アクリルにレーザーカッターで刻印するための図柄を書く。

レーザーカッターのツールでつかえるフォーマットは、基本的にはベクトル形式のデータ。

そこで今回はInkscapeというツールを使ってみることにする。GIMPでもいいらしいけど。

Inkscape - 窓の杜ライブラリ

ベクトル形式の図柄を書くにはadobeイラストレータがオススメらしいんだけども、いかんせん高いのでこいつで代用。

書きあがった図柄がこちら。

f:id:Catalina1344:20141207172016p:plain

周囲の文字は某ネトゲのタイトルとか技名をそのまま記述。

 

あとは物理的に作るだけ

 

1, アクリルにレーザーカッタで刻印する

今回はこちらの工房をお借りしました。

http://makers-base.com/

機材の調整とか含めて一時間半くらいでできました。

 

2, アクリルの下に敷くスポンジを、アクリルと同じ大きさにカットする

なにごともなく数分で終わる作業。

四角なので失敗することもないでしょう。

 

3, カブセをカットする

アクリルの周囲を取り巻けるくらいの大きさにカットする。内側の窪みにテープLEDを張り付けるので、そのぶんの余裕をとることを忘れずに。

4つパーツが切り取れたら、4辺のスミをナナメ45度にカットする。切っておかないと、組み立てたときにぶつかってしまうので。

 

4, カブセの内側にテープLEDを配置する

テープLEDの両面テープ部分をはがして、カブセの内側に貼り付ける。

実際に4辺を正方形にした状態で綺麗に張れるように適当に調整する。

 

5, カブセとアクリルをくっつける

カブセの内側の凹みにアクリルとスポンジ板を入れる。

入ったら、カブセの四隅を固定していくために、ビニールテープで固定する。

ビニールテープは外に見えてしまうけども、なるべく綺麗になるように。

 

6, 電源を接続する

テープLEDの端子にコントローラの端子をつなぐ。

コントローラの電源入力端子にACアダプタをつなぐ。

最後にACアダプタの電源を入れる。

 

あとは専用コントローラでぽちぽちと遊びましょう。

 

今後の展望

コスプレ小物として足元に出すためには、もっと大きな魔法陣でやりたい。

ただ、レーザーカッターに入る大きさの上限があるので、分解の仕方を考えないときつい。(おかしなところで分割してしまうと、見た目が残念になってしまうので。)

 

今回ためしに使ってみたカブセはなかなかいい感じ。プラスチック素材なので多少は曲がってくれるので、実物大(今回の20倍くらいの大きさを想定)をつくるときはこれをまげて使えばいけそう。熱を加えればさらに曲がってくれるだろうし。

Maker fair Tokyo2014いってきた

何か面白いもの無いかなとMaker fair Tokyo 2014いってきました。

こういう場は刺激的で楽しい。

自分も新しいものを作り出そうっていうエネルギー分けてもらえる。

 

というわけで、見て回った範囲をざっと写真で。

と思ったけどブログに載せていいかどうかほとんどの出展者様に許可とるのワスレテタ。

仕方ないので文字媒体のみで。企業さんは一部写真で。

 

らってん技研様

立体起動装置のフルメタル制作の展示。実際に持たせてもらうとずっしり。

しかもギミックも動く!

・刃は取り外せる

・トリガは駆動するけど、アクチュエータがまだないらしい(ガス出力とアンカー出力)

f:id:Catalina1344:20141123143336j:plain

超カッコイイ。弟子入りしたいくらいですわ。

 

TAC様

フルカラーLEDライトセイバー

スターウォーズの世界。電源入れると「ブォン!」ってカッコイイ音と共に光だす。

振ると音がする。刃同士をぶつけると音がする。これすごいほしい。

それにしても音がするってのは大事なんですね。改めて学んだ。

 

NVIDIA

JetsonTK1の展示

f:id:Catalina1344:20141123171124j:plain

ラズベリーパイでは処理能力の限界がきついし、画像処理しつつロボット制御するのきつそうだよなぁ。。。とずっと保留にしてた自分。

コレあればいけるんじゃないかな。OpenCVの特徴点検出機能をCUDAでGUP上で高速処理。お値段は数万円と、手の届かない範囲ではないけども高価。

まあOpenCV関連はしばらくは追い続けたいので、今やろうとしてる魔法陣プロジェクトが終わったらやってみたい。

 

Intel

Edison。乱暴な表現だけで済ませるならArduino互換機。

IntelNVIDIAも入ってきたということで、これまではアキバの秋月とか千石あたりにいる人たちの趣味レベルで留まっていた電子工作分野も大きく動いていくことになりそう。

これから市場規模はもっと大きくなっていくんじゃないかなと予想してる。

市場規模というかモノづくりという働き方そのものが変わっていくんじゃなかろうか。

 

アーテック様

レゴブロックみたいな感覚で電子パーツをくみ上げてギミックが作れるブロックの展示と実演。楽しそう。

子供も頃にこういうのに触れることができたら、もっと機械を好きになりそう。

 

 

ステージイベント

ひととおり見てまわってたところ、なんかステージのほうでライブが始まった。聞き覚えのあるメロディ。

「スパーク一発やり逃げ!!」

明和電機さんじゃないですか!

 

屋外展示場

ドローン飛ばしてた。風に流されながらもがんばってた!

 

 

あと色々見てきた。

帰宅後すぐにビール飲んで寝てしまったせいで、記憶とんだ。カタログ見ながらどこ回ったか思い出そうとしてるけど曖昧。

 

 

レーザープロジェクタ

ブース名失念してしまいました。。。

ガルバノは買ってきたらしいけども、カメラで外部の映像を取り込んで、輪郭だけレーザーで投影してた。

ガルバノ思ったより小さかった。機器全体で大き目のポーチくらいの大きさ。

電源さえなんとかなれば、コスプレで魔法詠唱ポーズで足元に魔法陣とかできる気がする。

 

体験会

光の小箱ってことで、万華鏡っぽいもの作る体験会やってた。アルミホイルみたいなのと、カラーセロハンを組み合わせるだけ。あとはセロハンテープでくっつけて完成。お手軽に楽しめるので、小さな子供たちにも人気でした。

 

オキュラスリフト

ヘッドマウントディスプレイ

色々と個性的な展示が多数でした。

実用的なものから、エンターテインメント性に富むものまで。

メーヴェナウシカに出てくるあの乗り物ですね。

楽しそうだった。あとは速度にあわせて風とか出せればもっと楽しめそう。遊園地のアトラクションみたいに。

 

ハウジングは、レゴブロックとかで家の間取りや家具の配置を再現した空間をエミュレーションして、その空間内をヘッドマウントディスプレイで歩き回るという。

実際に家を買う人にとっては大きな買い物なので、家具配置や家の間取りを実感するにはこういうのが役立ちそう。

 

ニコニコ技術部

ニコニコらしいのがたくさん。

  • 新着動画表示デバイス
  • ホットサンド焼きマシーン

新着動画はニコニコのAPIたたいて、その結果をLCDディスプレイとかに表示するパターン。かっこいいしPC作業の邪魔にならない!なんという優れもの。

 

ホットサンド焼きマシーンは…ホットサンドってこうやって作るものじゃなかった気がする。という動画のやつですね。屋内で高温ガス出力で焼くのはダメらしく、実演ははできないそうでした…。

 

 

全体的な感想

電子工作系がすごく多かった印象。

また開催されるならぜひ行ってみたい。そのうち自分も何か出展したいな。

……と、その前に、冬コミ向けの魔法陣作りたい。時間とれるかなぁ。。。。。

boost::streambufの内部構造の調査

以前書いたエントリのboost::asioの続き的なもの。

boost::streambufというものをを使うと、バッファの細かいことを意識せずにread/writeをできるので便利そうだと感じた。

ただ、コレって内部実装によって性能に大きな影響が出るんじゃないかな?という疑問から調査。

今回知りたかったポイントは

  • バッファの内部構造(リングバッファ?キュー?)
  • 特にキューの場合はnew/deleteのような動作がread/writeごとに走る?

結論

バッファ内部はただのリニアなメモリ。(std::vector)

これをstd::streambufの機能を使って使いまわす。

バッファは常に先頭からデータが並んでいるように管理される。

(つまり、consumeでメモリコピーを行い、残りのデータをバッファ先頭にもっていく。)

 

使い道としてはソケット通信とかなので、よっぽど大きなデータを転送しない限りは問題にならないと思う。

大きなデータをバッファリングしつつ使う用途では避けたほうがよさそう

(バッファリングしたデータすべてがmemmoveで移動されてしまうので。。。)

 

 

というわけで、以降はboost::streambufについての調査メモだらだらと

調査メモ

boostバージョン 1.41

/usr/include/boost/asio
    streambuf.hppでの定義

typedef basic_streambuf<> streambuf


このことから、basic_streambufの調査だけ行えばよい

basic_streambufの定義
basic_streambuf
: public std::streambuf,
  private noncopyable



内部バッファ
  std::size_t max_size_;
  std::vector<char_type, Allocator> buffer_;


basic_streambuf コンストラクタ
    内部バッファbuffer_を初期化する
    これは、128(buffer_delte)もしくはmax_size_の何れかの要素数をもつよう初期化される。

    その後親クラス(std::streambf)のsetg, setpを呼び出し、入力シーケンスと出力シーケンスの初期化を行う。

    std::streambufの入出力シーケンスの扱いは次のとおり
    
                        beginning           current position            end
                    (beginning pointers)    (get/put pointer)       (end pointers)
Input sequence          eback               gptr                    egptr
Output sequence         pbase               pptr                    epptr



prepare()の動作
    reserve()でバッファを予約する。
    output-sequenceのcurrent-positionポインタを返す。
    戻り値はmutable-buffer形式(mutable-bufferの内部はpointerとsizeのpair)

commit()の動作
    ポインタの計算を行い、output-sequence, input-sequenceのポインタを更新する
    ・output-sequenceの current-pointerを更新する
    ・input-sequenceの begin, current, endそれぞれのポインタを更新する

data()の動作
    constバッファを構築して返す。(const_bufferの内部はconst-pointerとsizeのpair)
    const-bufferの指すポインタは、input-sequenceのcurrentにセットされる
    sizeはoutput_current - input_currentである。

consume()の動作
    gptrを進める




reserve()の動作
    Input-sequenceのcurrentが、バッファ先頭にないとき(つまり、残っているデータがある?)
    memmoveでバッファ先頭へデータを移動する。

    Output-sequenceの残りサイズよりも大きなバッファを要求されたときは、
    resizeを行う


overflow, underflow
    - 未調査

OpenGLでパーティクル実験

ひとまず条件付きでできたので、アップロード。

mmdviewリポジトリのparticleブランチ

コミットNo: 94b7ed9a81ab6d54c8f721a71db4b89ca6bf47b0

javoren/mmdview · GitHub

 

中心から放射状に広がるパーティクル

見ていて飽きない。特に背景真っ黒だから、加算半透明が綺麗。

 

動かしてみるとこんな感じ。

f:id:Catalina1344:20141026222515p:plain

 

コード中で使っている関数の説明

パーティクル用のパラメータ設定の関数を記載。

 

glDisable(GL_DEPTH_TEST);

深度テストを無効にする。いわゆるZバッファの無効化。

本来ならば、一番奥にある半透明オブジェクトからレンダリングしていくべきだが、今回はこれで暫定対処。

 

glEnable(GL_BLEND);

アルファブレンディングによる半透明を有効にする。

 

glDisable(GL_APLHA_TEST);

アルファテストを無効化する。アルファテストは、アルファ値の比較でレンダリングする/しないを判断する機能。

今回はアルファブレンドで加算半透明だけやりたいので切っておく。

 

glBlendFunc(GL_SRC_APLHA, GL_ONE);

加算半透明のパラメータ。他にも減算とか乗算とか色々ある。

今回は光を表現したいので、加算半透明で。

 

glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);

半透明の演算方法を指定する。

テクスチャのα値とプリミティブのα値をどのように扱うかがここで決まる。

これが一番自然に見える設定っぽい。

 

パーティクルの変換行列の設定

 

glTranslatef(px, py, pz);

座標の設定。今回のパーティクルは中心部から放出されるようなものを表現したかったので、px,pyに対して移動速度をランダムに設定してあげるだけでそれっぽい感じに。

float mx, my;という移動速度用の変数をもっておき、

mx = rand() % 50;

mx *= 0.01f;として、適当な範囲の乱数を求める。

そして

px += mx; py += my;

の演算を毎フレーム実行する

 
glScalef(sx, sy, sz);

スケールの設定。これにより各パーティクルの大きさを決める。

各粒子は

  • 出現時に大きさ確定する
  • 出現時の大きさはある程度の乱数の範囲内に絞る
  • 出現後の大きさは固定とする

コードとしては

float scale = (rand() % 100) * 0.01f;

sx = sy = sz = scale +0.1f;

ここで0.1が最小サイズ、上限が1.10fあたり。

 

その他こまごまとやったこと

テクスチャをBMP形式で読んできているので、αチャネルが存在しない。

そこで、RGB各チャネルの平均をα値として使うことにした。

テクスチャ読み込み後のコードに対して単純にRGBごとの演算をしてあげた。

 

パーティクルの素材作り

こればっかりはプログラマには向いてない。致命的なくらいに。

グラデーションを生成するくらいはできるけども、素材を色々と試したいときは手間が多い。

フォトショップ欲しいなぁ。

 

さて、気楽に光を表現するためのパーティクル作れるツールないかなと探していたところ、「きらきら筆」というツールの存在を思い出したので早速使わせてもらいました。

結構古いツールだけども、ちょっとした素材を作るという今回の目的は十分すぎるくらい達成してくれました。

 

 

感想・今後の展望

やっぱりパーティクルは綺麗だし見ていて楽しい。

今ある制約を取り払って色々な環境で動くようにしたい。

修正していくつもりなので、今ある制約メモ

  • ビルボードにしたい。カメラの位置が変わっても板ポリゴンだとわからないようにしたい
  • 頂点色の設定をできるようにして、魔法の属性ごとに色を替えるとかやりたい
  • パターンをもっと増やしたい。例えば爆風とか、光のシャワーとか
  • あ。BMPコミットしてしもうた。バイナリはgithubに入れたくない

というわけで今回はこんなところで。