/** * Get the parsed object or objects. This is returns each model independent of a scene * regardless of if a scene exists or not. * * @return */ @Override public Object3D getParsedObject() { // If only one object if (!mAlwaysUseContainer && baseObjects.size() == 1) return baseObjects.get(0); mRootObject.isContainer(true); for (int i = 0, j = baseObjects.size(); i < j; i++) mRootObject.addChild(baseObjects.get(i)); return mRootObject; }
/** * Build string representation of object hierarchy * @param parent * @param sb * @param prefix */ private void buildObjectGraph(Object3D parent, StringBuffer sb, String prefix) { sb.append(prefix).append("-->").append((parent.isContainer() ? "GROUP " : "") + parent.getName()).append('\n'); for(int i=0; i<parent.getNumChildren(); i++) { buildObjectGraph(parent.getChildAt(i), sb, prefix+"\t"); } }
protected void cloneTo(Object3D clone, boolean copyMaterial) { clone.setName(mName); clone.getGeometry().copyFromGeometry3D(mGeometry); clone.isContainer(mIsContainerOnly); if (copyMaterial) { clone.setMaterial(mMaterial); } clone.mElementsBufferType = GLES20.GL_UNSIGNED_INT; clone.mTransparent = this.mTransparent; clone.mEnableBlending = this.mEnableBlending; clone.mBlendFuncSFactor = this.mBlendFuncSFactor; clone.mBlendFuncDFactor = this.mBlendFuncDFactor; clone.mEnableDepthTest = this.mEnableDepthTest; clone.mEnableDepthMask = this.mEnableDepthMask; }
if(mRootObject.getNumChildren() == 1 && !mRootObject.getChildAt(0).isContainer()) mRootObject = mRootObject.getChildAt(0);
@Override public Object3D getBaseObject3D() { if(finalObject != null) return finalObject; if(mBaseObjects[0] instanceof SkeletalAnimationChildObject3D) { SkeletalAnimationObject3D container = new SkeletalAnimationObject3D(); for(int i = 0; i < mBaseObjects.length; i++) { SkeletalAnimationChildObject3D child = (SkeletalAnimationChildObject3D)mBaseObjects[i]; child.setSkeleton(container); container.addChild(child); } finalObject = container; } else if (mBaseObjects.length == 1) finalObject = mBaseObjects[0]; else { final Object3D container = new Object3D(mLookupName); container.isContainer(true); for (int i = 0; i < mBaseObjects.length; i++) container.addChild(mBaseObjects[i]); finalObject = container; } return finalObject; }
public void parseBlock(AWDLittleEndianDataInputStream dis, BlockHeader blockHeader) throws Exception { mBaseObject = new Object3D(); mSceneGraphBlock = new SceneGraphBlock(); mSceneGraphBlock.readGraphData(blockHeader, dis); // TODO need to 'getAssetByID' which appears to be the implemented method for referencing other parsed objects // Container properties did not exist until 2.1, as such the container will be default 0, 0, 0 if (blockHeader.awdVersion == 2 && blockHeader.awdRevision == 1) { // FIXME will have to implement this dis.readProperties(); } else { dis.readProperties(); } mBaseObject.setVisible(dis.readByte() != 0); mBaseObject.isContainer(true); }
/** * Collapse single-object groups. (Some obj exporters use g token for objects) * @param object */ private void mergeGroupsAsObjects(Object3D object) { if(object.isContainer() && object.getNumChildren()==1 && object.getChildAt(0).getName().startsWith("Object")) { Object3D child = object.getChildAt(0); object.removeChild(child); child.setName(object.getName()); addChildSetParent(object.getParent(), child); object.getParent().removeChild(object); object = child; } for(int i=0; i<object.getNumChildren(); i++) { mergeGroupsAsObjects(object.getChildAt(i)); } }
if(!mGeometry.isContainer()) mGeometry.setMaterial(materials[m++]);
/** * Get the parsed object or objects. This is returns each model independent of a scene * regardless of if a scene exists or not. * * @param alwaysUseContainer When false, a single model will be returned as a BaseObject3D. When * true, or when more than one model exists, the models will be * returned as children of a container. * @return */ @Override public Object3D getParsedObject() { // If only one object if (!mAlwaysUseContainer && baseObjects.size() == 1) return baseObjects.get(0); mRootObject.isContainer(true); for (int i = 0, j = baseObjects.size(); i < j; i++) mRootObject.addChild(baseObjects.get(i)); return mRootObject; }
/** * Build string representation of object hierarchy * @param parent * @param sb * @param prefix */ private void buildObjectGraph(Object3D parent, StringBuffer sb, String prefix) { sb.append(prefix).append("-->").append((parent.isContainer() ? "GROUP " : "") + parent.getName()).append('\n'); for(int i=0; i<parent.getNumChildren(); i++) { buildObjectGraph(parent.getChildAt(i), sb, prefix+"\t"); } }
protected void cloneTo(Object3D clone, boolean copyMaterial) { clone.setName(mName); clone.getGeometry().copyFromGeometry3D(mGeometry); clone.isContainer(mIsContainerOnly); if (copyMaterial) clone.setMaterial(mMaterial); clone.mElementsBufferType = mGeometry.areOnlyShortBuffersSupported() ? GLES20.GL_UNSIGNED_SHORT : GLES20.GL_UNSIGNED_INT; clone.mTransparent = this.mTransparent; clone.mEnableBlending = this.mEnableBlending; clone.mBlendFuncSFactor = this.mBlendFuncSFactor; clone.mBlendFuncDFactor = this.mBlendFuncDFactor; clone.mEnableDepthTest = this.mEnableDepthTest; clone.mEnableDepthMask = this.mEnableDepthMask; }
if(mRootObject.getNumChildren() == 1 && !mRootObject.getChildAt(0).isContainer()) mRootObject = mRootObject.getChildAt(0);
@Override public Object3D getBaseObject3D() { if(finalObject != null) return finalObject; if(mBaseObjects[0] instanceof SkeletalAnimationChildObject3D) { SkeletalAnimationObject3D container = new SkeletalAnimationObject3D(); for(int i = 0; i < mBaseObjects.length; i++) { SkeletalAnimationChildObject3D child = (SkeletalAnimationChildObject3D)mBaseObjects[i]; child.setSkeleton(container); container.addChild(child); } finalObject = container; } else if (mBaseObjects.length == 1) finalObject = mBaseObjects[0]; else { final Object3D container = new Object3D(mLookupName); container.isContainer(true); for (int i = 0; i < mBaseObjects.length; i++) container.addChild(mBaseObjects[i]); finalObject = container; } return finalObject; }
public void parseBlock(AWDLittleEndianDataInputStream dis, BlockHeader blockHeader) throws Exception { mBaseObject = new Object3D(); mSceneGraphBlock = new SceneGraphBlock(); mSceneGraphBlock.readGraphData(blockHeader, dis); // TODO need to 'getAssetByID' which appears to be the implemented method for referencing other parsed objects // Container properties did not exist until 2.1, as such the container will be default 0, 0, 0 if (blockHeader.awdVersion == 2 && blockHeader.awdRevision == 1) { // FIXME will have to implement this dis.readProperties(); } else { dis.readProperties(); } mBaseObject.setVisible(dis.readByte() != 0); mBaseObject.isContainer(true); }
/** * Collapse single-object groups. (Some obj exporters use g token for objects) * @param object */ private void mergeGroupsAsObjects(Object3D object) { if(object.isContainer() && object.getNumChildren()==1 && object.getChildAt(0).getName().startsWith("Object")) { Object3D child = object.getChildAt(0); object.removeChild(child); child.setName(object.getName()); addChildSetParent(object.getParent(), child); object.getParent().removeChild(object); object = child; } for(int i=0; i<object.getNumChildren(); i++) { mergeGroupsAsObjects(object.getChildAt(i)); } }
if(!mGeometry.isContainer()) mGeometry.setMaterial(materials[m++]);