進め、自分。

ゲームプログラマがC++のことなどを。

vs2017でプロジェクト作成

今日はようやく自作C++ Libraryのプロジェクトをvs2017で作成した。
.gitignoreで不要ファイルを除外しつつ、
ソースコード(と言ってもまだ仮のhppのみだけど)をgithubにもプッシュ。
色々整備したいけど…とにかくまずは基本のコードを書いてビルド通すところを
進めていこうかなと思う。

compattelrunner

前から自宅PCの動作が重いことが多く、
まあそんなスペック高く無いからなーと思ってたのだが、
どうもディスクアクセスが常に100%近くの負荷になっていて、
最近幾つか対処した。

まずはデフラグ
HDDの最適化が定期的に実行されるようにスケジュールされていて、
普段は毎日PC起動するわけではなかったので、
どうも起動するたびに最適化が走っていたようだ。
というわけでスケジュールを無効化。

続いて、どうも compattelrunner とやらが常にHDDにアクセスしているようだ。
google先生に聞くとあっさり情報が出てきたので、
こちらはタスクスケジューラから無効化。

ひとまずこれで、それなりにサクサク動くようになった。めでたしめでたし。

ID Managerの世代バックアップ保存失敗

以前から、ID Managerの設定を保存するたびに
世代バックアップの保存に失敗したっていうメッセージが出てて、
まあ世代バックアップだったらいいかなって流してたけど、
全然良くない事に今更気づきました…

これで作られるファイルをID Managerのバックアップとしてコピーしてたから、
全く更新されていない設定ファイルを保存し続けてました。
ファイルスタンプがなんと2013年…

解決方法としては、ツールの 設定>データ保存先 で、
指定した場所を使用するにして、ProgramFilesの外のディレクトリを設定。

今回、Dropboxディレクトリを設定したので、
これまで定期的に手動バックアップしてたよりも楽で安全になりました。

…が、そもそも今の時代にパスワード管理がID Managerでいいものか?
最近iPhoneでは1Password使ってるけど、そろそろパスワード管理整理しないとなー。

角度クラス 構想

環境整備もなかなか進まないので、
取り敢えず家にいなくてもできる事ってことで、
このブログで書きたかった事を進めることにしようかと。

まず1つ目にやりたかった、角度クラスについて。

ゲーム開発でも、浮動小数でradianやdegreeを扱って、
必要に応じて deg2rad や rad2deg とかって関数で変換するのが多いです。
で、よく問題になるのが、関数はradianを要求しているのに、間違ってdegreeを渡してしまうとか、
そもそも関数がどっちを要求してんだよ!ってことですね。

radianとdegreeの扱いについて、↓の様な記事もあります。
魔導書に触発されてRadian⇔Degree変換をやってみた - C++でゲームプログラミング
角度のstrong typedef - Faith and Brave - C++で遊ぼう

で、自分がやりたいのは、radianかdegreeかをあまり気にしなくて済むことです。
この関数はどっちを要求してるの?とか、この変数はどっち?とか。
なので、radianとdegreeは暗黙的に変換してほしい。

例えば、

// Radianクラスを引数にとるサイン関数
float sin( Radian rad ) {...}

// Degreeクラスを渡すと、暗黙的にRadianに変換してくれる。
Degree deg( 180 );
float s = sin( deg );

という感じで。

あと、クラス化して幾つかメソッドも追加したいですね。
0度~360度に正規化するメソッドや、
2つの角度間で最小の角度差を求めるとか。
そもそも三角関数も、角度クラスのメソッドにあってもいいかもしれないですね。

ここまでが、結構前から考えてた角度クラスの実装です。

で、ちょっと前に思いついたのが、
そもそも角度をradianとdegreeで扱うのってどうなの?ということ。
1周を360度とか円周率x2で扱わなくていいんじゃないかと。
もちろん、それが必要な時もあるけど、途中の計算で必要になることってあまりない。

プログラム中で 180 とか 360 って書くのは、
普通なら「マジックナンバー使うな!」と起こられるようなことだし、
円周率みたいな無理数を扱うのって冷静に考えたらあんまり良くない。

で、どうするかって言うと、1周を 1.0 として扱ってしまう。
これ、すごく自然だと思うんですよね。
180度は0.5、90度は0.25。
30度とかは流石に直値では書けないので、30 / 360.f って書くのがわかりやすいだろうけど。
まあ、これはradianで計算している時も一緒ですね。

一周が1.0だから正規化するのも楽だし、
例えば「30フレームかけて2回転させる」とかって、
「2.0 / 30.f * time」
みたいな計算だけでOK。
degreeだと「360 * 2.0 / 30.f * time」って計算になっちゃいますね。

使い方は↓みたいな感じで。

// Angleクラスを引数にとるサイン関数
float sin( Angle angle ) {...}

Angle angle( 0.5f ); // 180度
float s = sin( angle );

sin( Degree(180) ); // degreeの方がわかりやすい時はこんな感じで

以上がざっくりとした構想です。

さ、これからこの実装を進めて行きますよ。進め、自分。

CEDEC2014

ブログ、早速更新できてないですが…

今日はCEDEC2014へ行ってきました。

CEDECに参加するのも5回目。

今年は社内ライブラリとかゲームエンジンとか、

その辺のセッションを中心に聞いてきた。

作るか、使うか、っていう大きな選択が必要だけど、

やっぱりうちの会社の性質とかいろいろ考えると

社内でゲームエンジン作っていった方がいいんじゃないか

という思いが強くなった。

それも早急に。

また一段と情熱をもって取り組んでいきたい。

 

話変わるけど、

錦織選手快挙!

だいぶお疲れの様子だけど、次の試合も頑張ってほしいですね。

昔のプログラムをビルドするも・・・

宣言通り、今日はbashのプロンプト設定をカスタマイズ。

といっても、過去に作ってたやつで上書きしただけ。

cygwinでログインしたときに実行される .bashrc で PS1 に設定を代入する。

詳細はまた余裕があれば。

 

で、その後は過去に作ってたプログラムのビルドを試みた。

が、makefileがうまく動かなかった。

依存関係がうまく行っていない様子。

うーん、まずmakefileをイチから作り直しかなぁ。

環境構築 cygwin

今日はcygwinのインストール。

昨年末にwindows8マシンを新調してからインストールしてなかったので久しぶり。

64bit版のインストーラーが出てたのか。

いつもの日本のサーバーを選んで、

makeとかclangとかgccとかを選択。

clangとかコンパイラはそのうち本家の方から

ダウンロードすることになるかもしれないけど、

当面はcygwinに入っている最新で。

久しぶり過ぎて入れ忘れがあるかもしれないけど。

 

と、書いてるうちにインストール終了。

cygwin.batでbash起動を確認。

よし、明日はbashのプロンプト設定を以前と同じカスタマイズにしよう。

 

とりあえず今日はこれだけ。

毎日、10分でもいいから進めていくことを大切に。

ではおやすみなさい…