STLデータを表示するプログラムです。
いま法線ベクトルを設置したいと考えていますが方法がわからず詰まっています。
よろしくお願いします
[
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/11/14 07:56
回答2件
0
masaya_ohashiさんの回答を拝見し、質問者さんがしたいことの想像がついたので少しコメントしてみます。
面法線ベクトルしか情報がないSTLからOpenGLで表示する際に「面法線を指定する」方法と「頂点法線をして基数」方法があると思います。
###面法線を指定する方法
これはSTLにある法線をそのまま指定すればよいと思います。こうすると当然ながらエッジ(メッシュの辺)は滑らかにはならず文字通りポリゴンが平面の集まりとして表示されます。
###頂点法線を指定する方法
三角メッシュ上の任意の点の法線は3つの頂点に対するその点の位置に従い、3つの頂点からのなんらかの加重平均的な手法で計算すると思います。こうするとスムーズな形状のシェーディングができるわけですが、隣り合ったメッシュのエッジがスムーズに見えるためには特定の頂点の頂点法線を、その頂点を含む全てのメッシュの面法線から計算する(※1)ことになると思います(masaya_ohashiさんの回答にある自力計算の方)。
ただ(※1)の具体的な方法は一種類ではなくいくつかの考え方があると思います。
(1) 単純に頂点を共有するメッシュの面法線を平均する
OpenGLが正規化をしてくれたような気もしますので単純に足せばいいのかも知れません。
(2) 加重平均をとる
これも一種類ではないですが、例えばメッシュの面積に応じた加重平均を取るなどとすると割合自然な形状に見える気がします。
「メッシュ 頂点法線 計算」で検索したところ下記のPDFに割合丁寧に加重平均の具体的手法の解説がありました。この解説では「メッシュの面積に応じた加重平均」が例として述べられています。
http://kanamori.cs.tsukuba.ac.jp/jikken/inner/triangle_mesh.pdf
投稿2017/11/14 02:25
総合スコア18394
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/11/14 02:27
2017/11/14 05:36
0
ベストアンサー
STLファイルというのを知らなかったので調べてみましたが、面法線しか持たないデータ形式のようです。であれば、データから自ら頂点インデックス方式に変換する、またはなんらかのツールでSTLファイルを頂点インデックス対応の別の形式に変換するという二通りがあるかと思います。
自力で変換
- STLreader::countTrianglesでポリゴン数をカウント、必要な数のTriangleを用意する
- stlreader.readXXXで実際のポリゴンデータを取得する
- 頂点インデックス方式用の頂点の配列を1つ、それとインデックス用のintの配列、何個コピーしたかをカウントする変数を用意する
- 元データのTriangleの中の各頂点を、頂点インデックス方式用の頂点配列にコピー、インデックス用配列にインデックスを追加、コピーカウントを+1する。ただし、すでにコピーされている頂点の中にxyzが一致するものがある場合、頂点をコピーせず、カウントも増やさず、インデックスだけを追加する。
- 出来上がった頂点インデックス方式の頂点と、インデックスから頂点法線用のベクトルデータを計算する
データをツールで変換
これは自分で探すしかありません。無料のもので済むならそれでいいですし、有料のものが必要なら自分で買うひつようがあります。STL形式は面法線しか対応していませんが、OBJ形式やX形式等にツールを通して変換すれば、もしかしたら頂点インデックス形式に変換してくれるかもしれません。
投稿2017/11/14 00:51
総合スコア9206
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/11/14 01:40
2017/11/14 01:43
2017/11/14 02:01
2017/11/14 02:16
2017/11/14 05:37
2017/11/14 05:37
2017/11/14 05:44
2017/11/14 05:46
2017/11/14 05:47
2017/11/14 05:48
2017/11/14 05:55
2017/11/14 06:04
2017/11/14 06:23
2017/11/14 06:30
2017/11/14 06:36
2017/11/14 06:43 編集
2017/11/14 06:45
2017/11/14 06:49
2017/11/14 06:52
2017/11/14 06:54
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。