コンテンツにスキップ

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

出典: フリー百科事典『ウィキペディア(Wikipedia)』
削除された内容 追加された内容
編集の要約なし
 
(6人の利用者による、間の7版が非表示)
1行目: 1行目:

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

{{_ruby使|''''''||{{lang-en-short|binary space partitioning}}BSP}}N[[|]](N-1)[[]][[3]]'''BSP'''BSP tree[[ ()|]]

<!--

<!--

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

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

17行目: 17行目:

欠点は、事前処理に時間がかかる点で、そのためBSP木上で移動するオブジェクトを直接実装するのは困難であり、効率が悪い。その場合、BSP木とZバッファを併用し、背景となるシーン上でドアやモンスターといった動くオブジェクトをZバッファで正しくマージする。

欠点は、事前処理に時間がかかる点で、そのためBSP木上で移動するオブジェクトを直接実装するのは困難であり、効率が悪い。その場合、BSP木とZバッファを併用し、背景となるシーン上でドアやモンスターといった動くオブジェクトをZバッファで正しくマージする。



BSP木は3D[[コンピュータゲーム]]でよく使われ、特に[[ファーストパーソン・シューティングゲーム]]で室内環境を描画する際に使われる。BSPデータ構造を最初に使ったゲームとして ''[[DOOM]]'' がある。他にも[[レイトレーシング]]や[[当たり判定]]に使われる。

BSP木は3D[[コンピュータゲーム]]でよく使われ、特に[[ファーストパーソン・シューティングゲーム]]で室内環境を描画する際に使われる。BSPデータ構造を最初に使ったゲームとして[[DOOM]] がある。他にも[[レイトレーシング]]や[[当たり判定]]に使われる。



== 生成 ==

== 生成 ==

37行目: 37行目:

[[]][[]]BSP<ref>[http://web.cs.wpi.edu/~matt/courses/cs563/talks/bsp/document.html Binary Space Partition Trees in 3d worlds]</ref>

[[]][[]]BSP<ref>[http://web.cs.wpi.edu/~matt/courses/cs563/talks/bsp/document.html Binary Space Partition Trees in 3d worlds]</ref>


<source lang="c">

<syntaxhighlight lang="ada">

void traverse_tree(bsp_tree* tree, point eye) {

procedure Tree_traverse (tree:bsp_tree, eye:point) is

begin

if (tree->empty())

if not Tree_isEmpty (tree) then

return;

constant location : integer = Tree_getLocation (tree, eye) ;



-- eye が location のにある場合

int location = tree->find_location(eye);

if (location > 0) { // eye location の前にある場合

if 0 < location then

traverse_tree(tree->back, eye);

Tree_traverse (tree.back, eye) ;

display(tree->polygon_list);

display (tree.polygon_list) ;

traverse_tree(tree->front, eye);

Tree_traverse (tree.front, eye)


} else if (location < 0) { // eye が location の後ろにある場合

-- eye が location の後ろにある場合

traverse_tree(tree->front, eye);

else if location < 0 then

display(tree->polygon_list);

traverse_tree(tree->back, eye);

Tree_traverse (tree.front, eye) ;

display (tree.polygon_list) ;

} else { // eye が分割超平面上にある場合

traverse_tree(tree->front, eye);

Tree_traverse (tree.back, eye)


traverse_tree(tree->back, eye);

-- eye が分割超平面上にある場合

}

else

}

Tree_traverse (tree.front, eye) ;

</source>

Tree_traverse (tree.back, eye)

end if ;

end if ;

end

</syntaxhighlight>



== その他の空間分割構造 ==

== その他の空間分割構造 ==

104行目: 110行目:

{{木構造 (データ構造)}}

{{木構造 (データ構造)}}



{{Normdaten}}

{{DEFAULTSORT:はいなりくうかんふんかつ}}

{{DEFAULTSORT:はいなりくうかんふんかつ}}

[[Category:幾何学的データ構造]]

[[Category:幾何学的データ構造]]


2021年9月20日 (月) 07:57時点における最新版


: binary space partitioningBSPN(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]
procedure Tree_traverse (tree:bsp_tree, eye:point) is
begin
  if not Tree_isEmpty (tree) then
    constant location : integer = Tree_getLocation (tree, eye) ;

    -- eye が location の前にある場合
    if 0 < location then
      Tree_traverse (tree.back, eye) ;
      display       (tree.polygon_list) ;
      Tree_traverse (tree.front, eye)

    -- eye が location の後ろにある場合
    else if location < 0 then
      Tree_traverse (tree.front, eye) ;
      display       (tree.polygon_list) ;
      Tree_traverse (tree.back, eye)

    -- eye が分割超平面上にある場合
    else
      Tree_traverse (tree.front, eye) ;
      Tree_traverse (tree.back, eye)
    end if ;
  end if ;
end

その他の空間分割構造[編集]

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.

外部リンク[編集]