Large Display Size Middle Display Size Small Display Size

2015 年 9月 の日記

2015/9/23(水)

fig.
▲Lazurite Sub-GHz で無線通信をするには
「Lazurite Sub-GHz で無線通信をするには」

IoTの試作用基板である 「Lazurite Sub-GHz」 から920MHz帯周波数を使い、「Raspberry Pi + Pi Gateway」 と無線通信を行います。なるべく初心者の方にもわかるように説明しており、屋外実験なども行っています。

左の画像をクリックするとそのページを表示します。



2015/9/22(火)

fig.
▲Star Pusher

Raspberry Pi 2 に同梱されてる倉庫番ゲーム「Star Pusher」("星を押す人")

1面は操作説明的でごく簡単ですが、2面から急に高難度になる(写真)。3面はともかく、4面はやり直しの連続で1時間くらいかけてしまった。それが201面まであるらしい。

音楽無しで、キーの反応は標準入力のキー入力みたいな感じで、まぁ大したことないゲームといわれればそうかもしれませんが、改めて倉庫番の面白さを感じさせてくれて、あとグラフィックがきれいでグラフィックが面白さに寄与しているなと思いました。



fig.
▲LiniuxディストリビューションRaspbian

Raspbian の X Window System のメニューから Python games を選び、表示されるウィンドウの starpusher Sokoban を選びます。

Raspberry Pi を始めるには、電気関係の通販やAmazonで4000~5500円程度(model A, model B, A+, B+, 2の5種)で購入します。必要な周辺機器は、HDMIのディスプレイとそのケーブル、キーボード、マウス、8GB以上のmicroSDカードです。それからむき出しの基板なのでケースもあったほうが良いでしょう。

model A, B は旧機種なので選ばないほうが良いでしょう。A+はLANコネクタがありません。2が最新機種で4コアでメモリ1GBの恵まれた機種でWindows10もインストール可能だそうです。私は旧機種のBと最新の2を持っていますが、両方とも無線LANの子機をUSBに接続してインターネットができました。

Raspberry Pi の解説はネット上にも書籍にもたくさんあるので、ある程度問題なく始められると思います。

(いろいろやろうとするとLinuxなので悩まされることも多いと思いますが…)




2015/9/17(木)


▲車の3DCG
 左の画像リンクをクリックすると、新しいウィンドウが開き、JavaScriptによるプログラムで、車がくるくる回ります。
「画家のアルゴリズム」という方法で「隠面処理」(向こう側の面を隠す処理)をしています。
 ワイヤフレームでは3D迷路もスケスケになってしまいますが、隠面処理を行えば壁を塗りつぶして迷路らしく画面が描かれる…そういう良さがあります。


 しかし、「画家のアルゴリズム」は手前の面におおわれてスッポリ隠れる奥の面も一度は画面に描いてしまうので、その分低速です。

 それに対し、「法線ベクトル法」という別の隠面処理を、「画家のアルゴリズム」と合わせて行えば、「画家のアルゴリズム」で無駄に描いている「目の前に見えない面」を計算で見つけ出して描画しないようにする、というプログラムが組めます。


▲法線
「法線ベクトル法」の「法線」とは難しそうな言葉ですが、単純に「面から垂直に突き出す線」です。面が向いている方向を線で表したものです。



▲3DCG作成ソフトの「Shade3D」で各面(ポリゴン)の法線を表示させたところです。
難しそうに見えますが、面が向いている方向を示しているだけです。

「法線ベクトル法」の「ベクトル」とは、これまた難しそうな言葉ですが、線と線の接触を考えるような計算のことです。

というわけで、「法線ベクトル法」とは、法線(面から垂直に突き出す線)と、視線(画面の視点からその面へ一直線に伸びる線)との2つの 線の接触を考える、という隠面処理です。難しい計算ではありますが、公式を使って解くだけと言えば、その通りなので簡単かもです。

<法線ベクトル法の考え方>


▲直角
 目の前に "これからチョップするぞ" というポーズで手の平を縦に構えたとき、手の平が向いている方向は、視線から見て直角になっていると思います。(チョップの構えでは手の平は直角にそっぽを向いています)
 このとき、2つの線(手の平の方向を表す線と、視線)が90度で交わっていると言い、そのとき、その面(手の平)は見えない、と判断します。



▲鋭角
 手の平を手前にわずかにこちらに向けると、2つの線は90度以下の鋭角で交わっていることになり、その面(手の平)は見える、と判断します。


 
▲鈍角
 そして、手の平をわずかに向こう側に向けると、(視線は手の甲へ当たりますが気にせず、)2つの線は90度以上の鈍角で交わっていることになり、その面(手の平)は見えない(90度以上は見えない)と判断します。見えない面は描く必要がありません。これが「法線ベクトル法」のアルゴリズムです。



▲ちょっと無理のある画像説明ですが…
「法線ベクトル法」のアルゴリズムを六面体で考えると左図のような感じです。

 モデルのすべての面について、このアルゴリズムで面が見えるか見えないかを判断して、描画する、しないを制御すれば、「法線ベクトル法」による隠面処理となります。

最初の画像リンクの車がくるくる回るJavaScriptでは「画家のアルゴリズム」だけをつかっており、低速になっていますが、「法線ベクトル法」を加えるとたぶん高速になると思います。

最初に「法線ベクトル法」で見える面だけをピックアップしてから、「画家のアルゴリズム」で並び替えを行い、そして面を1枚1枚描いていきます。

ちなみに「画家のアルゴリズム」は、隠面処理としては完璧ではなく、失敗して、見えないはずの面を表示してしまうことがあります。隠面処理としては簡易的なものです。「法線ベクトル法」も完璧ではありません。

ひとつ大事なことを言わせてもらうと、回転しない3D静止画と、画家のアルゴリズムまでは、中学1年生を過ぎた少年でもできる範囲です。

そして回転と法線ベクトル法は、回転は「三角関数」、法線ベクトル法は「ベクトル」を使うので、高校生の範囲です。

このように手の届かない計算ではないので、みなさんも3DCGを試してほしいと思います。


2015/9/6(日)


▲「Lazurite Sub-GHzを使い始める」
「Lazurite Sub-GHzを使い始める」
無線で温度などのセンサーの情報を送信する場合(IoT)に有効な基板です。
その開梱からLEDチカチカまでの案内です。

左の画像をクリックするとそのページを表示します。


2015/9/1(火)


▲Nintendo3DSで3DCG描画
 Nintendo3DSのプログラミング環境「プチコン3」で3DCGのプログラムを書きました。
 左の写真をクリックすると、その動画とソースコードを表示します。


ページ制作 homepage6047



ページの上端へ (もくじ開く)