Transform Propertiesの効果を頂点データに反映させる方法

  • このフォーラムに新しいトピックを立てることはできません
  • このフォーラムではゲスト投稿が禁止されています

投稿ツリー



前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2009/5/12 21:15
mona2009  新米   投稿数: 7
またまた初歩的な質問で申し訳ございません。

SphereオブジェクトをTransform Propertiesでスケーリングしてから
以下のプログラムで頂点を出力したのですが、出力された頂点データはスケーリングされていない状態の球でした。
以下のプログラムだと頂点データはTransform Propertiesの影響を受けないようです。
Transform Propertiesの効果を頂点データに反映させる方法はないものでしょうか。

(前略)
     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")
(後略)

投票数:6 平均点:6.67
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2009/5/12 22:21
uimac  常連   投稿数: 49
引用:
SphereオブジェクトをTransform Propertiesでスケーリング
とあるように、meshはスケーリングされていません。

以下のどれかで可能と思います。

1.エディットモードで拡大する
2.Object.getSize(space)をmeshの頂点とかに上手く掛ける
3.オブジェクトモードで選択してCtrl-A[Scale and Rotation to Obdata]

3が一番お手軽なのですが、これをやる場合、shapekey付きのmeshには出来ません。

…が、私改造のBlenderなら出来ます(宣伝
投票数:9 平均点:6.67
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2009/5/13 0:18
mona2009  新米   投稿数: 7
超早速のご返信感謝いたします。

なるほど。3の方法が一般的そうですね。

2がスマートだと思いますけどObject.getSize(space)の情報だけではやりにくそうですね。
Meshの頂点座標を全て参照してMeshの大きさを求めて、Object.getSize(space)をその大きさで割った値をかければいいかも。

Transform PropertiesがAPIで取得できればいいんですけど
投票数:5 平均点:4.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2009/5/13 0:45
uimac  常連   投稿数: 49
Object.getSize(space)で返ってくるのは、AABBじゃなくて、
TransformPropertiesの値とか返ってきますよ。

親オブジェクト無し
import Blender
print Blender.Object.GetSelected()[0].getSize('localspace') #default
親オブジェクト有り
import Blender
print Blender.Object.GetSelected()[0].getSize('worldspace')

投票数:9 平均点:5.56
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2009/5/13 1:11
mona2009  新米   投稿数: 7
説明不足でした。
Transform PropertiesのScaleX, ScaleY, ScaleZを取得したいってことです。
たぶん、Object.getSize(space)で返って来るのはTransform PropertiesのDimX, DimY, DimZだと想像しています。
投票数:9 平均点:3.33
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2009/5/13 1:17
uimac  常連   投稿数: 49
コピペで実行できるので、想像じゃなくて、やってみてください。
投票数:7 平均点:5.71
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2009/5/13 21:57
mona2009  新米   投稿数: 7
あ、本当にScaleX, ScaleY, ScaleZ が返ってきますね。

http://www.blender.org/documentation/243PythonDoc/Object.Object-class.html#getSize

> Returns the object's size.

と書かれているのでDimの方が返ってくると思っていました。

おかげさまでこの件解決いたしました。
ありがとうございました。
投票数:8 平均点:5.00

  条件検索へ


ログイン

ユーザ名:

パスワード:



パスワード紛失

クイックリンク

2021/07/01版
●Blender.org
BlenderFoundation
- Blenderのダウンロード
- 公式チュート等
- 公式マニュアル(和訳)

●ニュース(英文)
BlenderNation

●Blenderコミュニティ
blenderartists.org

●Blender Q&A
- Blender Stack Exchange

●テストビルド
Buildbot(自動生成)


●開発関連
公式開発サイト
Blender開発blog
Blender Wiki