Ryoichi Mizuno - Scientific Computer Graphics | English |


あなたの寄付と広告収入は今後の非営利な科学的研究に使われます。   blank

Bezier Surface

1 仕様

  • n×m次ベジエ曲面を描画する
  • ベジエ曲面の次数および分割数を任意に設定することができる
  • 視点および視野を任意に変更することができる
  • 制御点をユーザの直感に基づき任意に移動することができる
  • ソフトウェアにより透視投影および陰面 (線)消去を行っている
  • 陰面 (線)消去には奥行ソート法を用いているので正常に描画されない形状もある

2 開発言語およびグラフィックライブラリ

  • C++ (ANSI)
  • OpenGL (GLUT for Win32 version 3.7.3, GLUI for Win32 version 2.0 beta)

3 作動環境

3.1 バイナリ

  • bs.exe (binary / 188KB)
    → Windows 95 SR2, Windows 98, Windows 98 SE, Windows ME, Windows NT4.x, Windows 2000, Windows XP
    glut32.dll (DLL / 160KB)が必要

3.2 ソースコード

  • HTML版
    → UNIX (X Window System), Windows 95/98/ME/NT/2000/XP, OS/2, Mac OS, BeOS
    X Window Systemではglx.hのincludeが必要

4 詳細な仕様

図1: 実行画面 (Windows XP Professionalで実行, 以降すべて)

4.1 制御点の移動 (図1A)

  1. 制御点の近傍 (半径2.5ピクセル以内)をクリックすることにより制御点を選択できる (図2)
  2. (半径2.5ピクセル以内に複数の制御点がある場合は最近傍の制御点が選択される)
  3. 選択された制御点は緑色で描画される (図2b)
  4. ドラッグにより制御点を移動できる
  5. 移動中は制御点および制御点を連結する線分のみが再描画される (図2b)
  6. リリースすることで制御点の移動先を決定できる
  7. 移動先の制御点のワールド座標は移動前の奥行値を保存する (このことによりユーザの直感に基づいた制御点の移動を実現する)
  8. 移動先の制御点のワールド座標に基づきベジエ曲面が再描画される (図2c)
  9. 制御点が描画されていない場合およびアニメーション中は制御点を移動することはできない
(a) 元形状 (平面)
(b) 制御点の移動
(c) ベジエ曲面の再描画
図2: 制御点の移動 (次数: 3×3, 分割数: 25×25)

4.2 ベジエ曲面の次数の変更 (図1a)

  1. スピナーを上下にクリックアンドドラッグすることによりベジエ曲面の次数を変更することができる (図3)
  2. 一方向に関するベジエ曲面の次数の下限および上限はそれぞれ1と100とする
  3. ベジエ曲面の次数を変更すると制御点は元形状にリセットされる
  4. 変更されたベジエ曲面の次数に基づきベジエ曲面が再描画される
(a) 次数: 3×3
(b) 次数: 5×5
(c) 次数: 10×10
図3: ベジエ曲面の次数の変更 (元形状: 単純凸曲面, 分割数: 25×25)

4.3 ベジエ曲面の分割数の変更 (図1b)

  1. スピナーを上下にクリックアンドドラッグすることによりベジエ曲面の分割数 (面の細かさ)を変更することができる (図4)
  2. 一方向に関するベジエ曲面の分割数の下限および上限はそれぞれ2と300とする
  3. 変更されたベジエ曲面の分割数に基づきベジエ曲面が再描画される
(a) 分割数: 4×4
(b) 分割数: 8×8
(c) 分割数: 16×16
図4: ベジエ曲面の分割数の変更 (元形状: 単純凸曲面, 次数: 10×10)

4.4 視距離の変更 (図1c)

  1. スピナーを上下にクリックアンドドラッグすることにより画角および視野半径を変更することができる (図5)
  2. 視距離は画角および視野半径より計算され直接変更することはできない
  3. 画角は度数法で整数型とし視野半径は浮動小数型とする
  4. 画角の下限および上限はそれぞれ1と180とする
  5. 視野半径の下限および上限はそれぞれ0.0fと1000.0fとする
  6. 変更された視距離に基づきベジエ曲面が再描画される
(a) 画角: 25 [deg.]
(b) 画角: 50 [deg.]
(c) 画角: 100 [deg.]
図5: 視距離の変更 (元形状: 単純凸曲面, 次数: 10×10, 分割数: 50×50, 視野半径: 50.0f)

4.5 描画するオブジェクトの選択 (図1d)

4.5.1 制御点および制御点を連結する線分 (Control Points)

  • チェックボックスにチェックすることにより制御点および制御点を連結する線分を描画する
  • 制御点は一辺が5.0fピクセルの黒の正方形として描画される
  • 制御点を連結する線分は太さ1.0fピクセルの黒の線分として描画される
  • 制御点および制御点を連結する線分は陰面 (線)消去の影響を受けない

4.5.2 ベジエ曲面のワイヤーフレーム (Bezier wires)

  • チェックボックスにチェックすることによりベジエ曲面のワイヤーフレームを描画する
  • ベジエ曲面のワイヤーフレームは太さ1.0fの線分として描画される
  • ベジエ曲面のワイヤーフレームはワールド座標系y軸上方の無限遠から見たときの表と裏をそれぞれ青と赤で描画する
  • ベジエ曲面のワイヤーフレームはベジエ曲面が描画されている場合および陰線消去が有効な場合に陰線消去される

4.5.3 ベジエ曲面 (Bezier surfaces)

  • チェックボックスにチェックすることによりベジエ曲面を描画する
  • ベジエ曲面の色はワールド座標系z軸上方の無限遠から見たときの表と裏で区別される
  • 表のベジエ曲面はワールド座標系におけるz座標が大きいほど暖色で小さいほど寒色で描画される
  • 裏のベジエ曲面はワールド座標系におけるz座標が大きいほど寒色で小さいほど暖色で描画される
  • ベジエ曲面の色の計算に用いられるワールド座標系におけるy座標の上限と下限はそれぞれ-50.0fと50.0fとしそれを超える値はそれぞれ上限と下限に切り詰められる
  • ただしこの上限と下限はベジエ曲面の色の計算のみに有効で実際のワールド座標系におけるy座標が切り詰められることはない
  • ベジエ曲面は無条件に陰面消去される

4.6 陰線消去の有効化 (図1e)

  • チェックボックスにチェックすることにより陰線消去を有効にする (図6)
  • チェックボックスはベジエ曲面のワイヤーフレームが描画されかつベジエ曲面が描画されていない場合に有効である
(a) 陰線消去無効
(b) 陰線消去有効
図6: 陰線消去の有効化 (元形状: 正弦波曲面, 次数: 10×10, 分割数: 50×50)

4.7 元形状の選択 (図1f)

  • ラジオボタンを選択することにより単純凸曲面 (図7a), 正弦波曲面 (図7b), 平面 (図7c)を描画する
  • 初期状態 (制御点を移動していない状態)での制御点のワールド座標系におけるx, y, z座標それぞれの最大の差は100.0f (-50.0f〜50.0f)である
(a) 単純凸曲面
(b) 正弦波曲面
(c) 平面
図7: 元形状 (次数: 10×10, 分割数: 50×50)

4.8 視点の回転 (図1g)

  1. トランスレーションをクリックアンドドラッグすることにより視点を回転させることができる
  2. ただし注視点はワールド座標系の原点とする (固定)
  3. 横方向にクリックアンドドラッグすることにより方位角 (theta)を変更する
    縦方向にクリックアンドドラッグすることにより仰角 (phi)を変更する
  4. 方位角 (theta)と仰角 (phi)は度数法で整数型とする

4.9 ズーム (図1h)

  1. トランスレーションをクリックアンドドラッグすることにより視点と注視点の距離を変更しズームイン / アウトすることができる (図8)
  2. ただし注視点はワールド座標系の原点とする (固定)
  3. 上方向にクリックアンドドラッグすることによりズームアウトする
    下方向にクリックアンドドラッグすることによりズームインする
  4. 視点と注視点の距離は浮動小数型とする
(a) ズームイン
(b) 元形状
(c) ズームアウト
図8: ズーム (元形状: 正弦波曲線, 次数: 10×10, 分割数: 50×50)

4.10 手動またはアニメーションの選択 (図1i)

  • ラジオボタンを選択することにより手動 (Manual)またはアニメーションを選択することができる
  • アニメーションを選択した場合視点の回転およびズームは無効となる
  • アニメーションには方位角方向の回転 (theta rotation), 仰角方向の回転 (phi rotation), 方位角および仰角方向の回転 (theta+phi rotation) (図9)がある
  • アニメーション中はベンチマークが有効になり描画速度を計算する
図9: 方位角および仰角方向の回転 (theta+phi rotation)のアニメーション
(元形状: 単純凸曲面, 次数: 10×10, 分割数: 50×50)
(アニメーションGIFのため劣化している)

4.11 ベンチマーク (図1j)

  • アニメーション中に描画速度を表示する
  • 描画速度はアニメーションが中止された場合 (手動に切り替えられた場合), 描画するオブジェクトが変更された場合, 陰線消去が有効または無効になった場合に0.0fにリセットされる
  • 描画速度はfpsで浮動小数型とする

5 既知のバグまたは不備

  • アニメーション中にGLUIよりメインウィンドウにクリックアンドドラッグするとフォーカスがGLUIに移動する

参考文献

  1. 技術系CG標準テキストブック編集委員会, コンピュータグラフィックス <技術系CG標準テキストブック>, CG-ARTS協会 (平成7年).
  2. Toby Howard, "Computer Graphics Modelling and Rendering 3: Curves and Surfaces", Lecture PPT of The University of Manchester, 2002.
    | PDF |

Ryoichi Mizuno - Scientific Computer Graphics


バイナリおよび本文章は無断で頒布することができる
ソースコードは閲覧することはできるが無断で頒布または改変することはできない
ただしglx.hのincludeはこの限りではない

作成日: 2002/01/29, 更新日: 2004/02/18, 2005/03/09, 2005/04/23
本ページは英語版に移行し, 原則的に更新されない (2005/04/27)

Copyright (c) 2002 Ryoichi Mizuno, All Rights Reserved.