本帖最后由 kirbykirby 于 2012-7-29 11:03 编辑

教程源地址: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类和应该重载渲染方法。这个方法将被调用到每一帧,在那里你要调用每次里渲染所有模型渲染器中你有的方法。(这句不太会翻……)

  1. package net.minecraft.src;
  2. public class ModelTutorial extends ModelBase{    ModelRenderer body;
  3.     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;    }
  4.     @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);    }
  5.     @Override    public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5)    {
  6.     }}
复制代码
这是一个非常简单的模型类,它定义了一个盒子并渲染到每一帧。来看一看一些代码里的小片段吧
  1. body = new ModelRenderer(this, 18, 4);
  2. body.addBox(-6F, -10F, -7F, 12, 18, 10, 0.0F);
  3. body.setRotationPoint(0.0F, 5F, 2.0F);
  4. new ModelRenderer(this, 18, 4);
复制代码
new ModelRenderer(this, 18, 4); 这个会创建一个模型渲染器的新实例,你传递了你的模型类的实例,作为第一个参数,第二 是材质偏移X轴,第三是材质偏移Y轴。

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:你可以在这里找到这篇文章

在这个方法你呼叫了你的模型渲染器里的渲染方法,那样它们就显示在你的屏幕上。我会在以后的教程里慢慢解释这些细节,我以后也会解释动画是怎么工作的还有那些参数是什么意思。






=======================以下为小广告=====================
    可能没有人知道我开过一个叫Dreamland服务器,恩……已经倒闭了……不过这不要紧,我会用做mod的形式来Return to Dreamland!我需要大家的力量!有意者加我企鹅号986869429吧!急需美工和程序员!如果你有关于mod的创意(前沿科技mod)也可以加我。