2013年04月28日

さくらのブログで勝手に内容が変更されてしまう

さくらのブログは seesaa ブログを使ってるらしいんだけど、
seesaa の javascript が余計なことをしてブログの文章が勝手に変更されるの。
具体的には><が勝手にパースされてHTMLタグとして解釈されてしまって HTML 文法に関する記事が書けない!
広告とか入れるのはいいけどそういうのは大変困るよ!

ブログ設定だとかHTMLだとかいろいろいじっても全然治らない。うわーと思っていろいろやったんだけど、
「設定」→「広告設定」→「広告の種類」を「記事下広告のみ」
にしたら直った気がする。

やっぱ広告って駄目だな!!!!!!!!!!!!!!!!!!!!!!!!!
posted by k_yama at 02:11 | Comment(0) | 備忘録

Canvas に描いた画像が勝手に拡大縮小されてしまう

Canvas に drawImage しようとしたところ何度描いても描いても勝手に拡大縮小されてしまった。

canvas の style で width, height を指定した場合、カンバス全体を拡大縮小して style の width, height に合わせるようだ。
300px×300pxの canvas に、
この画像
moto.jpg
Lake_Midori_in_Yamanashi_Japan.jpg
を100px×100pxで描こうとした場合、

<canvas  id="drop_canvas" width="300px" height="300px"  style="background-color:lightgray;">
とすると
prop.png
このようになり、

<canvas  id="drop_canvas" style="width:300px;height:300px;background-color:lightgray;">
とすると
style.png
こうなってしまう。

この時に canvas 上で「右クリック」→「画像だけを表示」すると、
honmono.png
この画像が表示される。ので、デフォルトで作られたカンバスに描画され、その後に style が適用されているのでしょう。
(同じページ内に色々別の要素がありますが、省いています。ウインドウのサイズとか canvas 以外の要素の存在で結果は変わってくると思います。)


詳しい人にこの話をしたら「当然だろ」と言われるんでしょうけど(;´д`)

posted by k_yama at 01:07 | Comment(0) | 備忘録

2013年03月13日

Blender でマテリアルごとにオブジェクトを分割し、使われていないマテリアルは削除する

Blender は一つのオブジェクトに対し複数のマテリアルを設定することができますが、Collada では一つのオブジェクトに一つのマテリアルしか設定できません。
もしくはフォーマット上設定できたとしても、流通している Collada Importer が対応してないのではないかと思います。
そのあたりの仕様は余りよく勉強していません(;´д`)
Blender による Collada のエクスポートには不満が大層聞こえてくるのですが、一つにはこの問題があるのではないかと思います。

たとえばこの3Dモデル
rendered.png
http://3dmodels.katorlegaz.com/transport_auto/0187/index.php
CC-BY (c) 2003-2013 Andrew Kator & Jennifer Legaz

Blender によりそのまま Collada にエクスポートすると
下のようにライトに穴が開いちゃったりガラスが真っ青になっちゃったりします。
(three.jsを用いて Firefox で表示しています)
collada_dame.png

オブジェクトをマテリアルごとに分割し、
かつ一つのオブジェクトにつきマテリアルを一つだけ設定するとこのような感じ・・・
collada_yoshi.png
(;´д`)・・・フロントガラス部分は穴が開いているわけではなくガラスの透明度が高すぎるだけです。
(実はさっきのヘッドライトも穴が開いていたわけではなく、ガラス用のマテリアルが反射板部分まで適用されちゃっていたのでしょう)
レンダラによって色々違うようですね。透明度をいじってあげるとちゃんと見えます・・・
まあ、処理前よりはましだと言うのは分かっていただけるかと思います。
この処理は手作業でやってもいいと思いますが、面倒なのでスクリプトを書きました。
商用非商用可です。ご利用下さい。

pycon.png
Python Console を表示し、以下のスクリプトをコピペして下さい。


import bpy
import bmesh
import math
import mathutils

bpy.ops.object.select_all( action='DESELECT');
for mm in bpy.context.selectable_objects:
mm.select = True;
print(mm.name);
for cc in bpy.context.selected_objects:
if(cc.type == "MESH"):
used = dict();
mats = cc.data.materials;
if(len(mats) > 1):
for ii in cc.data.polygons:
used[mats[ii.material_index].name] = 100;
if(len(used) > 1):
bpy.ops.mesh.separate(type='MATERIAL');
mm.select = False;
bpy.ops.object.select_all( action='DESELECT');

bpy.ops.object.select_all( action='DESELECT');
for mm in bpy.context.selectable_objects:
mm.select = True;
print(mm.name);
for cc in bpy.context.selected_objects:
if(cc.type == "MESH"):
used = dict();
mats = cc.data.materials;
usedindex = 0;
if(len(mats) > 1):
for ii in cc.data.polygons:
used[mats[ii.material_index].name] = 100;
usedindex = ii.material_index;
plen = len(mats);
for i in range(plen-1, -1, -1):
if(i != usedindex):
mm.active_material_index = i;
bpy.context.scene.objects.active = mm;
bpy.ops.object.material_slot_remove();
mm.select = False;



バグ等がありましたら、コメントや twitter で教えてください。


タグ:Blender collada
posted by k_yama at 01:55 | Comment(0) | 備忘録