//------------------------------------------------------------------------------------------------- void sdRenderHelper::DisableZTest(NiAVObject* pkAVObject) { NIASSERT(pkAVObject); NiProperty* pkProperty = pkAVObject->GetProperty(NiZBufferProperty::GetType()); if (pkProperty) { NiZBufferProperty* pkZBufferProperty = (NiZBufferProperty*)(pkProperty); NIASSERT(pkZBufferProperty); pkZBufferProperty->SetZBufferTest(false); pkZBufferProperty->SetZBufferWrite(true); } if (pkAVObject->IsNode()) { NiNode* pkNode = (NiNode*)pkAVObject; NIASSERT(pkNode); for (uint ui = 0; ui < pkNode->GetArrayCount(); ++ui) { NiAVObject* pkChild = pkNode->GetAt(ui); if (pkChild) DisableZTest(pkChild); } } }
//--------------------------------------------------------------------------- NiCamera* NIF_Files::FindCamera(NiAVObject* pkObject) { // This function recursively walks the scenegraph until a camera // is found. if (NiIsKindOf(NiCamera, pkObject)) { return (NiCamera*) pkObject; } else if (NiIsKindOf(NiNode, pkObject)) { // NiNodes are the primary structural objects in Gamebryo. They // group other Gamebryo scene objects together under a common parent // and coordinate system. NiNodes can have as many children as // necessary, but those children are not guaranteed to be contiguous. NiNode* pkNode = (NiNode*) pkObject; for (unsigned int ui = 0; ui < pkNode->GetArrayCount(); ui++) { NiCamera* pkFoundCamera = FindCamera(pkNode->GetAt(ui)); if (pkFoundCamera) return pkFoundCamera; } } return NULL; }
//------------------------------------------------------------------------------------------------- uint sdPhysXSceneMgr::CookObject(sdPhysXMemoryWriteStream& kStream, NiAVObject* spAVObject, float fScale, bool bFlipNormal) { uint uiSizeByBytes = 0; if (NiIsKindOf(NiMesh, spAVObject)) { NiMesh* spMesh = (NiMesh*)spAVObject; uiSizeByBytes += CookMesh(kStream, spMesh, fScale, bFlipNormal); } else if (spAVObject->IsNode()) { NiNode* spNode = (NiNode*)spAVObject; for (uint ui = 0; ui < spNode->GetArrayCount(); ++ui) { NiAVObject* spChildAVObject = spNode->GetAt(ui); if (spChildAVObject) uiSizeByBytes += CookObject(kStream, spChildAVObject, fScale, bFlipNormal); } } return uiSizeByBytes; }