3DCG屋さんの活動記録

PROFILE ★★こんな人です

映像制作会社でクリエイティブの修行中。日ごろはMaya&AEを中心にいろんなCGソフトを触りながら、TD寄りの作業が好きで、インタラクティブな体験型空間演出をやりたいと模索中。面白いこと新しいこと大好きな『素直』でいつづける

2017年12月31日日曜日

BlenderGame に ArduinoからSerialでボタン入力! その2


pyserial  inWaiting() でデータ受信の確認してる
https://www.youtube.com/watch?v=k2prOyRfimg&t=168
受信バッファとは http://www.7key.jp/nw/tcpip/tcp/window.html

pyseialのオプオプション(Serialオブジェクトのメソッド)
https://github.com/whosaysni/pyserial-doc-ja
http://pythonjp.osdn.jp/contrib/pySerial/README_JP.txt

とりま、Arduinoのボタン押してる間だけ動く、システム作成
Arduino
Blender Python
でそれぞれ設定


ちなみに、Arduinoでpyserialの送信で改行したいとき
必要な "\n" のバックスラッシュ。
Macでは 『option + ¥』 で 入力できる!


で、なぜかボタンを離しても一定時間信号受信してる。
シリアルモニターを同時起動すると、離した時に信号切れる・・・
おそらく、改行込みで送信した文字列が、受信バッファに溜まって
フレームレートの異なる環境(ArnordoとBlender)でずれる。



=========
Arduino
=========

===================
Blender python (for BGE)
===================



================================
★スイッチ離したら重力で落下
 motionにz 0.2 を追加。
 おさるの右端タブでStatic を Rigidに変更
Bulled(物理演算)参考サイト

★GameSatrtのショートカット  キーボードのP
ショートカットまとめサイト


★Python使ってScaleの変動Logic


オブジェクトのScaleをPythonで変化させるのは
cont.owner.localScale.x
もしくは
cont.owner.localScale=[Ax,Ay,Az]

================================



えーと色々と書きましたが、まとめます。

試行錯誤の結果・・・

Arduinoのボタンを押している間だけBlenderで処理を実行
※ボタンOffが遅延することなく

ができました!!!!!!!

ArduinoとBlenderPythonの内容は以下の通り。

=========
Arduino
=========
上記のスケッチでOk

===================
Blender python (for BGE)
===================





 
Arduinoのボタンを押している間だけ、処理実行。
処理:回転&スケール3倍
重力適用しているので、処理終わると下に落ちる





2017年12月27日水曜日

Blender GameLogic基礎 〜 PythonでSensor検知とActuators実行


ようやく、GameLogicでPythonを使う方法がわかってきた
今回は入力検知と処理実行、という超基礎部分。


「キーボードを押している間だけ回転する」というものを
GameLogicだけと、Pythonを使っての比較。
その2つを、図では結果が同じ内容で試してます。


ポイントは

◾️Sensorを検知

#一旦変数にする
click = cont.sensors["keyClick"]
rot = cont.actuators["rot"]

◾️Actuatorの開始と停止

if click.positive: #clickされていたら処理
    cont.activate(rot)   #開始
else:    #clickされていなかったら処理
    cont.deactivate(rot)   #停止


以上。
「停止」しないといけなかったんかぁ。
こちらの動画から学びました、いつもありがとうござます。


ではまた

2017年12月25日月曜日

BlenderGame に ArduinoからSerialでボタン入力! その1


前回から時間が経ったので、まずは復習&確認から


⑴まず、ArduinoでボタンのONOFFチェック(Lチカ=LEDチカチカテスト)
  ・・・サンプルスケッチからテスト。ok。なんて基礎からするんだと、悲しいw
     ※参考




⑵次に、Blenderでpyserialがimportできるかチェック。
  ・・・lenderでpySerialが使える設定が完了
     



⑶次に、Blenderでpython使ったlogicの復習
   ・・・sensor Always,  controller Python,  actuator  Logic
                  実にシンプル





⑷上記の基礎の復習を終えて、ここからが今回の本題!
 Arduinoのボタン入力をSerialに送り、Blenderでpyserialから取得、Cubeを回す

まずは、Arduino、ボタン押したらserial出力するスケッチ↓


//Arduinoでボタン押すとシリアルそうしん &LEDテントウ


const int buttonPin = 2;
const int ledPin = 13;
int buttonState = 0;

void setup(){
  pinMode(buttonPin,INPUT);
  pinMode(ledPin,OUTPUT);
  Serial.begin(9600);
}


void loop(){
  buttonState = digitalRead(buttonPin);
  if (buttonState == HIGH){
    Serial.write("1");
    digitalWrite(ledPin,HIGH);
  }else{
  
    digitalWrite(ledPin,LOW);
  }
  delay(30);
  
}



次に、Blender python で serial通信を受信してfor文を実行するやつ

が、うまくいかず・・・

その前にまずは、pythonの関数を実行するテスト

Aキーを押してる間だけおサルが回転するLogic
のはずが、なぜか回転が止まらない
printはちゃんと押してる間だけ出力されてる。
理由は分からず、、、調べときます!

ちなみにPythonは作成したあと画面下パネルのTextから保存して、読み込んでます。
あと関数は()をつけないとだめ!



ちなみにこちらがpyserial with Blenderの参考



以上、続きは今度。

・Pyserialのreadを含む関数、を呼び出すPython作成










Mac でBlenderのPrint結果を表示する


Blender (game)でPythonを使い始めて、
printの結果が表示されるウインドウがないことに困っていた。

が、調べると ConsoleWindow っていうのがある
しかも window/Toggle console window から表示できる、とあるけど・・・
ないじゃん!



よくわからずに、ずっと放置してたけど
ようやく解決!

それは、、
MacのTerminalからBlenderを起動するってこと。

ショートカットキーで説明↓↓↓

  Ctrl + Space   で [Spotlight検索] 起動して


  terminal   と入力して[Terminal(ターミナル)]起動して
※画面上のタブで 移動/Applications/ユーティリティ/ ターミナル からも起動できる


  /Applications/Blender2.79/blender.app/Contents/MacOS/blender   でBlender起動!
※画面上のタブで 移動/Applications/ 内のBlender2.79 フォルダ内にBlender.appがある場合


するとBlenderが起動されます。
あとは、Blender Game のpythonにprintを記述して、GameStartすると
起動していたTerminalにprint結果が表示されます




おおお!!!!
これこれこれが欲しかった〜😄

ちなみに、printで文字列を出力するときは
print ("aaaa") のようにかっこで囲むことを注意!


・・・ただ、毎回ターミナルで記述するのは面倒。。
ということで上記の内容をエイリアス(ショートカット?)で時短!
内容は.dashrcを編集するってこと。

ちょっと複雑ですがとりあえず通しで書きます。
以下、順番にTerminalで実行してください。

  vim ~/.dashrc   で.dashrcを編集!(or作成)

そのまま記述してReturnキー押して実行

Vimで.bashrcする画面になります。
使い方が特殊です。詳細は調べてみてください


まず、i でインサートモードに。


上記のように記述。
マウスは使えません。
←↑→↓キーで移動、コピペもできます!
終わったら、ESCキーでインサートモード終了。


最後に、 :wq で.bashrcを保存してVim終了。



  source .dashrc   で.dashrcを登録(?)



  blender27   でBlenderを起動!



以上。
次からはblender27と打つだけで、consoleも同時に起動されます。
(というかTerminalに結果がでるだけだけど。。)


これでようやくトライアンドエラーが捗る。

てか、Vim初めて知った!
すごい便利〜、でもCUIじゃないとできないのが不便><
かといってGUIのツールを入れるのもなんだかな。
あとは、macがファイル名先頭に . がついていると表示されない、っていうのも!


参考サイト1:ターミナルで色々する
参考サイト2:Vimについて説明