当前位置: 首页>>代码示例>>Java>>正文


Java SkeletonControl.getSkeleton方法代码示例

本文整理汇总了Java中com.jme3.animation.SkeletonControl.getSkeleton方法的典型用法代码示例。如果您正苦于以下问题:Java SkeletonControl.getSkeleton方法的具体用法?Java SkeletonControl.getSkeleton怎么用?Java SkeletonControl.getSkeleton使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在com.jme3.animation.SkeletonControl的用法示例。


在下文中一共展示了SkeletonControl.getSkeleton方法的7个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Java代码示例。

示例1: showSkeleton

import com.jme3.animation.SkeletonControl; //导入方法依赖的package包/类
public void showSkeleton(Node n) {
    Skeleton sk = null;
    SkeletonControl sc = n.getControl(SkeletonControl.class);
    if (sc != null) {
        sk = sc.getSkeleton();
    }
    AnimControl control = n.getControl(AnimControl.class);
    if (sk == null && control != null) {
        sk = control.getSkeleton();
    }
    if (sk != null) {
        final SkeletonDebugger skeletonDebug = new SkeletonDebugger("skeleton." + n.getName(), sk);
        final Material mat = new Material(getAssetManager(), "Common/MatDefs/Misc/Unshaded.j3md");
        mat.setColor("Color", ColorRGBA.Green);
        mat.getAdditionalRenderState().setWireframe(true);
        mat.getAdditionalRenderState().setDepthTest(false);
        skeletonDebug.setMaterial(mat);
        n.attachChild(skeletonDebug);
    }
}
 
开发者ID:xbuf,项目名称:jme3_xbuf,代码行数:21,代码来源:TestJaimeJ3o.java

示例2: showSkeleton

import com.jme3.animation.SkeletonControl; //导入方法依赖的package包/类
public void showSkeleton(Node n) {
	Skeleton sk = null;
	SkeletonControl sc = n.getControl(SkeletonControl.class);
	if (sc != null) {
		sk = sc.getSkeleton();
	}
	AnimControl control = n.getControl(AnimControl.class);
	if (sk == null && control != null) {
		sk = control.getSkeleton();
	}
	if (sk != null) {
		final SkeletonDebugger skeletonDebug = new SkeletonDebugger("skeleton." + n.getName(), sk);
		final Material mat = new Material(getAssetManager(), "Common/MatDefs/Misc/Unshaded.j3md");
		mat.setColor("Color", ColorRGBA.Green);
		mat.getAdditionalRenderState().setWireframe(true);
		mat.getAdditionalRenderState().setDepthTest(false);
		skeletonDebug.setMaterial(mat);
		n.attachChild(skeletonDebug);
	}
}
 
开发者ID:xbuf,项目名称:jme3_xbuf,代码行数:21,代码来源:TestXbufWithMaterialHook.java

示例3: trySwitchToHardware

import com.jme3.animation.SkeletonControl; //导入方法依赖的package包/类
/**
 * 打开skin的hws,如果角色actor主SkeletonControl已经打开该功能,则该方法将偿试打开skinNode的hws以配合角色骨骼.
 * @param actor
 * @param skinNode 
 */
public static void trySwitchToHardware(Entity actor, Spatial skinNode) {
    // 如果hsw未打开,则不需要管,交由sc内部去一起处理就可以.
    SkeletonControl sc = actor.getSpatial().getControl(SkeletonControl.class);
    if (!sc.isHardwareSkinningUsed()) {
        return;
    }
    
    // 如果hsw已经开启过了,则需要把skinNode处理后再添加到actor中,否则skinNode将无法启用hsw
    final Set<Mesh> targets = new HashSet<Mesh>();
    final Set<Material> materials = new HashSet<Material>();
    Node tempNode = new Node();
    tempNode.attachChild(skinNode);
    findTargets(tempNode, targets, materials);
    
    // Next full 10 bones (e.g. 30 on 24 bones)
    Skeleton skeleton = sc.getSkeleton();
    int numBones = ((skeleton.getBoneCount() / 10) + 1) * 10;
    for (Material m : materials) {
        m.setInt("NumberOfBones", numBones);
    }
    for (Mesh mesh : targets) {
        if (mesh.isAnimated()) {
            mesh.prepareForAnim(false);
        }
    }
    sc.setSpatial(actor.getSpatial());
}
 
开发者ID:huliqing,项目名称:LuoYing,代码行数:33,代码来源:GeometryUtils.java

示例4: checkEnableHardwareSkining

import com.jme3.animation.SkeletonControl; //导入方法依赖的package包/类
/**
 * 检测并判断是否打开或关闭该模型的硬件skining加速
 */
private static void checkEnableHardwareSkining(Spatial actorModel) {
    SkeletonControl sc = actorModel.getControl(SkeletonControl.class);
    if (sc == null) {
        return;
    }
    // 代换自定义的SkeletonControl,因为默认的SkeletonControl会把带
    // SkeletonControl的子节点也进行处理。比如弓武器,当弓武器带有动画时可能
    // 导致角色的SkeletonControl和弓的SkeletonControl存在冲突导致弓模型变形
    CustomSkeletonControl csc = new CustomSkeletonControl(sc.getSkeleton());
    actorModel.removeControl(sc);
    actorModel.addControl(csc);
    csc.setHardwareSkinningPreferred(true);
}
 
开发者ID:huliqing,项目名称:LuoYing,代码行数:17,代码来源:Actor.java

示例5: simpleInitApp

import com.jme3.animation.SkeletonControl; //导入方法依赖的package包/类
@Override
    public void simpleInitApp() {
//		assetManager.registerLocator("assets/", FileLocator.class);

        // 关闭第一人称
//		flyCam.setEnabled(false);
        this.getFlyByCamera().setMoveSpeed(30);
        cam.setFrustumPerspective(45, (float) cam.getWidth() / cam.getHeight(), 0.1F, 1000);
        AmbientLight amb = new AmbientLight();
        amb.setColor(new ColorRGBA(0.6F, 0.8F, 0.8F, 1.0f));
        rootNode.addLight(amb);

        DirectionalLight light = new DirectionalLight();
        light.setColor(new ColorRGBA(1.0f, 0.9f, 0.8f, 1.0f));
        light.setDirection(new Vector3f(0F, -0.779F, 0.627F));
        rootNode.addLight(light);

        // 第一步加载骨骼文件
        ske = (Node) assetManager.loadModel("Models/actor/ske.mesh.j3o");
        SkeletonControl sc = ske.getControl(SkeletonControl.class);
        
        CustomSkeletonControl csc = new CustomSkeletonControl(sc.getSkeleton());
        ske.removeControl(sc);
        ske.addControl(csc);
//        csc.setHardwareSkinningPreferred(true);
        

        rootNode.attachChild(ske);
        addSkeletonAnim(assetManager.loadModel("Models/actor/ext_anim/idle_run.mesh.j3o"), ske);
        // 加载初始化皮肤
        ske.attachChild(assetManager.loadModel("Models/actor/female/foot.003.mesh.j3o"));

        // 播放动画
        AnimControl animControl = ske.getControl(AnimControl.class);
        System.out.println(animControl.getAnimationNames().toString());
        anim = animControl.createChannel();
        anim.setAnim("idle_run");

        keyMapping();
    }
 
开发者ID:huliqing,项目名称:LuoYing,代码行数:41,代码来源:RoleTest.java

示例6: doLink

import com.jme3.animation.SkeletonControl; //导入方法依赖的package包/类
@Override
public boolean doLink(RelationsMerger loader,RefData data, Logger log) {
	XbufAnimation op1=getRef1(data,XbufAnimation.class,log);
	Spatial op2=getRef2(data,Spatial.class,log);
	if(op1==null||op2==null)return false;
	AnimControl c=op2.getControl(AnimControl.class);
	if(c==null){
		SkeletonControl sc=op2.getControl(SkeletonControl.class);
		c=sc!=null?new AnimControl(sc.getSkeleton()):new AnimControl();
		op2.addControl(c);
	}
	c.addAnim(op1.toJME(c.getSkeleton()));
	return true;
}
 
开发者ID:xbuf,项目名称:jme3_xbuf,代码行数:15,代码来源:AnimationToSpatial.java

示例7: redirectBoneIndex

import com.jme3.animation.SkeletonControl; //导入方法依赖的package包/类
public static void redirectBoneIndex(String outfitFile, String rigSkeFile) {
    AssetManager am = LuoYing.getAssetManager();
    Spatial outfit = am.loadModel(outfitFile);
    if (outfit.getUserData(REDIRECT_BONE_INDEX_OK) != null) {
        logger.log(Level.WARNING, "Outfit name={0} has already Redirect bone index!", outfit.getName());
        return;
    }
    AnimControl outfitAC = outfit.getControl(AnimControl.class);
    SkeletonControl outfitSC = outfit.getControl(SkeletonControl.class);
    if (outfitSC == null) {
        return;
    }
    // 移除control
    outfit.removeControl(outfitAC);
    outfit.removeControl(outfitSC);
    
    // 重定向boneIndex
    Skeleton rigSke = am.loadModel(rigSkeFile).getControl(SkeletonControl.class).getSkeleton();
    // skin中可能存在多个Geometry,每一个都要进行处理.
    List<Geometry> geos = GeometryUtils.findAllGeometry(outfit);
    Skeleton outfitSke = outfitSC.getSkeleton();  // skin中的骨骼(已丢弃)
    for (Geometry geo : geos) {
        // 找到Mesh中的骨骼索引
        // 这里需要检测并初始化一次就可以, 不能重复做,即使skin是重新load进来的
        // 因为geometry或mesh可能进行了缓存,所以即使重新Loader.loadSkin(),可能
        // 载入的对象仍然引用相同的mesh.所以这里需要通过判断,避免对skin mesh
        // 中的骨骼索引重定向多次,只有第一次是正确的,第二次及后续一定错误,因为数据覆盖了.
        Mesh mesh = geo.getMesh();
        logger.log(Level.INFO, "==MaxNumWeights={0}", mesh.getMaxNumWeights());
        VertexBuffer indices = mesh.getBuffer(VertexBuffer.Type.BoneIndex);
        if (!indices.getData().hasArray()) {
            // Prepares the mesh for software skinning by converting the bone index and weight buffers to heap buffers. 
            // 另参考: SkeletonControl => void resetToBind() 
            mesh.prepareForAnim(true);
        }
        
        // 重定向
        ByteBuffer ib = (ByteBuffer) indices.getData();
        ib.rewind();
        byte[] fib = ib.array();
        for (int i = 0; i < fib.length; i++) {
            int bIndex = fib[i] & 0xff; // bIndex是skin中子骨骼

            // 这里一般不会发生, 除非做了第二次骨骼索引的重定向,
            // 否则skin中的初始骨骼索引不可能会大于或等于它的骨骼数(最大索引为BoneCount-1)
            if (bIndex >= outfitSke.getBoneCount()) {
                logger.log(Level.WARNING, "SkinSke bone index big than boneCount, bIndex={0}, totalBone={1}"
                        , new Object[] {bIndex, outfitSke.getBoneCount()});
                continue;
            }

            String boneName = outfitSke.getBone(bIndex).getName();
            // 从父骨骼中找出与skin中当前骨头相同名称的骨头.
            int rootBoneIndex = rigSke.getBoneIndex(boneName);
            if (rootBoneIndex != -1) {

                logger.log(Level.INFO, "update bone index, skin={0}, index update: {1} to {2}"
                        , new Object[]{outfit.getName(), fib[i], rootBoneIndex});

                fib[i] = (byte) rootBoneIndex;
            } else {
                // 如果skinNode中的骨骼没有在父骨骼中找到,则随便直接绑定到父骨骼的根节点中.
                // 出现这种情况主要是skin中存在额外的骨骼,这个骨头不知道要绑定到哪里?!!?
                fib[i] = 0;
                logger.log(Level.WARNING, "SkinSke found a extra bone, but not know where to bind to! boneName={0}"
                        , boneName);
            }
        }
        indices.updateData(ib);
    }
    outfit.setUserData(REDIRECT_BONE_INDEX_OK, "1");
    ModelFileUtils.saveTo(outfit, outfitFile);
}
 
开发者ID:huliqing,项目名称:LuoYing,代码行数:74,代码来源:OutfitUtils.java


注:本文中的com.jme3.animation.SkeletonControl.getSkeleton方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。