Subversion Repositories AndroidProjects

Rev

Rev 1788 | Rev 1804 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
1719 chris 1
package com.gebauz.bauzoid2.graphics.model;
2
 
1752 chris 3
import com.gebauz.bauzoid2.game.Engine;
1774 chris 4
import com.gebauz.bauzoid2.game.Time;
1773 chris 5
import com.gebauz.bauzoid2.graphics.animation.Animation;
1776 chris 6
import com.gebauz.bauzoid2.math.Matrix4;
7
import com.gebauz.bauzoid2.math.Quaternion;
1767 chris 8
import com.gebauz.bauzoid2.math.Vector4;
1719 chris 9
 
10
/**
11
 * Created by chris on 12.12.2014.
12
 */
13
public class Model
14
{
15
    // Constants========================================================================================
16
 
17
    // Embedded Types===================================================================================
18
 
19
    // Fields===========================================================================================
20
 
21
    private String mName;
22
    private Mesh[] mMeshes = null;
23
 
1720 chris 24
    private ModelNode[] mNodes = null;
25
    private Material[] mMaterials = null;
1773 chris 26
        private Animation[] mAnimations = null;
1719 chris 27
 
28
    // Methods==========================================================================================
29
 
30
    public Model(String name)
31
    {
32
        mName = name;
33
    }
34
 
35
    public void dispose()
36
    {
1737 chris 37
        destroyNodes();
1719 chris 38
        destroyMeshes();
1720 chris 39
        destroyMaterials();
1719 chris 40
    }
41
 
42
    public void destroyMeshes()
43
    {
44
        if (mMeshes != null)
45
        {
46
            for (int i = 0; i < mMeshes.length; i++)
47
            {
48
                mMeshes[i].dispose();
49
                mMeshes[i] = null;
50
            }
51
 
52
            mMeshes = null;
53
        }
54
    }
55
 
1720 chris 56
    public void destroyMaterials()
1719 chris 57
    {
1720 chris 58
        if (mMaterials != null)
1719 chris 59
        {
1720 chris 60
            for (int i = 0; i < mMaterials.length; i++)
61
            {
62
                mMaterials[i].dispose();
63
                mMaterials[i] = null;
64
            }
65
            mMaterials = null;
1719 chris 66
        }
67
    }
68
 
1737 chris 69
    public void destroyNodes()
70
    {
71
        if (mNodes != null)
72
        {
73
            for (int i = 0; i < mNodes.length; i++)
74
            {
75
                mNodes[i] = null;
76
            }
77
            mNodes = null;
78
        }
79
    }
80
 
1774 chris 81
        public ModelNode findNode(String id)
82
        {
83
                for (ModelNode node : mNodes)
84
                {
85
                        if (node.getName().equalsIgnoreCase(id))
86
                                return node;
87
                }
88
 
89
                return null;
90
        }
91
 
1752 chris 92
    public void calcGlobalTransforms()
93
    {
94
        for (int i = 0; i < mNodes.length; i++)
95
        {
96
            ModelNode node = mNodes[i];
97
 
1778 chris 98
                        node.getGlobalTransform().copyFrom(node.transform.calcMatrix());
1752 chris 99
            if (node.getParentIndex() != -1)
100
            {
101
                ModelNode parentNode = mNodes[node.getParentIndex()];
1758 chris 102
                node.getGlobalTransform().postMultiply(parentNode.getGlobalTransform());
1752 chris 103
            }
104
        }
105
    }
106
 
1720 chris 107
    public void render()
1719 chris 108
    {
1774 chris 109
                for (Animation anim : mAnimations)
110
                {
111
                        anim.setCurrentTime(Time.getRunTime() * 1000);
112
                        anim.applyAnimation();
113
                }
114
 
1757 chris 115
        calcGlobalTransforms();
1752 chris 116
 
117
        for (int i = 0; i < mNodes.length; i++)
1720 chris 118
        {
1752 chris 119
            ModelNode node = mNodes[i];
120
 
1757 chris 121
            Engine.graphics.renderStates.pushModelMatrix();
122
            Engine.graphics.renderStates.model.preMultiply(node.getGlobalTransform());
1768 chris 123
                        //Engine.graphics.renderStates.model.preMultiply(node.getLocalTransform());
1752 chris 124
 
1768 chris 125
 
1752 chris 126
            if (node.parts != null)
127
            {
128
                for (ModelPart part : node.parts)
129
                {
1803 chris 130
                                        // render bones
1777 chris 131
                                        part.getMaterial().beginRender();
1788 chris 132
                    part.getMaterial().setMatrixPalette(part.calcBoneMatrices());
1777 chris 133
                    //part.render();
134
                                        part.getMeshGroup().render();
135
                                        part.getMaterial().endRender();
1752 chris 136
                }
137
            }
1767 chris 138
                        else
139
                        {
1777 chris 140
                                Engine.graphics.renderStates.pushModelMatrix();
1776 chris 141
                                Quaternion q = new Quaternion(0.5f, -0.5f, 0.5f, 0.5f);
142
                                Engine.graphics.renderStates.model.preMultiply(q.toMatrix());
1777 chris 143
                                Engine.graphics.renderStates.model.preMultiply(Matrix4.createScale(3));
1767 chris 144
                                Engine.graphics.util.drawMarker(new Vector4(1, 1, 0, 1));
1777 chris 145
                                Engine.graphics.renderStates.popModelMatrix();
1767 chris 146
                        }
1752 chris 147
 
1757 chris 148
            Engine.graphics.renderStates.popModelMatrix();
1752 chris 149
        }
1719 chris 150
    }
151
 
1720 chris 152
    // Getters/Setters==================================================================================
1719 chris 153
 
1720 chris 154
    public final void setMeshes(Mesh[] meshes) { mMeshes = meshes; }
155
    public final Mesh[] getMeshes() { return mMeshes; }
1719 chris 156
 
1720 chris 157
    public final void setMaterials(Material[] materials) { mMaterials = materials; }
158
    public final Material[] getMaterials() { return mMaterials; }
1719 chris 159
 
1720 chris 160
    public final void setNodes(ModelNode[] nodes) { mNodes = nodes; }
161
    public final ModelNode[] getNodes() { return mNodes; }
1773 chris 162
 
163
        public final void setAnimations(Animation[] anims) { mAnimations = anims; }
164
        public final Animation[] getAnimations() { return mAnimations; }
1719 chris 165
}