Unityの立方体のuvをいじくる
Visual Studio Tools for Unity 1.9 公開されましたね.
UnityのC#がVisual studio で書けるってすばらしい.
えっ? Express edition では使えない!? (゚д゚)!
orz
気を取り直して,今日の本題です.
Unity の立方体の各面に,それぞれ別の絵を表示させたい時ってありすよね.
例えば,サイコロとか.
別のソフトで,テクスチャ込の立方体モデルを作ってそれを読み込ませるのが順当な手だとは思うんですが,それはめんどくさい o(`ω´*)oプンスカプンスカ!!
というわけで,C#でメッシュのuvをいじってなんとかしてみたいと思います.
(そっちのがめんどくさいだろというツッコミはスルー
UnityのCubeは六面体,当然ですが,面が6個あります.
その面は4つの頂点を持っており,それぞれの面の頂点を別物ととらえると6x4=24個の頂点があります.
この24頂点のuv値を,表示させたい画像に合わせて変更してあげればいいわけです.
それぞれの頂点は,下図のような関係にあると思われます.
(まちがってたらごめんんさい
この図を参考に,スクリプト上で,gameObjectから取得したメッシュのUVを書き換えてあげればOKです.
ソースコードは以下のような感じにして,下記のようなサイコロ画像を読み込ませればたぶん大丈夫です.
using UnityEngine; public class UVChange : MonoBehaviour { Vector2[] uv = new Vector2[24]; void Awake() { // 1の面 uv[2].x = 0.0f; uv[2].y = 0.0f; uv[3].x = 1.0f / 6.0f; uv[3].y = 0.0f; uv[0].x = 0.0f; uv[0].y = 1.0f; uv[1].x = 1.0f / 6.0f; uv[1].y = 1.0f; // 2の面 uv[4].x = 1.0f / 6.0f; uv[4].y = 0.0f; uv[5].x = 2.0f / 6.0f; uv[5].y = 0.0f; uv[8].x = 1.0f / 6.0f; uv[8].y = 1.0f; uv[9].x = 2.0f / 6.0f; uv[9].y = 1.0f; // 3の面 uv[23].x = 2.0f / 6.0f; uv[23].y = 0.0f; uv[21].x = 3.0f / 6.0f; uv[21].y = 0.0f; uv[20].x = 2.0f / 6.0f; uv[20].y = 1.0f; uv[22].x = 3.0f / 6.0f; uv[22].y = 1.0f; // 4の面 uv[19].x = 3.0f / 6.0f; uv[19].y = 0.0f; uv[17].x = 4.0f / 6.0f; uv[17].y = 0.0f; uv[16].x = 3.0f / 6.0f; uv[16].y = 1.0f; uv[18].x = 4.0f / 6.0f; uv[18].y = 1.0f; // 5の面 uv[15].x = 4.0f / 6.0f; uv[15].y = 0.0f; uv[13].x = 5.0f / 6.0f; uv[13].y = 0.0f; uv[12].x = 4.0f / 6.0f; uv[12].y = 1.0f; uv[14].x = 5.0f / 6.0f; uv[14].y = 1.0f; // 6の面 uv[6].x = 5.0f / 6.0f; uv[6].y = 0.0f; uv[7].x = 6.0f / 6.0f; uv[7].y = 0.0f; uv[10].x = 5.0f / 6.0f; uv[10].y = 1.0f; uv[11].x = 6.0f / 6.0f; uv[11].y = 1.0f; } // Use this for initialization void Start() { MeshFilter mf = gameObject.GetComponent<MeshFilter>(); mf.mesh.uv = uv; } // Update is called once per frame void Update() { } }
The Killing Pawn 感想
私は漫画が大好きで,毎週少年誌を買っていて,今週も当然マガジンを購入したのですが,そこに載っていた読み切りがすごく衝撃的でした.
読み切りのタイトルは「The Killing Pawn」
ARMSの皆川先生作画,進撃の巨人の諌山先生原作の将棋バトル漫画だそうです.
以下,ネタバレを含む可能性があります.
( ゚д゚)ポカーン ←読み終わった時の顔
将棋バトルってそういう意味!?
らんま1/2の○○格闘術的な!?
将棋というか,将棋使いやん! (バレーボール使いみたいな感じで
完全にテニプリ路線.
そして泣くようぐいす的なオチ
ぶっちゃけ面白かったです.
面白かったですけど,わらったら負けな気がするのは,なぜでしょうか・・・.
(´ε`;)ウーン…
なんかこう,笑わせようとしてるのが見え見えの展開で笑ってしまうのが,すごく悔しいというか,なんというか・・・.
とにもかくにも面白いには違いないので,読んでない人は読んでみるといいと思います.
ギャグ漫画系の読み切りの中では,ボーボボの読み切りの次に笑いました
アッヒャッヒャ!ヽ(゚∀゚)ノアッヒャッヒャ!
それはそうと,マガジンの新連載面白そう( ^ω^)ワクワク
あえてAnacondaに頼らないpythonインストール
windowsにpythonをインストールする時って,Anacondaが便利ですよね.
でも,Anacondaじゃ上手くいかない時もあるんです!
というか,あったんです・・・.
まぁ,めったにないとは思いますが,そんな時のためにpythonのインストール方法をメモメモ!
python, easy_install, pip, ipython までを入れたいと思います!
python 本体のインストール
python のホームページから最新版のインストーラをダウンロードします.
私の場合は,python2.7.8 でした.
インストール終了後,環境変数の設定を行います. ユーザ環境変数のパスに
C:\Python27;C:\Python27\Scripts
と入れてあげます.
別のディレクトリにpythonが入っている場合は,C:\Python27の部分をインストールディレクトリに読み替えてください.
pip のインストール
pipは,コマンドプロンプト上からpythonパッケージをインストールするツールのようです.
apt-getのpython版みたいなものでしょうか?
pipをインストールするには,easy_install というツールを使います.
では,まずeasy_install をインストールしましょう.
windows7の場合は,こちらのページから,ez_setup.py をダウンロードしてきて実行します.
python ez_setup.py
続いて,pipのインストールです.
easy_install pip
たったこれだけ.
この時,うまくインストールされない場合は,別バージョンのpipが残っていたりする場合があるので,エラーメッセージに表示されているディレクトリをポイしちゃいましょう.
たぶん,これで大丈夫です.たぶん.
ipython のインストール
補完機能が強力で対話的にコードが書けるipython を入れます.
pip install ipython[all] --upgrade
こうしておけば,ipythonを使うのに必要なあれやこれやを全てインストールしてくれる・・・と思います.
別ディレクトリのパッケージをimportするには?
python がすごく便利だと友人から進められて勉強しだしたものの,なかなか覚えられません...
しばらくは,このブログがメモ代わりになりそうです.
閑話休題.
ディレクトリAの中に,ディレクトリB, C があるとします.
今,Bの中にいるとして,C内のcc.py にアクセスしたいとき,普通にアクセスしようとすると何か怒られてしまいます.
下記のコードのようにすればいいようです.
import sys, os sys.path.append(os.pardir) # 親ディレクトリをpythonパスを追加 from C import cc
これで,うまく行く!と思いきや,ipython notebook で実行してみるとまた怒られちゃいました.
原因は複数のcellの内,どれかが未実行で最新になってなかったからなような,ちがうような・・・?
何度か実行してたらうまくいったので,たぶん上記の方法で大丈夫だと思うんですが,やはりpythonの勉強不足感が否めません・・・.
ipython notebook を html に吐き出してブログ記事に張り付ける
ipython 便利ですよね.
notebook を使うとさらに便利ですよね.
それをブログ記事に張り付けられたら,楽ちんですよね!
というわけで,調べてみました.
ipython nbconvert --to html GmmMethods.ipynb --template basic
たったこれだけ!
あとは,できたhtmlファイルの内容をコピーして,ブログの記事を書くところに張り付けてあげれば,下記のような感じで表示されます.
ただ,画像とかはやっぱり表示されないんで,そのあたりは何か手を考えないとです.
もっと言えば,コピペすらめんどくさいです.
もっといい方法ないんでしょうか???
GMM 学習・尤度計算・シリアライズ etc.
共通インポート
バイナリファイル読み込み
バイナリファイルを読み込んでNumpy.arrayに格納する関数です.
col次元のデータをrowフレーム分読み込みます.
arrayには,array[row][col] とう形で保存されます.
def ReadData(filename, dim = 24, dtype = "<d8"):
f = open(filename, 'rb')
data = fromfile(f, dtype)
row = data.size / dim
data.resize(row, dim)
return data
GMMをJsonに吐き出す
def Gmm2Json(gmm, jsonFile):
import json, codecs
import datetime
import locale
d = datetime.datetime.today()
print 'd == %s : %s\n' % (d, type(d))
f = codecs.open(jsonFile, "w", "utf-8")
json.dump(
{
"n_components": gmm.n_components,
"covariance_type": gmm.covariance_type,
"params": {
"weight": gmm.weights_.tolist(),
"mean": gmm.means_.tolist(),
"covariance": model.covars_.tolist(),
}
}
, f, indent = 2, sort_keys = False
)
Test
if __name__ == "__main__":
data = ReadData("../wav/p003.mcep", dim = 24, dtype = "<d8")
print data.shape
model = GMM(n_components = 16,
covariance_type = 'diag',
random_state = None,
thresh = 1e-2,
min_covar = 1e-3,
n_iter = 100,
n_init = 1,
params = 'wmc',
init_params = 'wmc')
model.fit(data)
Gmm2Json(model, "test.json")
#joblib.dump(model, "model.gmm", compress = 0)
imshow(diag(model.covars_[0]), cmap = 'spectral')
show()