でらうま倶楽部

バカってゆうか、ゲームを作る事しか能の無いプログラマの、面白おかしな日々を綴ってみる実験。

文字のラスタライズはfontstashがいいかもしんない

photo

コード書いとる?

macOSとiOSとWindowsで動作するアプリを作るのに重宝してるCinder0.9.0です。

ですが日本語表示が弱くて・・・というか、実行環境ごとにフォントのレンダリング処理を書く実装なので、描画結果が違っちゃうんだよね・・・悩ましい!

ちょっと前まではFreeTypeを使っていたのですがいかんせんライブラリの規模がでかい。と思ってGitHubをウロウロしてたら見つけちゃったよ fontstash

というわけでサンプルを GitHub に上げたので興味のある人は読んでみてください。 ラスタライズとレンダリング処理を分離する良い勉強になりました。

fontstash はC言語で書かれているので久々に見た malloc とか memset とかにドキッとしました。これって・・・恋?!

ではまた次回!

emacsのdiredモードと少し仲良くなる

photo

コード書いとる??

emacsのdiredモードについて少し時間を割いて調べてみたら、さりげなく便利な機能を見つけたのでそのメモ。
  • m     ファイルをマークする(dired-mark リージョン対応)
  • u     ファイルのマークを解除する(dired-unmark リージョン対応)
  • t     マーク状態を反転する(dired-toggle-marks)
  • M-DEL マークを全て解除(dired-unmark-all-files)
  • B     ファイルをバイトコンパイルする(dired-do-byte-compile マーク対応)
  • ^     ひとつ上の階層へ移動
ここ数年、ほとんど動作を確認しないで使っていたので恥ずかしい限り。過去に自作したelispマクロは幾つかお役御免となりました。

dired モードの時に C-h m で詳細なヘルプが出てくるので、それを読めばいいのですが・・・いいのですが・・・!!

すいません言い訳でした!


ではまた次回!

プログラマ向けフォント Ricty 4.1.0 を使う

コード書いとる??

macOSで Ricty 4.1.0 がうまく生成できなかった話の続きです。

こちらの記事を見ながらWindowsで生成しました。

ありがとうございます。バッチリです!!

ではまた次回!

プログラミング用フォント Ricty を更新し・・・失敗

コード書いとる?

ふとサイトに立ち寄ってみたら、プログラミングには欠かせない等幅フォント Ricty が更新されていました。

おー。 Inconsolata 2.0 に対応したのね! というか、Inconsolataの更新に伴った更新とな。

フォントの生成に必要な FontForge は Homebrew 経由でインストール済みなので、いそいそとスクリプトをダウンロードして変換。

で、プレビューしてみてびっくりした!

image


これはアカン・・・慌ててサイト下部の「既知の問題」を読んでみると

macOS で一部の FontForge ビルドを用いるとボールド体の i、j などが不自然に大きくなることがあります。FontForge Open Source Font Editor から最新ビルドをダウンロードし、FontForge.app/Contents/Resources/opt/local/bin/fontforge を用いると解決します。

FontForge公式で配布されている実行ファイルは XQuartz を要求するバージョンなのでそのままでは動きませぬ(T^T)

しばらく様子を見守りましょう。

どんまい!

また次回。

FBX SDK に触れて色々わかってきた事

FBX-Icon

コード書いとる?

まだまだFBXと格闘中です。楽しい!
FBX SDKと格闘すること2週間。いくつかコツのようなものが溜まってきたのでメモがてら書いときます。


文字コード問題
FBX SDKでの文字列の文字コードはUTF-8。公式リファレンス内 "Supported String Formats" にて書かれてます。
これで困るのがWindows。ファイルパスの文字コードがCP932なのでうっかりするとファイルが読み込めない事態に遭遇します。
そこでFBX SDKには文字コード変換用のAPIが用意されているので、それを利用。ありがたい!

// 相対パス(CP932) → 絶対パス(UTF-8)
std::string getUTF8Path(const std::string& path)
{
	// 相対パス → 絶対パス
	char fullPath[_MAX_PATH];
	_fullpath(fullPath, path.c_str(), _MAX_PATH);

	// cp932 → UTF8
	char* path_utf8;
	FbxAnsiToUTF8(fullPath, path_utf8);

	// char* → std::string
	std::string coverted_path(path_utf8);
	// FBX SDK内部で確保されたメモリは専用の関数で解放
	FbxFree(path_utf8);

	return coverted_path;
}


テクスチャのパス
FBX SDKに用意されている FbxPathUtils の関数を使えば、OSごとの差異を吸収してくれて楽だったよ。

FbxFileTexture* texture;   // 初期化済みである事

// フルパスからファイル名を取り出す
//   FbxFileTexture::GetFileName はFBX内に記録されているパス(大抵フルパス)を返却する
FbxString path = FbxPathUtils::GetFileName(texture->GetFileName());


事前処理
シーン内のポリゴンを3角形に分割したり、ノードに含まれるメッシュをマテリアルごとに分割したり、結構事前処理が用意されていてありがたい!
フリー素材から拝借してきたモデルデータに対して「これ3角ポリゴン分割お願い!」ってできないからね〜

FbxScene* scene;     // 初期化済みである事

FbxGeometryConverter geometryConverter(manager);
// TIPS:あらかじめポリゴンを全て三角形化しておく
geometryConverter.Triangulate(scene, true);
geometryConverter.RemoveBadPolygonsFromMeshes(scene);

// TIPS:マテリアルごとにメッシュを分離
geometryConverter.SplitMeshesPerMaterial(scene, true);


メッシュ名
ユニティちゃんのFBXデータで遭遇したのですが、FbxMeshに名前がついていない場合があります。
そん時は親のFbxNodeの名前を拝借するといいかもです(描画時のデータ構造を変更した方が良さそうだ)

FbxScene* scene;     // 初期化済みである事

auto* mesh = scene->GetSrcObject<FbxMesh>(0);
std::string name = mesh->GetName();
if (!name.size())
{
  // FIXME:FbxMeshに名前がついていない場合は親のノードの名前を拝借
  //       1つのノードが複数のメッシュを含む場合に適していない
  name = mesh->GetNode()->GetName();
}


時間管理
アニメーションの時間管理はdouble型で単位は「秒」で扱うと手間が色々省けていいかもです。

FbxTime time;
time.SetSecondDouble(animation_time);

FbxNode* node;     // 初期化済みである事
node->EvaluateGlobalTransform(time);

// 時間を取り出す
double t = time.GetSecondDouble();

こんなところかな。

ではまた次回!!

FBX SDK でモデル描画(ポリゴン編)

FBX-Icon

コード書いとる?

先日から FBX SDK と格闘中。そのメモ書きです(⇒導入編)

このブログを書いとる段階でFBX SDKのバージョンは2017.1。SDK同梱のサンプルコードをモニタに穴が開くかっちゅーくらい、にらめっこしながらテストコードを書きました。

探して見たらオフラインのドキュメントも発見。これでネットに繋がらなくても思う存分格闘できるぜ!

GitHubで公開したので興味のある人は目を通して見でちょ。
 まだまだわからないことが多いですが、まぁ実務で使えるくらいには理解が進んだ感じです。

今回わかったことは、FBX以外の形式も扱えること!
  • Autodesk AutoCAD DXF (.dxf)
  • Collada DAE (.dae)
  • Alias OBJ ( .obj)
すごくね?

FbxSceneからメッシュとかマテリアルを取り出す場合は、FbxNodeを辿らなくても以下のように取り出せる。
 
FbxScene* scene;    // ←適切なデータが格納されている状態である事

// シーンに含まれるメッシュ数
int meshCount = scene->GetSrcObjectCount<FbxMesh>();

for (int i = 0; i < meshCount; ++i)
{
  FbxMesh* mesh = scene->GetSrcObject<FbxMesh>(i);
  // なにがしかの処理 
}

// シーンに含まれるマテリアル数
int materialCount = scene->GetMaterialCount();

for (int i = 0; i < materialCount; ++i)
{
  FbxSurfaceMaterial* material = scene->GetMaterial(i);  
  // なにがしかの処理 
}

楽!!!

FbxMeshから頂点座標以外のデータを取り出す方法もだいぶん簡略化できる!

FbxMesh* mesh;      // ←適切なデータが格納されている状態である事

FbxArray<FbxVector4> normals;
// normalsに、頂点ごとの法線を格納してくれる
mesh->GetPolygonVertexNormals(normals);

// 頂点に格納されている全UVセットを名前で取得
FbxStringList uvsetName;
mesh->GetUVSetNames(uvsetName);

FbxArray<FbxVector2> uvsets;
// uvsetsに、頂点ごとのUVを格納してくれる
mesh->GetPolygonVertexUVs(uvsetName.GetStringAt(0), uvsets);

めっちゃ簡単やん!

マテリアルから値を取得する場合は以下のように書くといいらしい・・・。

FbxSurfaceMaterial* material;    // ←適切なデータが格納されている状態である事

// 引数に欲しい情報を指定して検索する
FbxProperty prop = material->FindProperty(FbxSurfaceMaterial::sAmbient);
if (prop.IsValid())
{
  const auto& color = prop.Get<FbxDouble3>();
  // 何がしかの処理
}

みたいな感じでテストコードを書いたので、参考にするといいよ。

スケルタルアニメーション編に続く・・・(まだ格闘中)


ではまた次回!!!

東ゲ部で数学な勉強会を催してみて


IMG_3011

コード書いとる?

先日コワーキングスペース茅場町Co-Edoにて、勉強会を催しました。
内容は、中学〜高校あたりで習うであろう数学的な知識を抜粋して「こういう局面で使うと便利だよ!」というのを簡単なサンプルを交えてみんなに体感してもらうというものでした。

IMG_3009

勉強会の最後に各自簡単な作品を作ってもらったのですが、これが思った以上に出来が良くて「しまった、本日の進捗としてどこかにアップロードしてもらえたら・・・」というのが今回の反省点です。東ゲ部、もう少し酒と食べ物以外の進捗も増やしていきたいですからね。

IMG_3014

場所を提供していただいたCo-Edoさんは普段の設備使用料(1000円!!)だけで、気軽に勉強会を催せるのがとても魅力!勉強会の後の懇談会も一人2000円程度でいい感じにピザとか頼んでくれます!(ありがとうございました!)

また機会があれば催したいです。

ちょいちょいLive2D勉強会GLSLスクールも催されておりますので、そちらに興味のある方も是非!

年明けにはGlobal Game Jamも催されまっせ!

IMG_3015

さて私はひょんな事から(話せば長くなるので割愛)、今年の5月あたりに東ゲ部入りしたのですが、自主的な集まりなのに、こんな感じに毎月なにがしか催しがあって素敵です。自分も何かしなくちゃ!と背中を押されます。

一見さんお断りではなく一見さんいらっしゃい的な感じも良いですね。部長をはじめとする主要メンバーの配慮の賜物だと思います。ひとりで来てもこわくない!

もし 東ゲ部 に興味を持っている人は、是非もくもく会に参加してみてください。各自Co-Edoに集まってもくもくと作業を進めるだけなのですが、東ゲ部の雰囲気とか方向性とかを感じてもらえると思います。

知識の定着率は講義ではたったの5%なのが人に教えると90%に達するとの研究結果もありますので、東ゲ部で気軽な教え教えられの環境が育っていくのを楽しく見守っていこうと思います。

そろそろ茅場町近辺に引っ越したいのですが、何かいい物件は無いものでしょうか・・・(家賃6万円程度を希望)

ではまた次回!

FBX SDKに触れる

FBX-Icon

コード書いとる?

もういよいよFBXを避けて通れなくなってきたので、エイヤっと導入してみました。

FBX怖くない!

というわけで、導入記メモ。

まずは公式サイトからSDKをダウンロード。ネットで「FBX SDK」とかで検索して出てくるサイトはなぜだか古いので注意。

最新版をゲットするなら公式サイトから! ユーザー登録の必要はありません。たぶん。

FBX SDKの最新版はブログを書いてる時点で2017.1。自分の開発環境に合わせたSDKをダウンロードしましょう。特にVisualStudio版!

そしたら、開発環境にインクルードファイルとライブラリのパスを通したりします。

VisualStudio
・追加のインクルードディレクトリ
C:\Program Files\Autodesk\FBX\FBX SDK\<SDKのバージョン>\include

・追加のライブラリディレクトリ
C:\Program Files\Autodesk\FBX\FBX SDK\<SDKのバージョン>\lib\vs2015\$(PlatformTarget)\$(Configuration)

・リンカー→追加の依存ファイル
libfbxsdk.lib

・ビルド後のイベント
DLL形式を使うので、実行ファイルと同じ場所にDLLファイルをコピーする
copy "C:\Program Files\Autodesk\FBX\FBX SDK\<SDKのバージョン>\lib\vs2015\$(PlatformTarget)\$(Configuration)\libfbxsdk.dll" "$(OutDir)"
 

Xcode
・Header Search Pathsに追加
/Applications/Autodesk/FBX SDK/<SDKのバージョン>/include

・Other Linker Flagsに追加
Degubビルド
/Applications/Autodesk/FBX SDK/<SDKのバージョン>/lib/clang/debug/libfbxsdk.a
Releaseビルド
/Applications/Autodesk/FBX SDK/<SDKのバージョン>/lib/clang/release/libfbxsdk.a

以上の設定が終わったらサンプルコードを追加してビルドが通るか試してみましょう。ビルドでっきるっかなー。

#ifdef _MSC_VER
// FBX SDKをDLL形式で使うと定義
// TIPS:fbxsdk.hをインクルードする前に定義する
#define FBXSDK_SHARED
#endif

#include <fbxsdk.h>                // FBX SDKのヘッダーファイル

// TODO:以下のコードを適切な場所に追加する

// FBX SDKを生成・初期化
FbxManager* manager = FbxManager::Create();
assert(manager);

// 読み込み機能を生成
FbxImporter* importer = FbxImporter::Create(manager, "");
assert(importer);

if (!importer->Initialize("hoge.fbx"))
{
  // 読み込み失敗
}

// 読み込み用のシーンを生成
FbxScene* scene = FbxScene::Create(manager, "");
assert(scene);

// ファイルからシーンへ読み込む
importer->Import(scene);

// FbxImporterはもう使わないのでここで破棄
importer->Destroy();

// 
// シーンから必要な情報を取り出す処理を書く
//

// シーンを破棄
scene->Destroy();

// FBS SDKを破棄
manager->Destroy();

続きます。

ではまた次回!

boost::optional が便利

30
コード書いとる??

今更ながら boost::optional が便利です。

コンテナの中から一番小さい値を探す時とか簡潔に書けるぜ!

std::vector<int> value = { 1, 2, -3, 4, 5 };
boost::optional<int> min_value;
for (auto v : value)
{
  if (!min_value || min_value > v) min_value = v;
}
std::cout() <<  *min_value << std::endl;

値を取り出す時にポインタっぽく書く以外は、普通の変数と同じ感じに書けて素敵。

ほんと今更感。でもいいじゃん!

ではまた次回。 

Emacs 25.1 と macOS と 私


photo

コード書いとる??

先日ついにリリースされた Emacs 25.1 ですが、まぁ快適快適!! (そんなに変化はないのだが)

みんなはどう?!

拙者は パッチを当てて macOS でビルドして使っておりますが、まぁ拍子抜けするくらい順調です。最近はHomebrewとかでビルド済みバイナリも配布されているようですな。ありがたや。

しばらく使ってみた結果、init.elにいくつか修正箇所があったのでそのメモ。

  1. mac-auto-ascii-mode に nil 以外が格納されていると、日本語入力モードの時にショートカットキーを操作してイラっとする状況が減ります(笑) カスタマイズ機能を使って設定設定。
  2. Infoのパス設定が微妙な感じになってしまっていたので修正。 色々調べた結果、こんな感じにお上品に書く手法を見つけました。ネットの集合知ありがたい。
またそのうち書きます。

ではまた次回!!

Emacsで「対応する括弧へカーソル移動」修正版

photo

コード書いとる??

Emacs 25.1が待ち遠しいですね。

さて今回は、ちょっと前にGistで公開した「対応する括弧へカーソル移動(Vz風)」というマクロを修正した話です。


対応する括弧へカーソル移動(Vz風)は、読んで字のごとく、対応する括弧へカーソルを移動するマクロです。

C++でコードを書いてて、ブロックのネストが深くなってきた時とか、ブロックの規模が大きくなってきた時に威力を発揮してくれるのですが、これがいかんせん汎用性がない。括弧の文字コードがハードコーディングされてるので、他のプログラミング言語やHTMLに対応させようと思ったらその都度マクロに手を入れる必要がありました。

これを解決するため「カーソル位置の文字が括弧かどうかを判別できないかしらん」と考えていた矢先、本当にお世話になっているブログ「日刊Emacs」で先日こんな記事を見かけました。


ウヒョ!! これだ!!!!

というわけで早速修正。



すっきり!! なんでもこーい!!!!


ではまた次回。

レイトレ合宿4!? 無事完了

photo1

コード書いとる??

レイトレ合宿4!? も無事完了!! 今回もめちゃめちゃレベルが高くとても有意義な時間を過ごせました。

とにかく景色が最高!! 道端にごくフツーにハイビスカスが咲いとるとか、ヤシの木が生えとるとか、露天温泉から海が見えるとか、肉眼で天の川が見られるとか、人生初の八丈島は発見の連続でした。

photo2

「海面のスペキュラの感じがたまらん」「さすが南国は彩度が高い!!」「すっげぇ・・ハイビスカスの赤が飽和しとる!!」とか秀逸なコメントの連続でみなさん勉強熱心ですよね。

photo5

拙作は惜しくも入選を逃しまして、次回こそはと雪辱を誓うのであった・・・。

photo3

さて詳細は公式サイトを見ていただくとして今回拙作はレイマーチングによるレンダリングを自作しました。

photo4

また、新たな試みとしてマルチスレッド化をOpenMPにお任せしてみたのですが、Widnows版はMSYS2+MinGw64のgccが対応していたのでよし、OSX版はXcode付属のclangが対応・・・していない!!

ので、Homebrew経由でgcc6.0.2をインストールしました。ただ標準だとOpenMPに対応していない(標準ライブラリのマルチスレッド対応と喧嘩する)ので
 
brew install gcc --without-multilib

として、もちろんフルビルド!! あはははは!!!!

これで事なきを得ました。


ではまた次回!!

MSYS2とMinGW-w64で快適gcc環境

コード書いとる??

レイトレ合宿4!?もいよいよ明日からです。
拙者の作品もなんとか間に合いまして、2日間の合宿を楽しく過ごせそうな予感!!

今作品はOSX上で開発して、最後にWindows向けにビルドしたのですが、その時の顛末をメモ書き。


提出期限が迫ってきた時の話です。

「あれ?? OSXで開発を進めてたけど実行環境はWindowsじゃん!!」

拙者が使っているMacBookには仮想マシン上で動作するWidnows8が入っています。業務でエクセルを使うための措置なのですが、VisualStudioが入っていない!!

今からVisualStudioを導入すると確実に1日ロストします。締め切り直前でそれは痛い!!

そこでふと思い出したのがMSYS2+MinGW-w64。ずっと以前、emacsをWindows上でビルドするのに使ってたっけ...確かgccだったよな...そうかその手があったか!!


MSYS2はざっくり言うとWindowsで動作するUnixシェルとかアーカイブツールとかをまとめたものです。んで、MinGW-w64の方はGCCとかmakeとかの様々なGNUのツール群をWindowsに移植したもの。

という訳で公式からMSYS2のインストーラーをダウンロードしてインストール。迷わずx86_64版を選択。この記事を書いてる時点でインストーラーのファイル名は msys2-x86_64-20160205.exe でした。

標準設定のインストール先は C:\msys64 です。ここは変えずにインストール。インストールが完了すると MSYS2 Shell が起動します。ようこそ!!!!
 
test

今回はGCCの導入が目的なので特に設定などは触りません。

インストールが完了してMSYS2 Shellが起動したらまず最初に行うこと。それはMSYS2の内容を最新版に更新することです。公式にその手順が書いてある...のが若干微妙で、ここにかいてある手順でうまくいった。
pacman -Syuu
この後MSYS2シェルを終了してもっかい起動しようとすると...なぜか起動しない。msys2_shell.batが削除されているのが原因なのですがなぜ?? (どうやら最近仕様変更があった模様)

代わりにmsys2.exeができてるので、これを使えば良さそうだね。

pacmanはMSYS2のパッケージ管理システムです。システムを最新の状態にしたり、新しくアプリを追加したりする時に使います。

・簡単なテキスト編集用にvimを導入
pacman -S vim

・/etc/pacman.conf 内のMinGW32の設定はいらんのでコメントアウト
#[mingw32]
#Include = /etc/pacman.d/mirrorlist.mingw32

・GCCの導入
pacman -S mingw-w64-x86_64-toolchain

はいオッケィ!! OSXで書いてたコードがWindowsでビルドして実行できるようになりました!!

test

gccを使う場合はmingw64.exeで起動するシェルだと諸々パスが通っているので楽。

出来上がった実行ファイルをMSYS2の入っていないWidnowsで動かすには、いくつかDLLが必要になることもあるので注意。(MSYS2をインストールした先にあります)


ではまた次回!!

レイトレ合宿4!? アドベントカレンダー

ph01

レイ飛ばしとる??

いよいよレイトレ合宿4!?が近づいてきてますな。

参加者の皆さんはきっと、すでに思い思いのレンダラを完成させ、その先の高度な心理戦が始まっていることと存じ上げます。

そこで今回は初離島ということで、開催地の八丈島について少し調べてみました。

レイを飛ばすにはまず味方から!!

八丈島の行政区分は東京都。東京都下ってことか。東京都知事選挙の投票も行われます。遠い。隣にある八丈小島と区別するため八丈本島もしくは八丈大島と呼ばれることもあるそうな。

Landsat_Hachijojima_Island

八丈島が2つの火山が接合した島だったというのには驚きました。ちゅーても最後の噴火は1605(慶長10)年らしいのですが。その火山のおかげか温泉がいたるところにあるらしい。思いっきりレイを飛ばした後の温泉..!! 気持ち良さそうですな。

青い空の下に広がる真っ白な砂浜...というのはほとんどなく、代わりに荒々しい岩場の海岸が多いんだそうで。深夜小型ボートで上陸する場合には注意が必要ですな。

49

年間平均気温は17.8度。高温多湿、風が強く雨が多いんだそうな。っても8月は降水量が最も少ない月なので、念のために傘持参くらいの気持ちで行ったら良さそうです。

空路はANAが1日3便運航。出かける場合は早めに航空券を手配した方が良さそうですな。先月拙者が手配中にどんどん席が埋まっていき戦慄を思えたのが記憶に新しいです。

特産品は「くさや」「明日葉」「焼酎」「黄八丈」「シンノウヤシ」「パッションフルーツ」「ぶど」「島寿司」

Shimazushi_in_Bonin_Islands

レイを飛ばす前にまず島寿司で腹ごしらえをしたいところです。
 
Niijima_kusaya

激辛好きなので、こちらのくさやの瓶詰めも気になりますね。

レイを飛ばすのに夢中になる気持ちはわかりますが、初めての離島も大いに楽しみましょう!!

では良いレイを。

emacs25.1 RC1 を試す

35

コード書いとる??

いよいよemacs25.1のリリースが近づいてきてますな!!

そこで先日リリースされたemacs25.1 RC1のビルドと変更点についてのメモ書き。

ビルドは、いつものようにこちらで紹介されているCarbon版のパッチを当ててから。
(いつもありがとうございます!!)
  1. 本家からemacs 25.1 RC1をダウンロードして解凍
  2. autogen.shを動かす(configureその他が生成される)
  3. 前述のパッチを当てる
  4. ./configure --with-mac --without-x
  5. make
  6. make install
だいたいこんな感じの手順。詳しくはリンク先の手順を参考にしてちょ。
日本語入力の文字のちらつきが解消されていたり、その他OSX専用処理が追加されていたりします。

変更点などはNEWSを参照英語という名の日本語で詳しく書いてあるよ!!

emacs25.1 RC1を触ってみて気づいたのは以下のようなところ。
  1. shell 画面半分
    これまでの挙動に戻すにはこうする
        (add-to-list 'display-buffer-alist
    	    '("^\\*shell\\*$" . (display-buffer-same-window))) 
  2. スクラッチパッド箇条書きが赤くなった
    1) こんな感じになる...
    若干微妙なので解除したい... 
  3. set-buffer-file-coding-system の指定で utf-8-s TAB でinternal error
    いい加減バグレポしますw 
  4. 対応するカッコのfont-lock
    (show-paren-mode 0) はグローバルな設定になったので代わりに 変数show-paren-modeをバッファローカルにして対応 
  5. C++11対応
    さいこうです!!!! 
  6. comment-line
    コメントのON/OFFが簡単になった 
  7. fast-but-imprecise-scrolling
    爆速スクロールを有効にする変数ができた 
  8. isearch
    変数search-default-modeで検索時のモードを指定できる!! 
  9. dired
    Zでファイル単体、cでマークしたファイルを圧縮(でもファイルが削除される) 
  10. elisp関数や変数の上にカーソルを置くとモードラインにHELPが表示される
    これめっちゃ便利!! 
  11. 日本語入力が点滅する
    Carbonパッチなら問題無し 
  12. Helpのクオートが見やすくなってる
    text-quoting-styleで変更できる。見やすい。 
こちらにも詳しく書いてありますな。多謝。
はぁぁぁ!!正式版が待ち遠しい!!!

ではまた次回!!

El CapitanにRictyを導入してみたメモ

コード書いとる??

MacBook Pro Retina 13inchを買って一ヶ月くらいです。RetinaかわいいよRetina。
拙作フレームワークはちゃんと動きませんが。

これまでemacsの文字フォント設定はMenlo+Rictyでした。

22
 
それで問題なかったのですが...よっくみると行間のスペースが若干違っててズレる!!

40

画像で見ても全くわからんw でも、2ピクセルくらい、行の高さが違うんよ。

気にするレベルではないのですが、モードラインが微妙にガタつくのが気になって気になって仕方がない...!! もう無理!!

以下「Rictyも新しくなってるし、もっかい生成してみるかね...」というメモ。

Rictyの配布サイトはGitHubからこちらへ移動してました。
ここの説明を読んで手順通り進めればまずRictyが手に入ります。OSXならね!!
  1. 所定のフォントをインストール
  2. homebrew経由でコマンドライン版Fontforgeを導入
  3. Ricty生成スクリプトを走らせる
作業時間15分くらい。楽!!

emacsでのフォント設定は以下のようにした。楽!!
 
(set-face-attribute 'default nil
                    :family "Ricty"
                    :height 180)

org-modeとかで表示がズレないし、本当にいい時代になったものですなぁ。
 
16

さっそくXcodeとかターミナルのフォント設定も変更してみた。
31
溢れる統一感。

ではまた次回!!

MacBook 買い替え記

photo

コード書いとる??

MacBook Air 13inchからMacBook Pro 13inch(Retina)に買い換えました。
Retina快適!!

という訳で乗り換え記です。

普段からTimeMachineでバックアップを取っていたので、初回起動時にデータ移行をおこないました。これがスッゲー楽!! 待つだけです。

で、その他設定を進めてオッケーと思いつつファイルをチェックしていたら幾つか移行できていないファイルがある...?? 調べてみたら、まさかのバックアップ漏れ!!


原因は不明なのですが、幾つかのファイルとフォルダに「バックアップから除外」属性が付与されていました。 主にCMakeで作った一時フォルダなのですが...この仕様は微妙に困るな...

で、先のサイトで紹介されていた手順に倣い、「バックアップから除外」属性を外して再バックアップ→移行アシスタントで無事、データはすべて移行できました。

あとはすべてのアプリケーションの動作を確認して... でiTunesが起動しないw

データが格納されているフォルダのオーナーが502という値になっているのが原因。ファイルのオーナーをログインアカウント名にしたら無事に解決しました。他にも Homebrew でファイルのアクセス権が原因での警告が大量に発生したのでこちらも修正。

Xcodeはコマンドラインツールの再インストールが必要でした。

さらに、MacBook Airから設定を引き継いだのでLaunchpadで表示されるアイコンが超大きい状態になってしまったw

これは以下のサイトを参考にしてちょうど良い感じに変更。


あと、トラックパッドの設定や通知の設定など一部の設定が初期化されてしまっていたので、チマチマと再設定...。

さて使い始めてみるとMacBook Airと色々違うところがあって戸惑いつつ新しい環境を楽しんでます。
  • 仕事柄HDMI経由で外部ディスプレイに画面を映す事が多く、HDMIを直接刺せるのは良い
  • 外部モニタに繋いだ時は、MacBook Pro側は外部ディスプレイの解像度のRetina解像度になって素敵
  • キー配列は同じなのに、若干押し込みが浅いためかtypoが多い
  • ディスプレイの解像度を「スペースを拡大」に変更して超広々!!
  • MacBook Proの方がMacBook Airより一回り小さい事が判明

ではまた次回。

本格的にCinder 0.9.0を触り始めた話

18
コード書いとる??

ひょんな事から知り合った東ゲ部第一回もくもく会に参加してきました。ゲーム作りたい欲の塊のような連中に混じってもくもくもくもくと作業するのはとても楽しいですし、創作意欲を刺激されますね。

さっそく第二回目も予定されとるので、暇しとる人は一緒にもくもくしよまい(この記事を書いてる時点で残りあと2枠)


さて。Cinderは拙者の「OSXでもiOSでもWindowsでも動作するアプリをC++とOpenGLで書きたい!!」欲を叶えてくれる数少ないフレームワークの一つです。

その最新バージョンである0.9.0を試してみたメモ書き。

Cinderで扱っている機能は以下のような感じ。
  • 描画周り
  • サウンド周り
  • 入力(マルチタッチとかも)
  • ベクトル・行列
  • イージング
  • JSON読み書き
  • AABBとRayの交差などの簡単な交差判定
できる限り最低限の機能だけに絞ってて好感的。もちろんソースコードは公開されているので、リファレンスで足りない情報はコードから補えます。

プログラミングの勉強にはうってつけじゃないでしょうか。

描画周りもガッツリ隠蔽されているわけではないので、足りない分は直接OpenGLのAPIを使って書けます。実際Cinder0.8.6を使った拙アプリを昨年公開してます。安心してください。アプリ作れますよ!!

最新バージョン0.9.0ですがかなりテクニカル方面に振り切った仕様変更がなされています。
  • OpenGLの新しい仕様をガッツリ盛り込む
  • 固定シェーダーの切り捨て
    ベースライン:OpenGL 3.2 Core Profile & OpenGL ES 2.0
  • ベクトル・行列を扱うライブラリglmを導入
ベクトル・行列周りは思いっきり変更になってるので、これまでのコードはビルドできません。まずはサンプルコード群を眺めてAPIを把握してからコードを書き始めるのが吉。公式リファレンスにはAPIの説明だけでなく、導入ガイドも用意されています。2、3日試行錯誤すれば自然と体が慣れてくるよ!!

Cinder0.9.0導入にあたっては、自分の開発環境向けに幾つかビルド設定を変更して再ビルドしました。
  • boost最新版(1.61.0)を導入
  • VisualStudio2015向けに再ビルド
    プリプロセッサに _ITERATOR_DEBUG_LEVEL=0 を追加
    src/AntTweakBar/TwMgr.cpp にあるVisualStudio2010向けのワークアラウンドを削除
  • iOS版はプリプロセッサに CINDER_GL_ES_3 を指定して再ビルド
    OpenGL ES 3.0 なら、OpenGL 3.2 とシェーダーの差異が少ない
  • 公式リファレンスを参考に、ドキュメントをdoxygenで作成
Cinderはフレームワークの再ビルドが簡単なのでありがたい。

新しいCinderで作り始めたコードはコレ。自分の勉強用なので内容は雑ですが、Cinderを始めるきっかけになれば!!

ではまた次回!!

assimp 3.2 を試す

dragonsplash
コード書いとる??

assimp(Open Asset Importer)は様々な形式のモデルデータをC/C++で扱えるようにするライブラリです。
スケルタルアニメーションの勉強ついでに最新バージョンを触ってみたのでメモ。

assimpはWindows・OSX(iOS)・Linuxの環境でビルドして使えます。
扱える形式は以下の通り。
  • 3DS
  • BLEND (Blender)
  • DAE/Collada
  • FBX
  • IFC-STEP 
  • ASE
  • DXF
  • HMP
  • MD2
  • MD3 
  • MD5
  • MDC
  • MDL
  • NFF
  • PLY
  • STL
  • OBJ
  • OpenGEX
  • SMD
  • LWO 
  • LXO 
  • LWS  
  • TER 
  • AC3D 
  • MS3D 
  • COB
  • Q3BSP
  • XGL
  • CSM
  • BVH
  • B3D
  • NDO
  • Ogre Binary
  • Ogre XML
  • Q3D
  • ASSBIN (Assimp custom format)
たくさん!!!


  1. ビルド
    CMakeを使いましょう。GUI版なら必要なファイル形式のみビルド設定も手軽にできます。

    26

    assimpはboostに依存しています。手持ちのboostを使いたい場合は
    ASSIMP_ENABLE_BOOST_WORKAROUND
    をオフにして、boostライブラリへのパスを指定すればオッケー。

    iOS版のライブラリも作れます。Xcodeでターゲットを複製して、必要な設定を追加すればオッケー。
    Android版はよくわからん。
  2. マニュアル
    同梱されているリファレンス(html形式)にはなぜか一部のクラスのドキュメントが欠けています。
    そこでdoxygenを使って生成。
    そのままの設定だとスタイルシートのファイル設定が微妙だったので、Doxyfile 内のHTML_STYLESHEET 設定を空にしてから生成。いい感じ。

    16

    HTML形式でも充分良いですが、Windowsで良く使うCHM形式にするとより便利!!
    表示はOSXのCHM Viewというアプリがいい感じ。

    doxygenが生成に必要なファイルを書き出してくれているので、HTML Help Workshopのコマンドライン版でサクッと生成できます。 ⇒導入と使い方
で、いろいろ思い出しつつCinder上でモデルデータを読み込んでリジッドボディアニメーションを再生するコードを書く。ここまでで約1日。
 
23

データ構造が把握できればあとは早い。

assimpは対応フォーマットは多いけど思った通りに読めるのは少ない。。。マテリアルやアニメーション情報が欠落する状況に多々遭遇。あとでissue投げておこう。

で、assimpのプレビュワーのコードを参考にしつつスケルタルアニメーションを再生するコードを書いた。
 
59

これも大体1日w
リリースビルドなら12万頂点のアニメーションがiPhone6でも60fps!! 笑

blenderでMMDデータを扱えるアドオンを見つけたのでデータ変換してはプレビュー。データ変換してはプレビュー。してます。このアドオンを作ってくれた方に多謝!!

49

動作検証だいじ。

今回書いたコードはGitHubで公開しとるので興味のある人は覗いてみてちょーだい。

ではまた次回。

JNetHack を OSX で遊ぶ

05

コード書いとる??

NetHackが12年ぶりのバージョンアップです。
NetHackが12年ぶりのバージョンアップなのです。


そしてなんと、日本語版(JNetHack)もバージョンアップしとる!!

すごいなぁ。12年前のコードなんて、手元に残っていませんよ。

拙者はNetHack未体験なので、これを機会に遊んでみようと思いました。
というわけで、JNetHackをOSXで動かそうとして四苦八苦したメモ。


OSX版は日本語パッチを当ててビルド。。。できません!!
cp932なソースコードをclangが受け付けませんw

なので、以下の手順でビルドしてみました。

  1. homebrewを導入
    公式サイトに導入法が書いてある
  2. homebrew経由でgccを導入
    brew install gcc
  3. 本家からソースコード一式をダウンロード
  4. 日本語版公式からパッチ一式をダウンロード
  5. 本家のソースコード一式を解凍してパッチを当てる
    patch -p1 < ../jnethack-3.6.0-0.5.diff
  6. sys/unix/hints/macosx10.10 を修正
    CC=gcc-5
    CFLAGSに-finput-charset=CP932 -fexec-charset=CP932をつけたす
  7. ビルド設定を生成
    sh sys/unix/setup.sh sys/unix/hints/macosx10.10
  8. ビルドしてインストール
    make install
  9. ~/nethackdir へインストールされている!!
  10. そのまま動かすと文字化けするのでターミナルのテキストエンコーディングをShift JISにする
  11. 起動
    ./jnethack
  12. Enjoy it!!

homebrew経由でcocotを導入すると
 
cocot -t UTF-8 -p cp932 -- ~/nethackdir/jnethack

でUTF-8なターミナルで日本語が表示される。べんり。 


ではまた次回!!

記事検索
このブログを書いとる人
電子書籍発売中

「チュートリアル形式で始めるOpenAL」
サウンド怖くない。C++による8つのチュートリアルで始めるOpenALプログラミング。さああなたも、自作アプリに魅力的な音効を添えてみませんか??
⇒Kindle版 ⇒iBooks版


「iPhoneアプリ『ういろう』のレシピ」
ゲームってどうやって作ってるの?? 拙アプリ『ういろう』の製作過程を本にまとめました。もちろんソースコードつき
⇒Kindle版 ⇒iBooks版


『チュートリアル形式で始めるOpenGL[2D編]』
OpenGL怖くない。C++による16のチュートリアルで始めるOpenGLプログラミング[2D編]。さああなたも、ゲーム作りを始めてみませんか?
⇒Kindle版 ⇒iBooks版
自作ゲーム配信中

『BRICK & TRIP』
咄嗟の判断に、あなたの指先はついてこれるか?! 爽快フリックアクション!! 様々な難関をくぐり抜けて旅の終着点を目指そう!!
⇒AppStore


『ういろう』
名古屋土産ういろうがiPhoneで大活躍?! 白ういろうを守れるのはあなただけ。ひゅーん、ぼよよーん!!
⇒AppStore ⇒LITE版


『こなへん』
ヒマラヤ山脈、大西洋、世界で一番深い湖… それって地球のどこにあるのか知ってるかな?『全方位直感地理クイズ』という新ジャンルに挑戦!あ、それ。地球をくーるくるw
⇒AppStore ⇒LITE版


『GEOSPOT』
ヒマラヤ山脈、大西洋、世界で一番深い湖… それって地球のどこにあるのか知ってるかな?『全方位直感地理クイズ』という新ジャンルに挑戦!あ、それ。地球をくーるくるw
⇒Windows ⇒Mac


『TieGunner』
マウス片手に大宇宙へ飛び立とう!『しっぽシューティング』というジャンルを作って頂きました^^; WinでもMacでも動きます。ソースもあるでよw
⇒Windows ⇒Mac
監修を担当しました

QRコード
QRコード
  • ライブドアブログ