プライマリ・コンテンツに移動
Oracle® Spatial and Graph開発者ガイド
12cリリース1 (12.1)
B72470-07
目次へ移動
目次
索引へ移動
索引

前
次

1.11.4 テクスチャ・データの使用

注意:

この項では、Spatial and Graphでテクスチャ・データを使用するために理解しておく必要のある概念について説明します。ただし、テクスチャ・メタデータはまだOracle Spatial and Graphに完全に実装されておらず、ビューアはまだサポートされていません。この項は、テクスチャのサポートがリリースされるときに更新されます。

テクスチャは、フィーチャの1つ以上の部分を表すイメージです。テクスチャは、一般的に、空間ジオメトリとして格納されているオブジェクトを表示するビジュアライザ・アプリケーション(ビューア)で使用されます。たとえば、テクスチャを使用してオフィス・ビル(3次元ソリッド)をビューアで表示し、色だけを使用する場合よりさらにリアルな視覚化を実現することができます。テクスチャは、2次元と3次元のジオメトリで使用できます。

最も単純なケースでは、矩形ジオメトリをテクスチャ・ビットマップで覆うことができます。ただし、多くの場合、次のケースの例のように、テクスチャ・ビットマップのサブリージョンのみが使用されます。

図1-10に、表示すると3つのテクスチャで構成される大きな矩形面を示します(各テクスチャは、面の様々な場所で複数回繰り返されます)。

図1-10 面とテクスチャ

図1-10の説明が続きます
図1-10「面とテクスチャ」の説明

次に、図1-10について説明します。

図1-11に、三角形の面にマッピングされたテクスチャ・ビットマップを示します。

図1-11 面にマッピングされたテクスチャ

図1-11の説明が続きます
図1-11「面にマッピングされたテクスチャ」の説明

次に、図1-11について説明します。

面を表すイメージ・データの記憶域要件を最小化するために、必要となる重複していないテクスチャのみのイメージを格納する必要があります。テクスチャの格納に使用するデータ型はSDO_ORDINATE_ARRAYであり、これはSDO_GEOMETRY型定義(「SDO_GEOMETRYオブジェクト型」を参照)で使用されます。

たとえば、図1-10の大きな面が次のように定義されているとします。

SDO_GEOMETRY(
  2003,  -- two-dimensional polygon
  NULL,
  NULL,
  SDO_ELEM_INFO_ARRAY(1,1003,1), -- one polygon (exterior polygon ring)
  SDO_ORDINATE_ARRAY(1,1. 1,13, 13,13, 1,13, 1,1)
)

次のように定義されたMY_TEXTURE_COORDINATES表があるとします。

CREATE TABLE my_texture_coordinates (
  texture_coord_id NUMBER PRIMARY KEY,
  texture_name VARCHAR2(32),
  texture_coordinates SDO_ORDINATE_ARRAY);

例1-1では、この表に3つのテクスチャ座標の定義を挿入しています。テクスチャごとに、テクスチャ座標が図1-10で示す適切な小さな矩形のうち1つを反映します(ただし、各テクスチャに対しては、適切な矩形のうち任意のものを選択できます)。図1-1では、各テクスチャのSDO_ORDINATE_ARRAY定義で、図1-10の上部近くにあるポリゴンを反映しています。

例1-1 テクスチャ座標の定義の挿入

INSERT INTO my_texture_coordinates VALUES(
  1,
  'Texture_A',
   SDO_ORDINATE_ARRAY(1,9, 1,5, 5,12, 1,12, 1,9)
  );
 
INSERT INTO my_texture_coordinates VALUES(
  2,
  'Texture_B', 
  SDO_ORDINATE_ARRAY(5,9, 9,9, 9,12, 5,12, 5,9)
  );
 
INSERT INTO my_texture_coordinates VALUES(
  3,
  'Texture_C', 
  SDO_ORDINATE_ARRAY(1,12, 13,12, 13,13, 1,13, 1,12)
  );

1.11.4.1 テクスチャ・データのスキーマに関する考慮事項

テクスチャ・ビットマップ(VARCHAR2形式のBLOBまたはURLとして格納)とテクスチャ座標配列(SDO_ORDINATE_ARRAY型を使用して格納)は、SDO_GEOMETRY列として同じ表に格納したり、個別の表に格納することができますが、特にテクスチャ・ビットマップについては、通常、個別の表を使用することをお薦めします。テクスチャ・ビットマップはフィーチャ(異なるオフィス・ビルなど)間で共有可能になる可能性が高いのですが、テクスチャ座標の定義はフィーチャ間で共有可能になる可能性が低くなります。(たとえば、多くのオフィス・ビルは同じ一般的なガラスの外観を共有しますが、窓の数と階数が同じビルはほとんどありません。テクスチャとアプリケーションの設計では、同じテクスチャのサブリージョンを使用するビルの数、または同じサイズの反復マトリクスでテクスチャを覆うビルの数を考慮する必要があります。)

例外は、テクスチャ・ビットマップ全体で矩形のジオメトリ面を覆うテクスチャ座標配列です。この場合は、テクスチャ座標配列を(0,0, 1,0, 1,1, 0,1, 1,1)として指定することができます(左下、右下、右上、左上および最後に左下の頂点を定義します)。多くのデータ・セットで、このテクスチャ座標配列を広く使用していますが、これはデータ・セットでは主に矩形面を使用し、各テクスチャ・ビットマップに対して1つのファサードを格納するためです。

個別の表を使用している場合は、外部キーを使用してこれらの表を表面ジオメトリにリンクできます(例1-2を参照)。

例1-2 テクスチャ座標の表、テクスチャの表および面の表の作成

-- One row for each texture coordinates definition.
CREATE TABLE my_texture_coordinates (
  texture_coord_id NUMBER PRIMARY KEY,
  texture_coordinates SDO_ORDINATE_ARRAY);
 
-- One row for each texture.
CREATE TABLE my_textures(
  texture_id NUMBER PRIMARY KEY,
  texture BLOB);
 
-- One row for each surface (each individual "piece" of a 
-- potentially larger surface).
CREATE TABLE my_surfaces(
  surface_id NUMBER PRIMARY KEY,
  surface_geometry SDO_GEOMETRY,
  texture_id NUMBER,
  texture_coord_id NUMBER,
  CONSTRAINT texture_id_fk 
    FOREIGN KEY (texture_id) REFERENCES my_textures(texture_id),
  CONSTRAINT texture_coord_id_fk 
    FOREIGN KEY (texture_coord_id) REFERENCES 
      my_texture_coordinates(texture_coord_id));