コンテンツにスキップ

「バイナリ空間分割」の版間の差分

出典: フリー百科事典『ウィキペディア(Wikipedia)』
削除された内容 追加された内容
Abionab (会話 | 投稿記録)
編集の要約なし
編集の要約なし
1行目: 1行目:

''''''{{lang-en-short|Binary space partitioning, BSP}}[[|]][[]][[]]'''BSP'''BSP tree[[ ()|]]

''''''{{lang-en-short|Binary space partitioning, BSP}}N[[|]](N-1)[[]][[]][[3]]'''BSP'''BSP tree[[ ()|]]

<!--


簡単に言えば、複雑な形状の多角形を凸多角形、すなわち 180°以下の角度の頂点のみで囲まれた小さい多角形に分割する。

簡単に言えば、複雑な形状の多角形を凸多角形、すなわち 180°以下の角度の頂点のみで囲まれた小さい多角形に分割する。

--><!--


BSP

-->



[[]]12



[[3]][[ ()|]][[CAD]][[]]3D[[]][[]]

他にも、[[CAD]]における図形処理、[[ロボット工学]]や3D[[コンピュータゲーム]]での[[衝突判定]]、その他の複雑な形状を扱うコンピュータアプリケーションなどといった応用がある。



== 概要 ==

== 概要 ==

コンピュータグラフィックスにおいては、シーンを正しくかつ素早く描画することが望ましい。シーンを正しく描画する単純な方法として[[画家のアルゴリズム]]がある。すなわち、背景から前景へと上に重ねるようにオブジェクトを描画していく方法である。しかし、この方法では後で隠れてしまう部分まで描画するなど、時間を浪費している面があり、また全てのオブジェクトが正しく描画されるわけではない。


Z[[]]


[[Zバッファ]]を使えば、画家のアルゴリズムでの描画順序決定のステップを省略してもシーンを正しく描画できるが、メモリを多く必要とするという問題がある。BSP木はオブジェクトを分割することで画家のアルゴリズムでZバッファなしでも正しく描画できるようにし、オブジェクトを[[ソート]]する手間を省くことができる。すなわち、簡単な木構造の走査によって正しい描画順序が得られる。また、重ね描きを削減するための visibility list などの他のアルゴリズムの基盤としても機能する。

[[Zバッファ]]を使えば、画家のアルゴリズムでの描画順序決定のステップを省略してもシーンを正しく描画できるが、メモリを多く必要とするという問題がある。BSP木はオブジェクトを分割することで画家のアルゴリズムでZバッファなしでも正しく描画できるようにし、オブジェクトを[[ソート]]する手間を省くことができる。すなわち、簡単な木構造の走査によって正しい描画順序が得られる。また、重ね描きを削減するための visibility list などの他のアルゴリズムの基盤としても機能する。


2016年11月18日 (金) 12:44時点における版


: Binary space partitioning, BSPN(N-1)3BSPBSP tree

12

CAD3D


Z

Z使BSPZ visibility list 

BSPBSPZZ

BSP3D使使BSP使 DOOM 使


2使使

2BSP3使2使

GF32
1. A 
2. A BC
3. B DE
4. D FG

BSP

BSP使BSP使BSP

BSP


BSP使

BSP[1]
void traverse_tree(bsp_tree* tree, point eye) {
    if (tree->empty())
        return;

    int location = tree->find_location(eye);
    if (location > 0) { // eye が location の前にある場合
        traverse_tree(tree->back, eye);
        display(tree->polygon_list);
        traverse_tree(tree->front, eye);
    } else if (location < 0) { // eye が location の後ろにある場合
        traverse_tree(tree->front, eye);
        display(tree->polygon_list);
        traverse_tree(tree->back, eye);
    } else { // eye が分割超平面上にある場合
        traverse_tree(tree->front, eye);
        traverse_tree(tree->back, eye);
    }
}

その他の空間分割構造

BSP木は空間を各ノードで2つの部分領域に分割していく。これに関連して、4つに分割する四分木や8つに分割する八分木がある。

関係表
名前 p s
バイナリ空間分割 1 2
四分木 2 4
八分木 3 8

p 使s 

BSP使23使kd

[2]


1969 Schumacker 

1980 Fuchs  Schumacker 使BSP[3]

1983 Fuchs BSP

1987 Thibault  Naylor BSP使 Constructive Solid Geometry (CSG) 

1990 Teller  Séquin 2 Potentially Visible Set (PVS) 

1991 Gordon  Chen BSP使[4]John Carmack  DOOM 使

1992 Teller 3DPVS

1993 Hayder Radha BSP使BSPLPL (Least-Square-Error Partitioning Line transform) Radha (RD)BSP使

  1. ^ Binary Space Partition Trees in 3d worlds
  2. ^ AN INVESTIGATION INTO REAL-TIME 3D POLYGON RENDERING USING BSP TREES. Andrew Steven Winter. April 1999. available online
  3. ^ H. Fuchs, Z. M. Kedem and B. F. Naylor. “On Visible Surface Generation by A Priori Tree Structures.” ACM Computer Graphics, pp 124–133. July 1980.
  4. ^ S. Chen and D. Gordon. “Front-to-Back Display of BSP Trees.” IEEE Computer Graphics & Algorithms, pp 79–85. September 1991.

参考文献

  • Mark de Berg, Marc van Kreveld, Mark Overmars, and Otfried Schwarzkopf (2000年). Computational Geometry (2nd revised edition ed.). Springer-Verlag. ISBN 3-540-65620-0  Section 12: Binary Space Partitions: pp.251–265. Describes a randomized Painter's Algorithm.
  • H. Radha, "Efficient Image Representation using Binary Space Partitioning Trees.", Ph.D. Thesis, Columbia University, 1993.
  • H. Radha, M. Vetterli, and R. Leoonardi, “Image Compression Using Binary Space Partitioning Trees,” IEEE Transactions on Image Processing, vol. 5, No.12, December 1996, pp. 1610-1624.
  • H. Radha, M. Vetterli, and R. Leoonardi, “Fast Piecewise Constant Approximation of Images,” SPIE Visual Communications and Image Processing 1991, vol. 1605, pp. 475-486.

外部リンク