昔の最近の出来事(2015.06)

2015/06/30

遅めに帰着。

調べ事。ボーンムズい。IKもっとムズい。

2015/06/29

遅めに帰着。

弱虫ペダルGRをやっと消化。王道って感じの展開でしたが、 直球で良い感じだったと思います。1期から含めてとても面白かったです。

調べ事。

2015/06/28

AM中に起床。洗濯したり掃除したり。

そういや 以前作ったリバーシの制作 メモで触れている、ファミベのオセロについてふと検索してみたら 動画を発見できたり (こちら)。 今見ると意外と思考時間短いと思ったりも。 他にもベーマガに載っていたリストを実際に動かした動画が沢山上がってて 覚えているものから初めて見るものまで色々ありました。 有名所ではファミベのよっしん氏の 「ZACNER U」とか。 レザーとかオプション5個とか多重スクロールとかデカキャラとか、 オーバーテクノロジーな感じです。 他にも「メタルさ!伊藤」 とか初めて見ました。
あと、「CRASH MAZE」は V2用なのに実に良くできたゲームだったと今見ても思えます。

もそもそとコーディング。PMX表示テストで頂点モーフを試してみたり (ボーンはスキニングが難しそうなので(^^;)。 制御自体は頂点データを頂点モーフデータを使って座標移動するだけなのですが、 ちゃんと変形されるのがスゲー。頂点の移動量がデータとして格納されている 訳ですが、頂点移動前と移動後の両方のモデルが無いと、差分抽出できないと 考えられます。どうやってPMXデータ化するんだろう?と疑問に思ったりも。

PMX 頂点モーフテスト

2015/06/27

AM中に起床。休出。

gdcを x86_64-w64-mingw32 ターゲットでクロスビルド。前回はlibphobosの ビルドでコンパイラがICEで落ちまくってましたが、今回はエラー無くビルド 成功。hello worldレベルのコードはコンパイルできましたが、 Winアプリのコードはちょっと問題がありそう。そして、構造体のメンバー関数 呼び出しで変数が化ける問題も i686-pc-mingw32と同じく再現します。 という訳でダメそう。

もそもそとコーディング。今の構造だと実験しにくい感じになってきた のを整理したり。

2015/06/26

遅めに帰着。

先日ビルドしたGDC。DMD2.066.1ベース gdcの重大な問題点として、 構造体メンバー関数呼び出しで変数が化けるというのがあるのですが、 それは直っていない模様。

$ cat test_struct.d
import std.stdio;
import std.math;

struct Vec3D
{
  double x,y,z,w ;

  void set(double x, double y, double z){
    this.x = x ;
    this.y = y ;
    this.z = z ;
  }

  Vec3D normalize(){
    writef("a: xyz=(%f %f %f) %s\n", this.x, this.y, this.z, this) ;
    Vec3D retvec ;
    double d ;
    writef("x: xyz=(%f %f %f) %s\n", this.x, this.y, this.z, this) ;
    d=sqrt( this.x*this.x + this.y*this.y + this.z*this.z ) ;
    writef("d=%f\n",d) ;
    if( d>0.0 ){
      retvec.x = this.x/d ;
      retvec.y = this.y/d ;
      retvec.z = this.z/d ;
    }else{
      retvec.x = 0.1 ;
      retvec.y = 0.2 ;
      retvec.z = 0.3 ;
    }
    return(retvec) ;
  }
}

void main()
{
  Vec3D v ;
  v.set(0.8,0.0,0.0) ;
  writef("1: %s\n",v) ;
  v=v.normalize() ;
  writef("2: %s\n",v) ;

  return ;
}

$ i686-pc-mingw32-gdc.exe test_struct.d

$ ./a.exe
1: Vec3D(0.8, 0, 0, nan)
a: xyz=(0.800000 0.000000 0.000000) Vec3D(0.8, 0, 0, nan)
x: xyz=(nan nan nan) Vec3D(nan, nan, nan, nan)
d=nan
2: Vec3D(0.1, 0.2, 0.3, nan)

$ i686-pc-mingw32-gdc.exe -v
Using built-in specs.
COLLECT_GCC=i686-pc-mingw32-gdc
COLLECT_LTO_WRAPPER=/usr/local/gdc031_20661_510_mingwcross/libexec/gcc/i686-pc-mingw32/5.1.0/lto-wrapper.exe
Target: i686-pc-mingw32
Configured with: ../gcc-5.1.0/configure --with-pkgversion='gdc-5 5d95e14a6a' --build=i686-pc-cygwin --host=i686-pc-cygwin --target=i686-pc-mingw32 --enable-languages=d --prefix=/usr/local/gdc031_20661_510_mingwcross --with-sysroot=/usr/i686-pc-mingw32/sys-root --enable-threads --disable-nls --enable-sjlj-exceptions --disable-bootstrap
Thread model: win32
gcc version 5.1.0 (gdc-5 5d95e14a6a)

i686-*-mingw32ターゲットでビルドしたgdcで、リンク時に名前解決 できない件((参考1,参考2) は直ってました。
他、ちまちましたのは特にソースコードに変更が無いようだったので、 引き続きパッチは必要そう(以前の状況)。

2015/06/25

遅めに帰着。

GDCのビルド。色々直ってそうな予感がしますが、どうなるかはビルド してみてのお楽しみ。

Webで調べ事をしていてたまたま見つけた記事 ( 英語版『ドラクエ』、地域方言を活かしたローカライズの妙味)。 色々な訛りの英語が盛り込こまれているというのを知ったり。 そういや「ぱふぱふ」や「あぶないみずぎ」はどう翻訳されているんだろう?

gdcのビルドに成功。手持ちのWinアプリをビルドしてみたところ特に ずっこける事無く動いたり。明日もう少しテストしてみよう。

2015/06/24

遅めに帰着。

ちょろりコーディング。

2015/06/23

遅めに帰着。

もそもそとコーディング。

2015/06/22

遅めに帰着。

ちょろりコーディング。

2015/06/21

AM中に起床。

Emacs突然死問題。6/15から今日まで、途中Windowsのサスペンドなども 含めて動かし続けていましたが、新しくインストールしたCygwin上では 三つ同時起動のどれも死ぬこと無く動いてました。古いCygwinの方の どこかにずっこけ要素があるものと推測。DLL群の再インストールを 検討してみよう。
それにしても、単に違っているファイルを差し替えられれば良いのですが、 rebaseのせいでインストールされたdllは、ファイルの日付やサイズが同じ にも関わらず、diffを取ると中身が違っている事があるのが面倒臭いです。

gdcの方で色々pull requestが取り込まれている模様。

もそもそとコーディング。うーん、なんか違う。

既に終わってますがE3。どこも割りと直近に発売される (2015年内〜2016春)ものの発表が多かったようにも。 個人的には「人喰いの大鷲トリコ」の開発が続けられていたという のに驚いたかも。他にも「シェンムーIII」とか、は?マジで?!という感じ。 以前、GDC2014で鈴木氏が講演した 記事を知りました。この記事の最後に 「『シェンムーIII』は発売されますか?」との質問がいの一番に飛び出した。それに対する鈴木氏の答えは、「機会があれば、作りたいと思っています」とのこと。 とあったのですが、当然(失礼)、無いだろうなと思ってました(^^; ここに来てまさかのって感じです。 クラウドファンディングで寄付(Kickstarterだから投資では無い)を 募っているようです。
据え置き機のゲームはどれも凄まじい絵が出ているように思いますが、 プレイアブル映像は動きが若干不自然に見える点が まだあるように思えます。 将来、「Assassin's Creed Syndicate」の トレーラー映像 (リアルタイムレンダリングでは無い)レベルの絵が、プレイアブルでいけるように なると、「動かせる映画」と言っても全く差し支え無いと思います。 PS5世代くらいでイケるかな?ちょっと無理か?

2015/06/20

昼頃起床。

ちょろりお出かけ。

PS4にメディアプレイヤーが来てたり。USBストレージやDLNAのファイルを 再生できる模様。ちょろっと試した所ではPS3ほどの機能は無い感じ。 音楽ファイルはバックグラウンド再生可能なようです。 4K動画ファイルも再生できない模様。再生コントロール(早送りや巻き戻し をスティックで制御とか無し)も普通。PS3では oggも再生できて恐るべし という感じだったのですが一般的な音楽ファイルに限定されている模様。 良くも悪くも PS4のそれはなんとなく普通という印象。

もそもそとコーディング。うーむ判らん。

2015/06/19

早めに帰着。

ノイタミナ枠で放送されていた「四月は君の嘘」をやっと消化したり。 最後はまさかそういう事だったのかと思った訳ですが、だからこの タイトルだったのかと納得してみたり。バイオリンもピアノも 音に合わせて ちゃんと弾いている絵になっているのが すげぇと 思いました。

もそもそとコーディング。複数のテクスチャを扱うシェーダーを 実験していて、何故かglGetUniformLocation()を使用したシェーダーへの パラメータ渡しが失敗する場合があって悩んだり。で、あれこれ値を 変えながら試してみた所、以下のような原因らしい?という事が判った ような?

3枚のテクスチャが指定されている事を確認する為に、フラグメント シェーダーは次のようなコードにしていました。

uniform sampler2D tex0;
uniform sampler2D tex1;
uniform sampler2D tex2;

void main()
{
    vec3 color0 = texture2D(tex0, gl_TexCoord[0].st).xyz;
    vec3 color1 = texture2D(tex1, gl_TexCoord[0].st).xyz;
    vec3 color2 = texture2D(tex2, gl_TexCoord[0].st).xyz;

    gl_FragColor.rgb = color0 ;
    gl_FragColor.a   = 1.0 ;
}

で、「gl_FragColor.rgb = color0 ;」の所を「gl_FragColor.rgb = color1 ;」 とかにしてシェーダーをリロードすれば二枚目のテクスチャで表示 されると目論んだ訳ですが、これがうまく表示されませんでした。

うまくいかない原因一つ目。 どうやら、color1,2は未使用というのが伝播して 最終的にtex1,tex2もシェーダーの受け口として無くなるような最適化 がかかるようで、tex1,tex2へのglGetUniformLocation()実行が失敗してしまう ようです。そして、 「gl_FragColor.rgb = (color0 + color1 + color2)/3.0;」とかに 書き換えてシェーダーのみをリロードしてもうまく描画されません。 ここは推測ですが、ディスプレイリスト登録時に glGetUniformLocation()が エラーを返すと、エラーしたglGetUniformLocation()はディスプレイリストに 登録されていないのかも知れません(ディスプレイリストの内容を 表示する方法って無いのかしら?)。 最初のシェーダーロード時にはとにかく受け口が未使用にならないように して、glGetUniformLocation()が失敗しないようにする必要があるようです。

うまくいかない原因二つ目。一旦エラー無くロードできた後に、 例えば「gl_FragColor.rgb = color0*0.0 + color1*0.95 + color2*0.05 ;」 の様に 最終的にcolor0が不要になるシェーダーコードをリロードした場合 もうまく動きませんでした。 再度「gl_FragColor.rgb = color0*0.0001 + color1*0.95 + color2*0.05 ;」 のようにcolor0,1,2全て使用するシェーダーコードにしてリロードすれば 式通りの絵が出てきました。完全に受け口が無くなる訳ではないのが、 原因の一つ目と様子が違います。 恐らく、ディスプレイリスト内にglGetUniformLocation()は積まれている ので、とにかく実行だけはされるのでしょう。これがシェーダーのリロード で再び意図通りの絵が出てくる理由だと推測されます。

プログラム起動後の最初のシェーダーロードでは、ディスプレイリスト登録時に glGetUniformLocation()の戻り値をチェックできるのでエラーになっている と判るのですが、シェーダーのリロードではシェーダーのみ差し替えを行った後、 登録済みのディスプレイリストをコールして表示しているものですから、 glGetUniformLocation()の戻り値をチェックできません。 この為、実際にはglGetUniformLocation()が失敗しているのでしょうけど、 ただ描画がうまくいかないだけという結果になるようです。

Webや本は、うまくいく例しか載っていなかったりするので、ハマり どころになかなか気づきませんでした。みんな どのようにデバッグや実験 をしてるんだ?と思ったりも。

2015/06/18

遅めに帰着。

もそもそとコーディング。うーむ、判らん。

2015/06/17

遅めに帰着。

もそもそとコーディング。変な感じだった原因判明。
GLSLを弄っていたのですが、トゥーンシェーダーのように視線と 頂点法線を使った例が思い通りになってませんでした。 原因から言うと、視点設定と行列モード設定の順番を間違えて いた為でした。この為、視線ベクトルがある場所に設定されているのを 第三者的視点で眺めているような絵になってしまってた為、 なんでだ?という感じでした。

-----間違いコード----------------------------------------------

  int display(int win_w, int win_h){
     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
     glLoadIdentity();

     glViewport(0, 0, win_w, win_h);
     glMatrixMode(GL_PROJECTION);
     glLoadIdentity();
     gluPerspective(camera.fovy, cast(double)(win_w)/cast(double)(win_h), 0.3, 200.0) ;
     gluLookAt(camera.ex, camera.ey, camera.ez,
               camera.cx, camera.cy, camera.cz,
               0.0,1.0, 0.0) ;
     glMatrixMode(GL_MODELVIEW);   //ここより前にgluLookAt()でカメラ位置を設定

     glClearColor( clr_r, clr_g, clr_b, 0.0 ) ;

     glLoadIdentity();  //これが無いと描画が変になる。でもカメラ位置はMODELVIEW変換の対象にならない。

-----正しいコード----------------------------------------------
  int display(int win_w, int win_h){
     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
     glLoadIdentity();

     glViewport(0, 0, win_w, win_h);
     glMatrixMode(GL_PROJECTION);
     glLoadIdentity();
     gluPerspective(camera.fovy, cast(double)(win_w)/cast(double)(win_h), 0.3, 200.0) ;
     glMatrixMode(GL_MODELVIEW);

     gluLookAt(camera.ex, camera.ey, camera.ez,
               camera.cx, camera.cy, camera.cz,
               0.0,1.0, 0.0) ;

     glClearColor( clr_r, clr_g, clr_b, 0.0 ) ;

間違いコードでも、GLSLを使わなければそれっぽく表示されます。 間違いコードの最後にある「glLoadIdentity();」は無いと妙な描画が 行われるのですが、その時点で変だと気づくべき所だったのかも知れませんが、 入れる事で間違いを見かけ上無効化して、それっぽく表示できてしまってました。 修行が足りません。

2015/06/16

遅めに帰着。

もそもそとコーディング。なんか思ったのと違う感じに。

2015/06/15

遅めに帰着。

先日のEmacs起動テストは朝の時点で全てのEmacsが同時に停止 してました。タスクマネージャからプロセスを終了させようとしても、 プロセスを落として良いかを確認するダイアログも出た途端にハング した感じだったり。なんとなくデッドロックしている予感。 explorerも反応しなくなったため電源強制切断で対処。うーむ。 結局、新しいCygwinと普段使いのCygwinの両方でEmacsを立ち上げて テストしていた為、どれが悪いか判らずじまい。

仕方ないのでもう一度。今度は新しいCygwinの方でだけで連続起動テスト を行う事に。さてどうなるか.....

もそもそとコーディング。なんか勘違いをしている気がしてきた。

2015/06/14

昼頃起床。

Emacs突然死問題。コンパイルオプティマイズを -O0に下げれば数時間で 死ぬ事は無さそう。という訳で、ライブラリに続き 4.9.2-3に由来する gcc本体についても調べてみた所、パッケージアーカイブが違っている 模様。という訳で、これまでの分も含めて以下のパッケージアーカイブ を再ダウンロードしてみたり。

./release/gcc/gcc-ada/gcc-ada-4.9.2-3.tar.xz
./release/gcc/gcc-core/gcc-core-4.9.2-3.tar.xz
./release/gcc/gcc-fortran/gcc-fortran-4.9.2-3.tar.xz
./release/gcc/gcc-g++/gcc-g++-4.9.2-3.tar.xz
./release/gcc/gcc-java/gcc-java-4.9.2-3.tar.xz
./release/gcc/gcc-objc/gcc-objc-4.9.2-3.tar.xz
./release/gcc/libatomic1/libatomic1-4.9.2-3.tar.xz
./release/gcc/libgcc1/libgcc1-4.9.2-3.tar.xz
./release/gcc/libgcj-common/libgcj-common-4.9.2-3.tar.xz
./release/gcc/libgcj15/libgcj15-4.9.2-3.tar.xz
./release/gcc/libgfortran3/libgfortran3-4.9.2-3.tar.xz
./release/gcc/libgnat4.9/libgnat4.9-4.9.2-3.tar.xz
./release/gcc/libgomp1/libgomp1-4.9.2-3.tar.xz
./release/gcc/libobjc4/libobjc4-4.9.2-3.tar.xz
./release/gcc/libquadmath0/libquadmath0-4.9.2-3.tar.xz
./release/gcc/libssp0/libssp0-4.9.2-3.tar.xz
./release/gcc/libstdc++6/libstdc++6-4.9.2-3.tar.xz

という訳で再びコンパイルオプティマイズを -O2に戻してEmacsを再ビルド& 長時間起動テスト。さてどうなるか。

ダメ。4時間ほどで3つのうちの一つが死にました。

-O2でコンパイルしたEmacsのバイナリを新しくインストールしたCygwinで 動かすとどうなるか?と思い動かそうとしたところ、何故か child_info_fork::abort でcyglzma-5.dllが怒られたり。正確に言うと、 Emacs本体が怒られているというよりは、Emacsから起動した子プロセスが 怒られているようでした。先日動かしていた-O0のバイナリも同様に怒られる ようになってしまい、なんでだ?という感じになってたり。なんでだ? cyglzma-5.dllだけを 再インストールして(同時にrebaseも実行される) みてもダメ。あれぇ?

仕方ないので、Cygwinを一旦消して再インストール。するとエラーする事 無くEmacsが起動するようになりました。大丈夫かこれ?てか、 いつの間にか壊れてるとか 限りなくダメな感じの奴じゃね?
ともあれ、-O2ビルドしたEmacsバイナリを再インストールしたCygwinで 長時間起動テスト。これで死ねばCygwinかEmacsかコンパイラかライブラリか どこかに問題がある感じ。つまりはよくわからんが死ぬと。死ななければ 普段使いのCygwinのどこかがどうにかなっているという感じか。

そういや以前、pixzという xzのマルチスレッド対応バージョンの存在を知ったのですが、 最近のxzは -T オプションで スレッド数を指定できるようになってる ようです。ただ、32bitバイナリでは-9を指定するとメモリが足りなく なる場合があるのと、圧縮後のサイズが シングルスレッドに比べて 若干大きくなるのは pixzと同じみたいです。

2015/06/13

AM中に起床。ちょろり休出。

Emacs+美人時計。3つ稼動でテストしてるのですが、16時間経過後も 死なず。ダメになった時期やdllファイルの日付などから、どうやら そういう事だったと言って良さそう。
しかし、残念ながら seconds-to-time関数でArithmetic range errorになる件は直らず。 でもこちらもアップデートが契機だったので何かあるのかも。

パッケージをダウンロードし直すのには、 既にダウンロードしているファイルを消す(実際にはリネームしたのですが) 必要がありました。ファイル名が同じで中身の違うものがダウンロードされた為、 壊れたパッケージが一時的にサーバーに置かれていたと考えられます。 ファイル名が同じで中身が違うなんて区別付かない のですから(事実、インストーラーはダウンロード不要と判断 していたのですから)、もっと神経使って管理して欲しいなぁと 思います。

新しく入れたCygwinでも Arithmetic range error が再現しました。 インストール状況の問題では無さげ。

パッケージアーカイブの差分を取ってみた所、他にも違っているもの がありました。gcc-4.9.2-3の以下のパッケージに含まれるdllが 2015-02-24付け(最新は2015-03-04付け)のファイルになっていました。

libgcc1-4.9.2-3.tar.xz
libstdc++6-4.9.2-3.tar.xz
libgomp1-4.9.2-3.tar.xz
libssp0-4.9.2-3.tar.xz

libgomp1とlibssp0はEmacsではリンクされていなかったのですが 入れ直し。後、調査用に仕込んであったデバッグprintのコードを 削除して、コンパイルオプティマイズも上げてEmacs本体も再ビルド。 これで再び長時間起動テストを行ってずっこけなければ Emacs突然死問題は解決という事で。

......ダメだ。2時間以内に3つ起動しているうちの二つが死んだorz
仕方ないのでオプティマイズレベルを下げて再テスト。どうなるか......

2015/06/12

遅めに帰着。

新規インストールしたCygwin上で Emacs+美人時計を 二つ動かしていた のですが、日中ずっと死なずに動いてました。
という訳で何が違うか調べてみたり。一つはcyggcc_s-1.dll、もう一つ cygstdc++-6.dllも違っていました。そもそもアーカイブの中身が違っていたので、 ダウンロードしなおして再インストール。先日入れたものとファイルの日付も サイズも同じになったのですが、それぞれ 16進ダンプを取ってdiffしてみたところ、 随分違っててなんじゃこりゃ?って感じ。

ひとまず、Emacs+美人時計 でテスト開始。さてどうなるか。ダメそうな場合は リンクしているdllを全て再インストールしてみる事になるかも知れません。

2015/06/11

遅めに帰着。

Emacsで美人時計を動かすと突然死する件。Cygwin本体をクリーンインストール して動かしてみるとどうなるか?というのを試してみたり。 普段使いのCygwinとは別の箇所にインストールしてテスト開始。 さてどうなるか。

ちょろりコーディング。

Cygwin落ちる件、なんとなく関係する物が判ったかも。 クリーンインストールをするとき、既にローカルディスクにダウンロードして あったものをインストールしました。ところがcyggcc_s-1.dllが見つからないとか でインストールに失敗してしまいました。そこで、ダウンロードから新規に 行ってインストールしてみた所、問題無くインストールできました。 ここで、普段使いのCygwinと 新しくインストールしたCygwinとで cyggcc_s-1.dllの日付を比べてみた所、普段使いの方は2015/2/24付けに なってましたが、新しいのは2015/3/4付けになってました。 ズッコケが頻発し始めた頃にアップデートしたのは、 2015/3/4で、丁度そのときに リリースされたばかりのcygwin1.dllがインストールされたと記憶して います。つまり、cyggcc_s-1.dllが2015/2/24付けになっているという事は cyggcc_s-1.dllがアップデートされないまま今に至るという事になります。
まずは新規インストールのCygwinでEmacs+美人時計のテストを行い、 もしずっこける気配が無ければ、普段使いのCygwinのcyggcc_s-1.dllを アップデートしてEmacs+美人時計のテストをしてみるというのが 良さそうに思ったり。
新しいのとdll類を全て比較してみる必要があるかも。もしかすると seconds-to-time関数でArithmetic range errorになるのも関係している かも。

2015/06/10

遅めに帰着。

ちょろりコーディング。

画像形式で、ディスプレイ画面に向かって左下を画像の開始原点と するフォーマット(BMPやTGAなど)がありますが、これって何か メリットがあるのだろうか?といつも思います。 世の中が全て左下を開始原点とするのであれば、あまり問題無い のですが、そうでないフォーマットと相互に行き来するような場合は ファイルシステム上でシークが必要だったり、うっかり圧縮されていると 丸々メモリに展開画像をバッファしなくてはならなかったりします。 合理的なメリットは全く無いように思えます。
因みに、Windowsのグラフィックコンテキストは、デフォルトでは 左下が原点になりますが、そもそもウインドウ座標は左上が原点なので、 いまひとつ統一感が無いようにも思えます。

2015/06/09

遅めに帰着。

ちょろりコーディング。

そういやEmacsで美人時計を起動せずに使っているのですが、死ぬ気配は ありません。magitとか使っているので子プロセス実行は行われている のですが.....因みにemnekoは起動しているのですが特に問題無く動き 続けています。ぐぅ。

2015/06/08

遅めに帰着。

DDSファイル。とりあえずDXT3のみに対応。それっぽく読み込めたり。

2015/06/07

AM中に起床。

PMXファイル表示。Webで公開されているモデルをいくつか表示してみてる のですが、PMX自体には使用するテクスチャファイルに特に制限は無い ようで、PNG,BMP,TGAなど割と節操無く使用されているようです。 SPAやSPHはBMPファイルの拡張子を変えたものなのですが、BMPでも Compression==BI_BITFIELDSの本気対応が必要なものだったり DDSとか何それ?みたいな感じだったりしています。 何のライブラリも無いと表示するだけで死ねる感じ。

因みに 拡張子が SPAやSPHでもBMPで読み込めるように画像ロードクラス をいじったら、先日のgdcのバグっぽいものを踏んだという流れです。

それにしても、PMXのデータをいくつか見た感じ、テクスチャには 2048x2048 のサイズが普通に何枚も使われていて、三角ポリゴン数も 25000以上あるという感じです。 以前買った 「ローポリ スーパーテクニック(2008年8月5日初版)」という本によれば、 SD解像度のゲーム機でプレイヤーキャラクターが最大6体 出るゲームだと、プレイヤーは3000ポリゴンくらいで作って相当リッチ という感覚だったようです。SD:FullHDのピクセル数比だと 640*480:1920*1080=6.75倍 てな感じなので、ポリゴン数比やテクスチャサイズ 比にそのまま適用できるかは判りませんが、その比よりは大分大きいんじゃないかな? と思います。
そういや全然関係無いですが、この本の中でSAIを使ってテクスチャ 作成している例が載っているのに今気づいた(^^; SAIの1.0.0リリースは 2008年2月末なので、普通に実戦使用可能という感じだったのでしょう。

DDSファイルのローダーを作ったり。テスト用にppmファイルに 吐き出す所がバグってるのにしばらく気がつかなくて、おかしな結果 っぽく見えて悩んだり。修行が足りません。
圧縮形式に DTX1〜5 と表現されている場合とBC1〜5と表現されている場合 があって、1:1に対応しているのかと思いきやなんかちょっとずれている らしくて、わけが判らなかったり。GIMPのプラグインのソースを見ると、 DXT1,3,5 は知ってて、これがBC1,2,3に対応している感じになっている ようです。GIMPプラグインはDXT2,4は知らないっぽい。 Webで出てくるページよるとはDXT2,4はDXT2,3のRGB値にアルファ値が 乗算されたもののようです。でもRGB565形式にパックされているものに アルファ値を掛けてしまうと値が妙な事にならないか?と思ったりも。 どっちにしてもバリエーションがあり過ぎて対応が面倒臭いです。

2015/06/06

昼前起床。

もそもそとコーディング。

先日のバグっぽいもの。gdcでオプティマイズレベルを上げるとSegfaultで -O0だと大丈夫な事から、コンパイラのバグの線が濃厚。そしてgdbの上で 実行すると再現しない罠。うーむ。

Cygwinアップデート後に Emacsで美人時計。やっぱり落ちました。

gdcのフォーラムで 「What gcc to use for gdc master?」 というのが挙がっていました。最初はgccの対応バージョンが判らなくて ビルドできないというものでしたが、(今日時点の)最後の方にあるように、 OSXでも名前解決できない問題があるようです。アンダースコアを足さなくてはダメなのは 32bit-MinGWのそれと同じなのですが、 「why no ld.exe in 2.066.1 Windows builds?」 との関係に 気づいてー と、こっそり思ったり。

OpenGLであるテクスチャに別のスフィアマッピングしたテクスチャを 合成したいと思ったのですがうまくいかず。
原因判明。glActiveTexture()でテクスチャユニットを指定した時は、 テクスチャユニット毎に glEnable(GL_TEXTURE_2D)を実行しないとダメ だった模様。glActiveTexture(GL_TEXTURE1)でテクスチャを切り替えても ちっとも描画されなかったはそのせいだったようです。
Webの 最初に参考にしたコードではテクスチャユニット毎にEnableにするような コードにはなっていないようだったのですが、ベンダー依存だったりするのかしら?

2015/06/05

遅めに帰着。

ちょろりコーディング。うーむ、またstd.regexかgdcのバグっぽいものを踏んで しまっているようだ......

Cygwinを2.0.3にアップデート。MailingListでプロセス生成に関する バグが修正されたようなので、もしかするとEmacsで美人時計を動かしていると 突然死する問題が解消されるかも?と淡く期待。

2015/06/04

遅めに帰着。

ちょろりコーディング。

そういや美人時計を起動しないでEmacsを使っているのですが、 数日間起動していて死ぬ気配無し。ぐぅ、なんか負けた気がする。

2015/06/03

遅めに帰着。

ちょろりコーディング。

2015/06/02

遅めに帰着。

ちょろり調べ事。

あまりの眠さに急速停止。

2015/06/01

遅めに帰着。

ちょろりコーディング。


TOP PREV