mieki256's diary



2017/03/25() [n年前の日記]

#1 [gosu][ruby] OpenGLの固定機能って

OpenGL の固定機能って、頂点カラーは使えないのだろうか…。GL_COLOR_ARRAY とは一体…。いや、もしかするとテクスチャを貼ったら無効になってしまうのだろうか。かもしれない。

一応、固定機能ではなく、シェーダを書けば…。頂点シェーダ内で、
  gl_FrontColor = gl_Color;
を追加して、フラグメントシェーダ内で、gl_Color を色の計算のソレに掛けてやったら頂点カラーが反映されたけど。
  gl_FragColor = gl_Color * tcolor
    * (gl_LightSource[0].diffuse * gl_FrontMaterial.diffuse * diffuse
       + gl_LightSource[0].ambient * gl_FrontMaterial.ambient)
    + gl_LightSource[0].specular * gl_FrontMaterial.specular * specular;
これで合ってるのだろうか…。

プログラミングについての余談。 :

なんというか、OpenGL の勉強をしてると、少々もやもやしてくる。「OpenGLは○○の機能を持っているのか」「機能を持っているとしたら、どう書けば使えるのか」てなあたりをググって調べるだけで随分と時間がかかってるような。自分の脳内で処理の流れを考えるソレとは異質な作業というか。

プログラミングって、自分が使おうとしてる言語なりライブラリなりの機能や書き方を把握する段階と、どんな処理をさせればやりたことが実現できるのか悩む段階の2つがあるわけだけど。前者で時間が奪われるのがツライ。どうせ「誰かが作った○○の使い方」を学習しなきゃいけないなら、もっとリターンが大きい何か、例えば Unity 等の使い方でも勉強したほうがよほど実があるんじゃないか…。と思ったり思わなかったり。

#2 [cg_tools][gosu][dxruby] Wings 3DでエクスポートしたCOLLADA形式を眺めてたり

blenderからエクスポートした COLLADA形式(.dae)は、Rubyスクリプトを使ってある程度は読めるようになってきたけど。ふと、Wings 3D からエクスポートしたCOLLADA形式ファイルにも対応できたらヨサゲかもしれないと思いついて対応作業を始めたりして。

しかし、Wings 3D からエクスポートした .dae を使おうとすると、色々な問題が。

diffuseが出てこない。 :

テクスチャが貼ってあるモデルデータを .dae でエクスポートしたところ、マテリアル情報のあたりで、ちと問題が。

例えば、blender からエクスポートした .dae の場合、diffuse には RGBA を記述してくれるけど。
  <diffuse>
    <color sid="diffuse">0.8 0.72 0.64 1</color>
  </diffuse>

Wings 3D からエクスポートした .dae は、(テクスチャを使ってた場合)diffuse に以下のような記述が入るので RGBA を取得できない。
  <diffuse>
    <texture texcoord="CHANNEL1" texture="uvchecker512_png-sampler"/>
  </diffuse>
まあ、「テクスチャ画像がRGBAを持ってるんだからそれをdiffuseとして使えや」ってことだろうけど。

どうやら Wings 3D上のマテリアル設定で指定された diffuse 値は、エクスポートした .dae 内に含めてくれない模様。どこにもそれらしい情報が無い…。

ただ、テクスチャを貼らない場合は blender と同様に出力してくれる模様。

対処としては…。colorタグの有無を調べて、もし無ければ、diffuse を RGBA = 1.0, 1.0, 1.0, 1.0 にでもしておく、みたいな感じだろうか。

座標系で悩む。 :

座標系の扱いも、ちと悩む。
  • blender は、右が +X、上が +Z、前が -Y。.dae には「Z_UP」の記述が入る。
  • Wings 3D は、右が +X、上が +Y、前が +Z。.dae には「Y_UP」の記述が入る。
   +Z              +Y
    |  +Y           |
    |  /            |
    | /             |
    |/              |
    +------ +X      +------ +X
                   /
                  /
                 /
               +Z
    blender         Wings 3D
まあ、これは blender が変わっていて、Wings 3D のほうが素直なのだけど。

blender がエクスポートした座標値やベクトルを DXRuby (DirectX) から使う場合、z と y を交換すればいいのかな…。Wings 3D の場合は、追加でz値の反転も必要になる、のかな。DirectX は、前が -Z らしいので。

更に、OpenGL から使う場合、DXRuby で扱う座標値やベクトルとは、zの向きを逆にしないと…。OpenGL は、前が +Z なので。
   +Y              +Y
    |  +Z           |
    |  /            |
    | /             |
    |/              |
    +------ +X      +------ +X
                   /
                  /
                 /
               +Z
    DirectX        OpenGL

三角形化してくれない。 :

blender は、daeエクスポート時のオプション項目に「三角形化」があるのだけど、Wings 3D のエクスポータには無い。故に、Wings 3D では、元々のモデルデータを「テッセレート」→「三角ポリゴン化」してからエクスポートしないといけない。

元のモデルデータを三角ポリゴンだらけに変換してしまうと、後から修正するのが面倒な状態に…。一々別名保存してバックアップを取ってから作業することになるのだろうか。

すべてがスムーズになる。 :

Wings 3D上の、ハードエッジ、ソフトエッジの指定が、エクスポートした .dae には反映されてないことに気づいた。滑らかに見えるように自動スムージングをかけると、全てのポリゴンがスムージング表示になってしまう。全部フラットにするか、全部スムーズにするか、二択なのか…。

ちともったいない。 :

なんとなくだけど、Wings 3D ってエクスポータが癌になってる気がしないでもない。かなり機能豊富なモデリングソフトなのに、エクスポータがバグってたり仕様が足りてなくて、他のソフトと連携しづらい点が痛いというか、実にもったいない。

いっそ Wings 3D ファイル形式がテキスト形式だったら、まだコンバータを作ってどうにか、等もあったのかもしれんけど、どうやらバイナリファイルっぽいし…。しかも Wings 3D は Erlang で書かれてるあたりが…。

なんだか世界が閉じてる印象を受けるソフトだなと。オープンソースなのに、変な話だけど。

以上、1 日分です。

過去ログ表示

Prev - 2017/03 - Next
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project