Pythonスクリプトで法線を出力したけどうまくいかない
- このフォーラムに新しいトピックを立てることはできません
- このフォーラムではゲスト投稿が禁止されています
4件表示
(全4件)
すべてのコメント一覧へ
投稿ツリー
-
Pythonスクリプトで法線を出力したけどうまくいかない
(mona2009, 2009/5/2 10:13)
-
Re: Pythonスクリプトで法線を出力したけどうまくいかない
(uimac, 2009/5/2 10:33)
-
Re: Pythonスクリプトで法線を出力したけどうまくいかない
(mona2009, 2009/5/2 12:31)
-
Re: Pythonスクリプトで法線を出力したけどうまくいかない
(mona2009, 2009/5/12 21:07)
Pythonスクリプトで法線を出力したけどうまくいかない
msg# 1
mona2009
投稿数: 7
初歩的な質問で申し訳ございません。
Pythonスクリプトで法線を出力したくて以下のようなスクリプト(某所からのパクリに法線出力を追加)を書いたのですが、
このスクリプトで新規作成時に表示されるCubeを三角形に分割して、頂点と法線を出力したら奇妙な法線が出力されます。
頂点Cube_vertDataは特に問題ないのですが、法線Cube_normalDataに関しては異常な値が出力されます。
スクリプトの使い方が間違っているのでしょうか。
Pythonスクリプトで法線を出力したくて以下のようなスクリプト(某所からのパクリに法線出力を追加)を書いたのですが、
(前略)
file = open(filename, 'wb')
scn = Blender.Scene.GetCurrent()
object = scn.objects.active
if not object or object.type != 'Mesh':
BPyMessages.Error_NoMeshActive()
return
mesh = object.getData(mesh=True)
file.write("static GLfloat " + object.name + "_vertData[] = {\n")
for face in mesh.faces:
file.write("\t" + str(face.verts[0].co.x) + ", " + str(face.verts[0].co.y) + ", " + str(face.verts[0].co.z) + ", ")
file.write(str(face.verts[1].co.x) + ", " + str(face.verts[1].co.y) + ", " + str(face.verts[1].co.z) + ", ")
file.write(str(face.verts[2].co.x) + ", " + str(face.verts[2].co.y) + ", " + str(face.verts[2].co.z) + ",\n")
file.write("};\n\n")
file.write("static GLfloat " + object.name + "_normalData[] = {\n")
for face in mesh.faces:
file.write("\t" + str(face.no.x) + ", " + str(face.no.y) + ", " + str(face.no.z) + ",\n") # 法線出力
file.write("};\n\n")
(後略)
このスクリプトで新規作成時に表示されるCubeを三角形に分割して、頂点と法線を出力したら奇妙な法線が出力されます。
static GLfloat Cube_vertData[] = {
1.0, 0.999999940395, -1.0, 1.0, -1.0, -1.0, -1.00000011921, -0.999999821186, -1.0,
1.0, 0.999999940395, -1.0, -1.00000011921, -0.999999821186, -1.0, -0.999999642372, 1.00000035763, -1.0,
1.00000047684, 0.999999463558, 1.0, 1.0, 0.999999940395, -1.0, -0.999999642372, 1.00000035763, -1.0,
1.00000047684, 0.999999463558, 1.0, -0.999999642372, 1.00000035763, -1.0, -0.999999940395, 1.0, 1.0,
-1.00000011921, -0.999999821186, -1.0, -1.00000035763, -0.999999642372, 1.0, -0.999999940395, 1.0, 1.0,
-1.00000011921, -0.999999821186, -1.0, -0.999999940395, 1.0, 1.0, -0.999999642372, 1.00000035763, -1.0,
1.0, -1.0, -1.0, 0.999999344349, -1.00000059605, 1.0, -1.00000011921, -0.999999821186, -1.0,
0.999999344349, -1.00000059605, 1.0, -1.00000035763, -0.999999642372, 1.0, -1.00000011921, -0.999999821186, -1.0,
1.0, 0.999999940395, -1.0, 1.00000047684, 0.999999463558, 1.0, 1.0, -1.0, -1.0,
1.00000047684, 0.999999463558, 1.0, 0.999999344349, -1.00000059605, 1.0, 1.0, -1.0, -1.0,
1.00000047684, 0.999999463558, 1.0, -0.999999940395, 1.0, 1.0, 0.999999344349, -1.00000059605, 1.0,
-0.999999940395, 1.0, 1.0, -1.00000035763, -0.999999642372, 1.0, 0.999999344349, -1.00000059605, 1.0,
};
static GLfloat Cube_normalData[] = {
0.0, 0.0, -1.0,
0.0, -0.0, -1.0,
2.08616299346e-07, 1.0, 2.38418536469e-07,
2.68220873068e-07, 1.0, 1.78813976959e-07,
-1.0, 2.08616299346e-07, -1.19209317972e-07,
-1.0, 2.38418579102e-07, -1.49011583517e-07,
-8.94069600577e-08, -1.0, -2.98023252299e-07,
-4.76837215047e-07, -1.0, 8.94069032142e-08,
1.0, 0.0, -2.38418579102e-07,
1.0, -5.66244125366e-07, 3.27825375734e-07,
-0.0, -0.0, 1.0,
0.0, -0.0, 1.0,
};
頂点Cube_vertDataは特に問題ないのですが、法線Cube_normalDataに関しては異常な値が出力されます。
スクリプトの使い方が間違っているのでしょうか。
投票数:5
平均点:8.00
Re: Pythonスクリプトで法線を出力したけどうまくいかない
msg# 1.1
uimac
投稿数: 49
mona2009さんこんにちは。
例えば、2.08616299346e-07 は 2.08616299346 x 10のマイナス7乗なので
0.000000208… で、およそ0です。
Blender内部で単精度(Float)の値になっているので
10のマイナス6乗(1.0e-06)くらいまでは、だいたいあってます。
例えば、2.08616299346e-07 は 2.08616299346 x 10のマイナス7乗なので
0.000000208… で、およそ0です。
Blender内部で単精度(Float)の値になっているので
10のマイナス6乗(1.0e-06)くらいまでは、だいたいあってます。
投票数:4
平均点:0.00
Re: Pythonスクリプトで法線を出力したけどうまくいかない
msg# 1.1.1
mona2009
投稿数: 7
早速のご返信ありがとうございます。
指数を考慮せずに早とちりしてしまいました。
確かに単精度ということを考えるとこんなものですね。
無駄な質問をしてしまいました。申し訳ございませんでした。
指数を考慮せずに早とちりしてしまいました。
確かに単精度ということを考えるとこんなものですね。
無駄な質問をしてしまいました。申し訳ございませんでした。
投票数:6
平均点:5.00
Re: Pythonスクリプトで法線を出力したけどうまくいかない
msg# 1.2
mona2009
投稿数: 7
補足です。
法線データをOpenGLで使うつもりだったので、頂点毎に法線を求めた方が良いと思われます。
こうするべきでした(三角ポリゴンの場合です)
法線データをOpenGLで使うつもりだったので、頂点毎に法線を求めた方が良いと思われます。
こうするべきでした(三角ポリゴンの場合です)
for face in mesh.faces:
file.write("\t" + str(face.verts[0].no.x) + ", " + str(face.verts[0].no.y) + ", " + str(face.verts[0].no.z) + ", ")
file.write(str(face.verts[1].no.x) + ", " + str(face.verts[1].no.y) + ", " + str(face.verts[1].no.z) + ", ")
file.write(str(face.verts[2].no.x) + ", " + str(face.verts[2].no.y) + ", " + str(face.verts[2].no.z) + ",\n")
file.write("};\n\n")
投票数:7
平均点:2.86
4件表示
(全0件)
すべてのコメント一覧へ
ログイン
クイックリンク
2021/07/01版
●Blender.org
BlenderFoundation
- Blenderのダウンロード
- 公式チュート等
- 公式マニュアル(和訳)
●ニュース(英文)
BlenderNation
●Blenderコミュニティ
blenderartists.org
●Blender Q&A
- Blender Stack Exchange
●テストビルド
Buildbot(自動生成)
●開発関連
公式開発サイト
Blender開発blog
Blender Wiki
●Blender.org
BlenderFoundation
- Blenderのダウンロード
- 公式チュート等
- 公式マニュアル(和訳)
●ニュース(英文)
BlenderNation
●Blenderコミュニティ
blenderartists.org
●Blender Q&A
- Blender Stack Exchange
●テストビルド
Buildbot(自動生成)
●開発関連
公式開発サイト
Blender開発blog
Blender Wiki