注意:
この項では、Spatial and Graphでテクスチャ・データを使用するために理解しておく必要のある概念について説明します。ただし、テクスチャ・メタデータはまだOracle Spatial and Graphに完全に実装されておらず、ビューアはまだサポートされていません。この項は、テクスチャのサポートがリリースされるときに更新されます。
テクスチャは、フィーチャの1つ以上の部分を表すイメージです。テクスチャは、一般的に、空間ジオメトリとして格納されているオブジェクトを表示するビジュアライザ・アプリケーション(ビューア)で使用されます。たとえば、テクスチャを使用してオフィス・ビル(3次元ソリッド)をビューアで表示し、色だけを使用する場合よりさらにリアルな視覚化を実現することができます。テクスチャは、2次元と3次元のジオメトリで使用できます。
最も単純なケースでは、矩形ジオメトリをテクスチャ・ビットマップで覆うことができます。ただし、多くの場合、次のケースの例のように、テクスチャ・ビットマップのサブリージョンのみが使用されます。
テクスチャ・ビットマップに、同じビルの複数の側面、屋根および切妻屋根が含まれる場合。このケースでは、各ビットマップ部分が、ジオメトリの面の1つを覆っています。
テクスチャ・ビットマップがビルの面上にある1つのパネルまたは窓を表し、ジオメトリ面がこのようなパネルまたは窓を15個備えた壁(3つの階それぞれに5個ずつ)を表す場合。このケースでは、1つのテクスチャ・ビットマップを面上に15回並べます。
面が矩形以外のサブ面(切妻屋根など)である場合。このケースでは、テクスチャ・ビットマップの一部(可能な三角形)のみが使用されます。
図1-10に、表示すると3つのテクスチャで構成される大きな矩形面を示します(各テクスチャは、面の様々な場所で複数回繰り返されます)。
次に、図1-10について説明します。
イメージ全体は12個の小さな矩形面(表面ジオメトリ)で構成される大きな面であり、小さな矩形面はそれぞれ(A、BおよびCのラベルが付けられた)3つのイメージのうち1つで表すことができます。
(A、BおよびCのラベルが付けられた)3つのテクスチャ・ビットマップを使用すると、すべての面を視覚化できます。このケースでは、ビットマップAを3回、ビットマップBを6回、ビットマップCを3回使用します。
図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) );
テクスチャ・ビットマップ(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));