sub_set01へ戻る

名称 ・・・・・・・

確認用のShade上へのテスト描画

ルーチン名 ・・・・・・・

testDrawLine

スクリプトNo ・・・・・・・ sub_set01- 009
file名 ・・・・・・・ ScriptSet01.lzh
sub_set01のページからセットごとダウンロードしてください。
概略 ・・・・・・・

eVecSessen,eVecHousen,eVecJihouの結果をShade上にテスト描画する為のサブルーチンです。
他への汎用性はまったくありません

使用前提 ・・・・・・・

線形状(べジェ曲線)を選択して適切な引数を指定してから実行する。
引数に渡す Vec3,PtNo,tb を前もって用意しておく。
eVecSessen,eVecHousen,eVecJihouのいずれかでeVec(方向ベクトル)を確保していること。
上記のサブルーチンの引数に指定したtパラメータ値から、calcPosを使い座標値Posを確保しておく。

依存関係 ・・・・・・・

特に無し

直接的に関係するサブルーチンは無し。
間接的には
eVecSessen(sub_set01-006)
eVecHousen(sub_set01-007)
eVecJihou(sub_set01-008)のいずれかと

calcPos(sub_set-01-001)
を併用することになる。

引数説明 ・・・・・・・

eVec
Pos
PtNo
tb
L

(in)方向ベクトル。 eVecSessenなどの戻り値
(in)描画開始ポイントの座標値。 calcPosの戻り値
(in)PtNo番目〜PtNo+1番目のアンカーポイントまで計算される。
(in)ベジェパラメータ(値を表示するためだけに使う)
(in)描画する線分の長さ

戻り値説明 ・・・・・・・

なし

変数説明 ・・・・・・・

なし

注意点 ・・・・・・・

基本的にeVecSessen,eVecHousen,eVecJihouの結果をShade上で確認する為に作成したものなので汎用性は全くありません。
これを実行すると確認しやすいようにベジェ曲線に新たにポイントを補間するので曲線区間は変わってしまいます。同じ線形状で別の設定値で続けて確認したい場合は,事前に線形状のコピーを取って実行してください。

 
スクリプト
'----------------------------描画テストプロシージャ
sub testDrawLine(eVec,Pos,PtNo,tb,l)
'計算された接線、法線、次法線を確認するためにtest描画する
'戻値---無し
'引数---
' eVec   :(in)方向ベクトル
' Pos    :(in)描画開始ポイントの座標値
' PtNo   :(in)アンカーポイントの番号
' tb     :(in)ベジェパラメータ(値を表示するだけに使う)
' l      :(in)描画する線分の長さ

  '除算で分母がゼロになる場合の処理
  if eVec(0) or eVec(1) or eVec(2) then
    XShade.Message"eVec=( "&round(eVec(0)*100)/100&" , "_
     &round(eVec(1)*100)/100&" , "&round(eVec(2)*100)/100&" )"
    XShade.Message"Pos=( "&round(Pos(0)*100)/100&" , "_
     &round(Pos(1)*100)/100&" , "&round(Pos(2)*100)/100&" )"
  else
    XShade.Message"方向ベクトルがゼロベクトルなので描画できません。"
  end if

  '曲線上の指定されたベジェパラメータ位置にポイントを追加する
  XShade.InsertControlPoint(PtNo+tb)

  'ラインを描画する
  XShade.StartPolygon(0)
    XShade.AppendPoint Pos(0),Pos(1),Pos(2)
    XShade.AppendPoint Pos(0)+l*eVec(0),Pos(1)+l*eVec(1),Pos(2)+l*eVec(2)
  XShade.FinishPolygon()
  XShade.SelectSister 1
End Sub
使用例
  Dim NA,Vec3,PtNo
  Dim eVec,Pos,tb,L
  '-------------------ベジェ曲線でtを指定し、その点の接線の単位ベクトルを計算
'    (アンカーポイント番号PtNo〜PtNo+1の部分が対象)
  PtNo=0: tb=0.55: L=400
  eVec=eVecJihou(Vec3,PtNo,tb)
  if not IsArray(eVec) then exit sub
  Pos=calcPos(Vec3,PtNo,tb)
  Call testDrawLine(eVec,Pos,PtNo,tb,L)

sub_set01へ戻る