2015年3月26日木曜日

FBX SDK環境構築

ちょっとモデル方面を知りたいと思うて、FBXに手を出してみる。

FBXというのはMayaとか作ってるAutodesc社の汎用フォーマットだそうです。
3Dモデルの頂点やポリゴンのみならず、アニメーションやカメラ、ライトの情報も格納できるそうです。
触っておきながら詳しく知りません。

今回は環境構築。VisualStudioは2013。

SDKをインストールする

公式サイトからSDKをダウンロード。インストーラーを起動してインストール。
今回使用したバージョンは2015.1。
インストールされたディレクトリにドキュメントも展開されるのでそれを見ながらこねこねする。

環境を設定する

VisualStudioで適当なプロジェクトを作成。コンソールでも問題ない。
プロパティをいじる。

  • [構成プロパティ][C/C++][追加のインクルードディレクトリ]を設定。
    • <yourFBXSDKpath>\include
  • [構成プロパティ][リンカー][全般][追加のライブラリディレクトリ]を設定
    • <yourFBXSDKpath>\lib\<x64/x82>\<Debug/Release>
    • ビット数とビルド設定に合わせてパスは変更
  • [構成プロパティ][リンカー][入力][追加の依存ファイル]にファイルを追加
    • 追加するlibファイルは実行環境に合わせる

サンプルを実行する

samplesディレクトリの中の一番上にあったAnimationというサンプルを実行する。

  • AnimationディレクトリとCommonディレクトリをコピー
  • プロジェクトに追加する
  • 実行

一応これで問題なく動いた。
他のサンプルは試していないので、のちのち問題が出てくるかもしれないが、ひとまずよし。

2015年3月14日土曜日

Unity アスペクト比を固定する

Unityのウリのひとつと言えば、マルチプラットフォームであること。
そして、マルチプラットフォームということは、機種ごとに解像度が異なるということ!

なので、普通に作っていると機種によって画面が切れたり、逆に変な部分が表示されたりする。

参考サイト
Unityでコインゲー開発:アスペクト比 

アスペクト比を固定しよう!

Unityに限った話ではなく、ゲームはワールド空間上に配置したカメラからの映像をウィンドウに表示しています。その縦と横の比率がアスペクト比です。Unityでは、画面の解像度によってこいつを勝手に算出してくれるみたいです。

そんな処理はどうでもいいから、縦か横で画面内にきちっと収まりなさい! というある意味身もふたもないことを行う。

イメージとしては、windowsのデスクトップの壁紙を設定するときに、縦幅に合わせるか横幅に合わせるかを勝手にやってくれるようにする感じ。壁紙がゲーム画面。

ソースコードは参考サイトのをほぼそのまま使用させていただきました。

なぜか猛烈に眠いから書くのが面倒になったとかじゃない。じゃないんだってば。

2015年3月11日水曜日

Unity SQLiteを使う

かなり久しぶりの更新。
最近Unityを触るようになったのでUnityのネタ。

データ管理のためにSQLiteを使ってみる。
SQLiteUnityKitというものを使います。

無料で使えるプラグイン。Unityはこういうのが揃っているのがとても嬉しい。
なお、これを使わなくてもDLLとか引っ張ってくれば普通に使えるみたい。
詳しく調べてないけどアセットもあり。

そこらへんはお好みや実際に動かして動作時間を検証してとかになるかと。
今回はそこまでやらない。

参考サイト
UnityでSQLite

SQLiteUnityKitを使える環境を作る

https://github.com/Busta117/SQLiteUnityKit/

上記リンクからzipをダウンロード。
READMEにいろいろ書いているけど、英語は雰囲気でなんとかしてきた残念プログラマなので、
今回も雰囲気で乗り切ろうと思います。解凍したファイルを配置。

Assets/Plugins/Android にl ibsqlite3.so を配置。
ほかスクリプトファイルは各自の好きなところに配置でいいと思う。

最後に Assets の中に StreamingAssets というフォルダを作れば完了さ!

これでもう動くみたい。
StreamingAssets の中に sqlite で作ったデータを入れてやろう。

2014年3月6日木曜日

CentOS scpコマンド

リモートなホスト間でファイルをコピーする。

/*---------------------------------------------------------------------------*/
scp /hoge/data user@host:/hogehoge/
/*---------------------------------------------------------------------------*/

/hogeディレクトリにあるdataをhostのユーザーuserの/hogehogeディレクトリにコピー。

2014年3月5日水曜日

CentOS ApacheでIPアドレスによるアクセス制限

httpd.conf もしくは .htaccess を編集することでwebサーバーにアクセス制限を掛けられる。
自分が使用しているグローバルIPアドレスを知りたい場合は下記ツールを使用しよう。

参考サイト
IP認証によるアクセス制限のテクニック (2/2)

使用ツール

orderでallow(許可)とdeny(拒否)の評価順を決定する


/*---------------------------------------------------------------------------*/
order allow,deny
order deny,allow
/*---------------------------------------------------------------------------*/

allowが先にあれば、denyがあとに評価されるので、denyが優先。逆も然り。

allowとdenyで許可・拒否するIPアドレスを決定する


/*---------------------------------------------------------------------------*/
allow from ip-address
deny from ip-address
/*---------------------------------------------------------------------------*/

それぞれ指定したIPアドレスを許可・拒否する。
全IPアドレスを指定したい場合は all を入力する。

特定のIPアドレスのみを許可する


あるIPアドレスのみを許可して他は全て拒否する場合の例。

/*---------------------------------------------------------------------------*/
order allow,deny
deny from all
allow from ip-address
/*---------------------------------------------------------------------------*/

一度全てのIPアドレスを拒否してから、allow で特定のアドレスのみ許可する。
特定アドレスのみ拒否したい場合は allow と deny が逆になる。

CentOS findの検索結果でコマンドを実行する

xargsというコマンドがあり、これは左辺の結果を使用して右辺のコマンドを実行できる。

参考サイト
逆引きUNIXコマンド/findで検索したファイルを削除したい

/*---------------------------------------------------------------------------*/
find ./ -name '*.log' | xargs rm
/*---------------------------------------------------------------------------*/

上の例だと拡張子がlogのファイルを検索してrmで削除している。
これを利用して何日前のファイルを削除とかができる。

/*---------------------------------------------------------------------------*/
find -mtime +7 | xargs rm
/*---------------------------------------------------------------------------*/

一週間前のファイルを削除。
mtimeオプションは最後に更新された日付に基づいて検索する。+で以前。-で以内。

このままだとfindの結果がない場合にもrmが実行されてエラーが出るので、
結果がない場合はxargsを実行しないようにする。

/*---------------------------------------------------------------------------*/
find -mtime +7 | xargs --no-run-if-empty rm
/*---------------------------------------------------------------------------*/

findは色々検索オプションが指定できて便利そうなので、有効に使っていきたい。

2014年2月27日木曜日

CentOS Apache+SSLでhttpと通信を行う

Webサーバー間の通信を暗号化することができる。
リンクがhttpsになっているやつがそうなんだそうな。
これでユーザー名やパスワードの情報送信をWebサーバー間で行っても安心!

参考サイト

OpenSSLがインストールされているか確認する


今ではほとんどデフォルトでインストールされているらしいけど、念のため。
下記コマンドを実行する

/*---------------------------------------------------------------------------*/
openssl version
/*---------------------------------------------------------------------------*/

OpenSSLのバージョンが表示されればインストール済み。
表示されないようならyumなりなんなり使ってインストールしよう。

mod_sslをインストールする


ssl機能をサーバーに実装してくれるモジュールをインストールする。

/*---------------------------------------------------------------------------*/
yum install --enablerepo=remi mod_ssl
/*---------------------------------------------------------------------------*/

Webサーバーの秘密鍵を生成する


キーを作成するディレクトリに移動して生成コマンドを実行する。
入力を求められるパスフレーズは任意でオーケー。
今後のSSL鍵関連にはこのパスを使うので忘れないように。

/*---------------------------------------------------------------------------*/
openssl genrsa -des3 1024 > server.key
/*---------------------------------------------------------------------------*/

ディレクトリはどこでも問題なさそう。
参考サイトにならってhttpdのconfディレクトリを今回は使用する。

Webサーバーの公開鍵を生成する


続けて公開鍵。コマンドを叩け!

/*---------------------------------------------------------------------------*/
openssl req -new -key server.key > server.csr
/*---------------------------------------------------------------------------*/

各種公開鍵の情報を入力。各要素がなにを指しているかを参考サイトから引用して張っとく。

/*---------------------------------------------------------------------------*/

   正しい秘密鍵のパスフレーズを入力すると、公開鍵情報の入力が求められます。参考例として筆者が入力した値をリスト1に紹介します。それぞれ、Country Nameは国名、State or Province Nameは都道府県名、Locality Name、区町村名となります。

   また、Organization Nameは組織名、Organizational Unit Nameは部門名です。Common NameはSSLを使うサイトの名前(今回は皆さんのサーバIPアドレス)、Email Addressはメールアドレスとなります。

   A challenge passwordは証明書を破棄する場合に必要になるパスワード、An optional company nameは別の組織名がある場合、その組織名の入力となります。なお「A challenge password」と「An optional company name」は空欄でもかまいません。

/*---------------------------------------------------------------------------*/

デジタル証明書を作成する


本来このデジタル証明書は有料で発行してもらうものなのだが、今回は自分で作成してしまう。

/*---------------------------------------------------------------------------*/
openssl x509 -in server.csr -days 365 -req -signkey server.key > server.crt
/*---------------------------------------------------------------------------*/

こちらでも、秘密鍵作成時のパスフレーズが求められる。

SSLの設定を行う


ssl_modをインストールしたときに/etc/httpd/conf.d/ssl.confが作成されているので
そいつを編集する。

/*---------------------------------------------------------------------------*/
<VirtualHost hogeserver:443>
DocumentRoot "/var/www/html"
ServerName hogeserver
SSLCertificateFile /hoge/httpd/conf/server.crt
SSLCertificateKeyFile /hoge/httpd/conf/server.key
/*---------------------------------------------------------------------------*/

変更箇所のみ抜粋。SSLCertificateFileとSSLCertificateKeyFileは作成した鍵のファイルパス。
ServerNameは公開鍵作成時に指定したホスト名を指定。でないと警告が出る。

設定を完了したらapacheを再起動する。

/*---------------------------------------------------------------------------*/
/etc/rc.d/init.d/httpd restart
/*---------------------------------------------------------------------------*/

ポートが開放されているかを確認する


参考サイト


ツールが置いてあるページに飛んでポートが開放されているかを確認する。
ページに飛んだらホスト名とポート番号を入力してボタンを押す。

自分はポートが開放されているのに気づかないで結構な時間を無駄にしてしまった。
ポートが開放されていなければ開放してあげよう。
/etc/sysconfig/iptablesに使用するポート番号(今回は443)を追加。

/*---------------------------------------------------------------------------*/
-A INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT
/*---------------------------------------------------------------------------*/

ほんでもって再起動。

/*---------------------------------------------------------------------------*/
/etc/init.d/iptables restart
/*---------------------------------------------------------------------------*/

もっかいツールを使って開放されているか確認。開放されていれば次へ。

SSLで接続する


次へと言うかこれで最後。httpsを使ってWebページに接続する。接続に問題なければ成功。

おまけ:apache再起動時の鍵認証をなくす


SSL、というか秘密鍵を導入するとapacheを再起動するたびにパス認証が必要になる。
面倒なのでこれをなくす。

/*---------------------------------------------------------------------------*/
openssl rsa -in server.key -out server.key
/*---------------------------------------------------------------------------*/

サーバー用秘密鍵からパスワードを削除してしまう。これでパスの入力がいらなくなる。