Я хочу создать объект, который движется (например, движутся люди или упругие пружины), при движении форма объекта будет изменяться. И я не знаю, как создать изменение формы 3D-модели в XNA 4.0. Вы можете помочь мне?? Спасибо!
Создание формы изменения модели в XNA 3D
comment
Ну, вы знаете, как сделать 3D-модель в XNA?
- person LightStriker   schedule 26.10.2012
comment
Да. Я создаю модели 3D в Blender, но я только начал этому учиться.
- person HaiTrieu   schedule 26.10.2012
comment
Хорошо, вы не знаете, как сделать модель по коду. Мой совет: начните с попытки создать плоскость или куб полностью с помощью кода, чтобы полностью понять, как это работает внутри.
- person LightStriker   schedule 26.10.2012
Ответы (1)
Могу дать совет начинающим.
Я только что научился создавать модель из этого примера. и, основываясь на вашем вопросе, я применил дополнительное преобразование масштаба к одной из костей, чтобы увидеть, могу ли я управлять ее размером так же, как я могу ее положением, и это действительно сработало.
Итак, я подразумеваю, что ответ на ваш вопрос может заключаться в том, что, хотя данные вершины модели остаются постоянными, вы можете заставить их изменить форму с помощью преобразований масштаба.
Вот моя модель:
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.Graphics;
namespace SimpleAnimation
{
public class Body
{
Model bodyModel;
ModelBone headBone;
ModelBone bodyBone;
Matrix headTransform;
Matrix bodyTransform;
Matrix[] boneTransforms;
public Body()
{
HeadScale = 1;
}
public void Load(ContentManager content)
{
// Load the tank model from the ContentManager.
bodyModel = content.Load<Model>("body");
// Look up shortcut references to the bones we are going to animate.
headBone = bodyModel.Bones["head"];
bodyBone = bodyModel.Bones["body"];
// Store the original transform matrix for each animating bone.
headTransform = headBone.Transform;
bodyTransform = bodyBone.Transform;
// Allocate the transform matrix array.
boneTransforms = new Matrix[bodyModel.Bones.Count];
}
public void Draw(Matrix world, Matrix view, Matrix projection)
{
// Set the world matrix as the root transform of the model.
bodyModel.Root.Transform = world;
// Calculate matrices based on the current animation position.
Matrix headRotation = Matrix.CreateRotationX(HeadRotation);
Matrix headScale = Matrix.CreateScale(HeadScale);
Matrix bodyRotation = Matrix.CreateRotationX(BodyRotation);
// Apply matrices to the relevant bones.
headBone.Transform = headScale * headRotation * headTransform;
bodyBone.Transform = bodyRotation * bodyTransform;
// Look up combined bone matrices for the entire model.
bodyModel.CopyAbsoluteBoneTransformsTo(boneTransforms);
// Draw the model.
foreach (ModelMesh mesh in bodyModel.Meshes)
{
foreach (BasicEffect effect in mesh.Effects)
{
effect.World = boneTransforms[mesh.ParentBone.Index];
effect.View = view;
effect.Projection = projection;
effect.EnableDefaultLighting();
}
mesh.Draw();
}
}
public float HeadRotation { get; set; }
public float HeadScale { get; set; }
public float BodyRotation { get; set; }
}
}
person
Aaron Anodide
schedule
26.10.2012
Большое спасибо, Аарон Анодид. Можете ли вы поделиться со мной примером кода о переезде одного человека. Я знаю вращение и масштабирование одной модели, но я не знаю, как изменить ее форму, например, когда один человек движется или встает и садится. Файл модели дизайна (.fbx) тоже очень сложен!
- person HaiTrieu; 26.10.2012
Я не могу сказать наверняка, но я полагаю, что движение человека было бы тем же самым, просто используя матрицу перевода, чтобы настроить положение модели на оси x/y/z... если вы думаете об этом, что часть движущегося, стоящего или сидящего человека не является продуктом преобразований Вращение, Склейка и Трансляция?
- person Aaron Anodide; 26.10.2012
Я пытаюсь создать упругие пружины!!
- person HaiTrieu; 26.10.2012
что касается .fbx - я не думаю, что вы должны что-то с этим делать - я думаю, что это способ, которым такие инструменты, как Blender и Cinema 4D, могут экспортировать модели, которые вы создаете, таким образом, чтобы среда XNA могла читать ... я считаю, что пока это довольно гладкий опыт
- person Aaron Anodide; 26.10.2012
опять же, это всего лишь предположение новичка, но, поскольку на самом деле здесь нет никакой магии, и все это просто числовые вершины, я думаю, вам нужно перейти на уровень мышления о пружине как об огромном наборе полигонов - может быть, куча дисковых примитивов... я думаю, что моя полезность здесь исчерпана - как я уже сказал, я тоже новичок
- person Aaron Anodide; 26.10.2012