教程源地址:http://schwarzeszeux.tumblr.com/post/13854104445/minecraft-modeling-tutorial-part-1-of-x首先对Techne的作者表示崇高敬意!
以下为译文
我觉得是时候写一写Techne的教程了,当我开始制作Techne的时候我不知道做建模最重要的事情,所以在测试中遇到了很多错误。
我甚至没有想过写出Techne后公开,
只是想给朋友们用——不过他们从来没有用过它……
Part 1, 基本的代码建模
Part 2, 动画
Part 3, 块和子部件(啥……)
好吧……教程。
在Minecraft中做建模,在没有Techne的情况下
这个教程先不用Techne,因为我想让你知道到底是怎么在Minecraft里做建模的。这是为了为以后的教程打好基础,也为了你能做出更多更好玩的模型着想。
无论如何,我会在Techne上截一些图给你们看。
这里是一个Minecraft的坐标系(和Techne的)的简要概述。上面的那个盒子在原点(0,0,0),那个下面的盒子正好在地面上(0,23,0)。
盒子们都是1x1x1像素的,这里所有的单位都是像素,但是那是材质的像素点。这个的意思是一个1x1x1的盒子会给我们展示每个面一个像素点。一个16x16x16像素相当于现实中的1米x1米x1米(yay,这是啥……不会翻……感叹词而已吧……)一只苦力怕有26像素高,相当于他有1.625米那么高。
一个模型文件必须继承ModelBase类和应该重载渲染方法。这个方法将被调用到每一帧,在那里你要调用每次里渲染所有模型渲染器中你有的方法。(这句不太会翻……)
- package net.minecraft.src;
- public class ModelTutorial extends ModelBase{ ModelRenderer body;
- public ModelTutorial() { body = new ModelRenderer(this, 18, 4); body.addBox(-6F, -10F, -7F, 12, 18, 10, 0.0F); body.setRotationPoint(0.0F, 5F, 2.0F); body.rotateAngleX = -0.7854F; }
- @Override public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) { setRotationAngles(f, f1, f2, f3, f4, f5); body.render(f5); }
- @Override public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5) {
- }}
- body = new ModelRenderer(this, 18, 4);
- body.addBox(-6F, -10F, -7F, 12, 18, 10, 0.0F);
- body.setRotationPoint(0.0F, 5F, 2.0F);
- new ModelRenderer(this, 18, 4);
addBox需要7个参数:offsetX, offsetY, offsetZ, sizeX, sizeY, sizeZ 和 extension。我以后会解释一下"offset"做了些啥(和“position”和设置“setRotationPoint”)还有现在我们可以无视掉“extension”。
setRotationPoint会设置这个盒子的位置,那个rotation-point (或者 anchor-point) 是在周围的点,该模型将围绕它旋转。
旋转一个盒子,你要使用rotateAngleX-Z的公共领域。比方说,我们希望那条尾巴旋转-45°,如上面的图片所示。注意rotateAngleX-Z的弧度是很重要的。有一个快捷的计算方法 360°==2pi n/180*(-45)=-0.7854。
body.rotateAngleX = -0.7854F;
你做的每一个模型都将包含这些盒子。
现在让我们看看渲染方法,它有7个参数。第一个是你渲染的那个实体(entity),你用它来确定(实体的)状态。ModelWolf(狼模型)会检查它是在坐着还是在甩身体接着依照着它改变模型。
接下来的5个参数定义各种动画的幅度,首先是活动的模型在走动的时候,第二个飞行时(如鸡扇动自己的翅膀)等。最后一个参数是时间。
更新:好吧,我道歉,这是不完全正确,我会在接下来的文章中解释
更新2:你可以在这里找到这篇文章