from pyfbsdk import *
import os
def CreateMultiPatchMesh(pArrayIds):
lMesh = FBMesh("myGeom")
lMesh.GeometryBegin()
lMesh.VertexArrayInit(5, False, pArrayIds)
lPosList = [0, 100, 0, 100,100, 0, 100, 0, 0, 0, 0, 0, 50, 150, 0]
lMesh.SetPositionsArray(lPosList)
lUVList = [0, 1, 1, 1, 1, 0, 0, 0, 0.5, 0]
lMesh.SetUVSetDirectArray(lUVList)
lNormalList = [0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1]
lMesh.SetNormalsDirectArray(lNormalList)
if (pArrayIds & FBGeometryArrayID.kFBGeometryArrayID_Binormal):
lBinormalList = [0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0]
lMesh.SetBinormalsDirectArray(lBinormalList)
if (pArrayIds & FBGeometryArrayID.kFBGeometryArrayID_Tangent):
lTangentList = [1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0]
lMesh.SetTangentsDirectArray(lTangentList)
if (pArrayIds & FBGeometryArrayID.kFBGeometryArrayID_Color):
lColorList = [0.5, 0.5, 0, 0.5, 0, 0.5, 0.5, 0.5, 1, 0, 0, 0.5, 0, 1, 0, 0.5, 1, 1, 0, 0.5]
lMesh.SetVertexColorsDirectArray(lColorList)
lTriStrip = [0, 1, 3]
lMesh.TriangleStripAdd(3, lTriStrip, 0)
lTriList = [1, 3, 2]
lMesh.TriangleListAdd(3, lTriList, 1)
lPolygonList = [0, 1, 4]
lMesh.PolygonListAdd(3, 3, lPolygonList, 2)
lMesh.GeometryEnd()
return lMesh
gArrayIds = \
[ \
0, \
FBGeometryArrayID.kFBGeometryArrayID_Color, \
FBGeometryArrayID.kFBGeometryArrayID_Tangent, \
FBGeometryArrayID.kFBGeometryArrayID_Binormal, \
FBGeometryArrayID.kFBGeometryArrayID_Tangent | FBGeometryArrayID.kFBGeometryArrayID_Binormal \
]
gMat1 = FBMaterial("Mat1")
gMat1.Diffuse = FBColor(0, 1, 0)
gMat2 = FBMaterial("Mat2")
gMat2.Diffuse = FBColor(1, 0, 0)
gMat3 = FBMaterial("Mat3")
gMat3.Diffuse = FBColor(0, 0, 1)
gShaderMgr = FBShaderManager()
gCgFxSrcFile = os.path.abspath(os.path.join(FBSystem().ApplicationPath, "../config/Scripts/Samples/Geometry/DiffuseUVNormalTangentBinormal.cgfx"))
gNumOfInstance = len(gArrayIds)
for lIndex in range(0, gNumOfInstance):
lModel = FBModelCube("myModel")
lModel.Geometry = CreateMultiPatchMesh(gArrayIds[lIndex])
lModel.SetVector( FBVector3d( (lIndex * 2.0 - gNumOfInstance) * 55, 50, 50 ) )
if (lIndex == 0):
lModel.ConnectSrc(gMat1)
lModel.ConnectSrc(gMat2)
lModel.ConnectSrc(gMat3)
elif (lIndex == 1):
lModel.ShadingMode = FBModelShadingMode.kFBModelShadingFlat
else:
lCgFxShader = gShaderMgr.CreateShader("CgFxShader")
lProp = lCgFxShader.PropertyList.Find("CgFxPath")
lProp.SetString(gCgFxSrcFile)
lProp = lCgFxShader.PropertyList.Find("Diffuse/UV/Normal/Tangent/Binormal")
lProp.SetString( str(lIndex) + ".5")
lModel.ConnectSrc(lCgFxShader)
lModel.Visible = True
lModel.Show = True