2012年9月19日 星期三

NiMesh composition


NiMesh are the array of NiDataStreamRef objects that contain all varying attributes of the mesh (vertices, indices, etc)

Element - An element is an array of data that supplies a single input variable (varying or uniform) to a shader program. Each stream element defines a format and an offset where a particular element may be found for a given stream. Multiple elements may be interleaved(插入) into a single stream.
這邊指的是因為我們的NiDataStream是一連串的資料,假設有十組頂點資料,每組內的資料包含了當前的頂點位置,法向量,貼圖座標,前面這三項我們稱為Element

Region A Region defines a contiguous subset of a stream. The elements must be the same across all regions in a stream. Every region contains the following data:
-the base offset into each stream
-the active number of elements for the Region
Region指的就是data stream內的某部分資料範圍

Mesh裡面是很多個data stream ref所組成的。
似乎一個mesh裡可以用好多個,不過我想通常剛好分成各個Sematic各一個stream。應該很少會有相同的Sematicdata stream。不過看起來好像可以多個相同的Semantic data stream。可能主要是共用頂點資料八。但是一個mesh裡只可以有一個USAGE_VERTEX_INDEX 用途的stream

Semantic就是送到Shader內,他要知道目前送來的資料是頂點位置,法向量,還是貼圖座標,這個information就是Semantic
Semantic index:指的像是TEXCOORDINATE0, 1, 2, 3這種暫存器的index

NiDataStreamCreateDataStream,然後就可以丟NiDataStreamElementSets就可以了。

NiDataStreamElementDescribes an element of a NiDataStream object, by data type, format, and offset.

NiDataStreamElementLock是用來可以從指定的Mesh取得某一個特定的semantic的資料,並且可以用來抓到meshsub-mesh的某特定semantic資料的起始位置和結束位置。所以要注意它是已經被綁定的。

NiDataStreamPrimitiveLock是用來可以從指定的Mesh取得某一個特定的primitive的資料index資料,像是LineTriangle這種,都是Primitive
Element的話應該可以指定單一某種Semantic的資料全都抓出來的樣子。而Primitive是以Primitive來分,所以Primitive可能會有POSITION and COLOR的資料都有。

NiTStridedRandomAccessIterator 就是用來抓element內的資料的。
Semantic - The elements must be the same across all regions in a stream


NiDataStreamRef是用來記錄一個data stream裡面資料代表什麼資料的範圍,及語意,NiDataStreamRef可以多個對一個data stream


NiDataStreamElement::Type 資料型態int or something
NiDataStreamElement::Format 資料擺放格式,可能是xyzw,或者zyxw這種擺放格式。