半透明オブジェクトをレンダリングのための魔法のシェーダ しかし断念 

通常、半透明のポリゴンが重なったオブジェクトをレンダリングする際には、ソートが必要になる。
しかしポリゴンソートは重いし、オブジェクトをばらしてのオブジェクトソートではやはり破綻する場合がある。

完全に解決する方法はないと思っていたんだけれど、髪の毛をうまく(かつ楽に)表現する方法がないかとぽけ~っとググってたら、"Weighted Blended Order-Independent Transparency"という手法を見つけた。

どうやら、シェーダでアルファ値と深度をあーだこうだやるとできるらしい。
http://jcgt.org/published/0002/02/09/paper-lowres.pdf

ふむふむ、なるほど。
ドキュメントを読んでも、さっぱり分かりません!

 

 

Visual StudioでUnityのデバッグが可能に 

UnityVS改めVisual Studio Tools for Unityが無償で公開されています

これはすごい。

 

 

拡張メソッドでTransform型の設定を楽にする 

プロジェクトの合間とか時間があるときに、独自ゲームを作っていいよってことになって
実験的なものを何本か作っているけれど、ついにUnityで1本作ってみることになった。
仕事でUnityを研究できる!

Unityは、ちょっと癖のある変数名だったりすることも多く、結構混乱することがある。
なかでも、いつもイラっとくるのが、Transformの設定だ。

位置を設定するのはtransform.positionで、回転はtransform.eulerAngles、拡大はtransform.localScaleとなる。
transform.position、transform.rotation、transform.scalingにしといてくれれば分かりやすいのに。
transform.rotationはあるけどQuaternionだったりする。
transform.Translate()、transform.Rotate()は相対的に増減するという。
似たようなものがいっぱいあって、意味がわからん。というか忘れる。
しかも、transform.position.x = 100 とかもできない。

いざ使おうとすると、何がなんだったっけと混乱するわけで。


そこで便利なのが、拡張メソッドの定義だ。
Set_Position()、Set_Rotation()、Set_Scaling()と、分かりやすい関数を別途に定義した。
C#は、こういうのが便利でいいなぁ。

テラシュールウェア [Unity]Unity標準クラスにメソッドを追加する方法
【Unity】Transform型の位置や回転角、サイズの設定を楽にする - コガネブログ

もちろん、Transform以外でも拡張できるので、イラっとくるものは再定義してしまおう。

ただ、やりすぎると、Unityの変数・関数で慣れている人が、自分のソースを見ると逆に訳がわからなくなりそうだから、ほどほどに。

 

 

iOS8 SDK雑感 

iOS8 SDKは実際にはまださわっていないけれど、ネットでちょくちょく情報は出回っているようだ。

個人的に一番期待していたのは、siriのAPI公開だけれども、どうも公開されないような?
残念。

HealthKitやHomeKitのAPIから、ヘルスケアや家電機器にsiriの音声認識から操作できるらしいのだけれど、直接siriを起動して単語や文章の認識結果は取れないみたいだ。今までも、テキストインプットを起動して、ユーザーが操作をすれば結果は取れていたので、同じことか。

現状でもiOSで音声認識を使ったアプリを作ることはできるけど、非公開API(UIDictationController)なので、アプリ公開時にリジェクトされる。
Androidで音声認識を行うのは非常に簡単なんだけど、iOSに対応するとなると、結局メンドウなことにる。
APIあるんだから使わせてくれよと思うけれど、音声データが一斉に送信されてしまうと、それをさばけるサーバーがないんだろうか。
UIDictationControllerが公開されないかなぁ。


新しい開発言語のSwiftは、Appleまた独自仕様かよ!と一瞬思ったけれど
ぱっと見、JavaScriptに近くて、知識がなくても書けそうだ。

Objective-Cが、文法を思い出すのに四苦八苦する言語だったので、前よりはだいぶマシという意味で、これはこれでアリなのかもしれない。

まぁ、正直なところ、マルチプラットフォームを前提として開発する場合、ネイティブな言語はほとんど使わないので、固有機能以外は、結局C++で開発してしまうんだけど。

 

 

さくらサーバーアップデート後のトラブル 

先月のさくらインターネットのサーバーアップデート後、長州の風サイトが正常に表示されなくなってしまった期間がある。
原因は、アップデートによって.htaccessで使えない命令ができたためだろう(たぶん)
現在は修正済み。

長州の風サイトのCSSやJavaScriptには、軽量化のためgzip圧縮がかかっている。
そのために、.htaccessに記述していた。
gzip圧縮したCSSが正常に動作しなくて、表示が崩れていたもよう。

gzip圧縮については、googleで「HTML 圧縮 gzip .htaccess」とかで検索すれば、いろいろなサイトで方法は紹介されている。
そのうちの<IfModule mod_rewrite.c>を使ったものがダメになった。
他のサイトからコピってきたら大丈夫だった。

今の時代のネット回線速度で、ファイルサイズを小さくするのにどれほどの意味があるのかは謎だけど。

原因を突き止めるのにも苦労したけど、サーバーのアップデートで、突然ページの表示が崩れるとかやめてほしい。


ちなみに、今回のアップデートでサーバーの容量が100GBになった。
個人的に、いろいろなデータを置いてたりするけれど、まだ3%しか使用していない。

 

 

文字コードの悪夢 再び 

Windowsアプリの開発はVisual Studio。
AndroidアプリはWindowsでEclipse。
iPhoneの開発はMacでXCode。

たまにさわるとツールの使い方を忘れている。
のは、別にいいんだけど。
昔作った、iPhone用のCPPファイルをVisual Studioにもってきたところ、意味のわからないエラー状況で焦る。

結論から言うと、CPPファイルはUTF-8だったが、BOMが付いていなかった。
開けて文字化けもしていないのに、コンパイルすると妙なことが起こるらしい。

テキストファイルで文字コードだとか改行コードだとかBOMの有り無しとか。
アプリによって読めたり読めなかったりするのはやめてほしい。

どれでも、問題なく開くためには
  文字コードをUTF-8
  BOMを付ける
  改行コードをCR+LF
で、大丈夫なはず。

Visual Studioから変更する場合は、
ファイル > 保存オプションの詳細設定
エンコード:Unicode(UTF-8シグネチャ付き)
行の終わり:Windows(CR LF)

 

 

タブレットをサブモニターとして 

さっそくMeMO Pad HD7をサブモニターとして活用。
takayama_140114_1.jpg
WEBを表示するだけですが。
How toサイトとかを見ながら作業するには、やっぱりこの程度で十分かな。
カバーがパタパタと折り込んで、そのままスタンドになるので便利だった。

スペック的にはNexus7(2012)と同等らしいけれど、Nexus7(2013)や自分の使っているスマホと比べると、かなり遅い。
ただまぁ、何か作るときには、こいつでちゃんと動作するくらいの負荷にとどめないと。
MeMO Pad HD7をターゲットマシンとしよう。

 

 

タブレットMeMO Pad HD7入手 

知り合いから、7インチタブレット『ASUS MeMO Pad HD7』を安く?買うことができた。
ブームに乗って買ったはいいけど、使い道がなかったらしい(泣

takayama_140105_1.jpg
自分が欲しいと思っていた理由は二つ。
・PCのサブモニターとして
・Androidアプリ開発のデバッグ機として


数年前から、PCのサブモニターが欲しいと思っていた。
WEBで情報を見ながら操作したいのに、一々ウインドウを切り替えるのが面倒なのがその理由。

最近、タブレットがでまわってきたので、もしかしてタブレットがサブモニターとして使えるんじゃないかと狙っていた。
ただ、せっかくのタブレットをサブモニターとしてのみ使うのはもったいないので、他の使い方を1年くらいずっと考えていたけれど、結局は思いつかなかった。。。
スマホが5インチになって処理も高速なので、スマホとPCがあれば、タブレットの出番はないんだよね。


自分のスマホは防水なので、USB接続部分にキャップが付いている。
キャップの開け閉めを繰り返すと、へたってくるので、なるべく開けたくないところ。
実のところ、購入してから1回もキャップを開けていない。
Wi-Fi経由で、データのやり取りはできるので、基本的には問題ないんだけれど。

ただ、アプリ開発時に、USB接続をしないとデバッグできないのでどうしようかと思っていたので、ちょうどよかった。
会社にあるのがNexus7なので、MeMO Padというのも動作テストにちょうどいい。


しかし、ハッキリ言って、タブレット本来の使い道は、まったく思いつかない。
みんな、何に使ってるんだろう。
あ、使い道がなかったから、今、自分の手元にあるのか。。。

 

 

文字コードの悪夢 

UTF-8のXMLファイルのデータを、UTF-16の文字として扱いたい場合
Windowsで文字コードを変換するのは、それほど大変ではないが
AndroidやiOSでは、MultiByteToWideCharやmbstowcsが使えないので
Windowsのプログラムを移植するのに苦労した。
特に、mbstowcs_sは、エラーも出ないし関数もあるのに何故か変換ができない。
setlocaleの問題かとも思ったけれども、解決できなかった。

マルチプラットフォーム開発で、Windowsで動いていたのに、
AndroidやiOSで動かなかったときの絶望感ときたら。。。
C++でも使えない関数があったり、微妙に動作が違ったりするので困る。

結局あきらめて、変換プログラムを探してきた。
以下のサイトの、"Windows APIを使用しない"を参考にした。
文字コード変換 やんちのプログラミングメモ

ほんと、文字コードは統一してほしい。。。


ちなみに、XMLパーサーのTinyXML-2を使って見たら、かなり便利だった。
TinyXML-2を使う - Chocolate Coding

まぁ、こいつがUTF-16の読み込みに対応してなかったので
今回ハマったって話でもあるんだけど。

 

 

Twitter API1.1への対応 

去年、TwitterのAPIが1.1になり、1.0で作っていたプログラムは動かなくなるはずでした。 ただ、ちょろっとアドレスを変更してやれば、そのまま動作していたので、まぁいいやと思って放っておいた。

ところが、何ヶ月前からか1.0が完全に使えなくなってしまって、ブログに1行表示していたコメントが、表示されない状態にTT

最近、結構ヒマになってきたので、API1.1に対応しました。
と、いっても情報はいたるところにあるので
PHPのライブラリを落としてきて、組み込んだだけ。

PHPでOAuth認証して自分のつぶやきを表示する [Twitter API 1.1 対応版]

一時期、ゲームアプリとかでもTwitterで得点つぶやかせたりするのが流行ったり?もしたけど、最近どうなんだろうなぁ。