посмотри на синтаксис хорды;
http://www.horde3d.org/docs/html/_tutorial.html
он сильно избыточен на мой взгляд.
сравни с моим:
http://likosoft.com/axelynx_wiki/ind...l:loading_mesh
код прост и лаконичен (ну тут конечно - каждому свое).
C-API интерфейс движка конечно поможет его много где использовать, в отличии от интерфейса на классах, но интеллисенс не подскажет если что.
Далее, у них минимальная поддержка SM2 (а значит никаких геометрических шейдеров, у меня SM4)
По фичам - их у хорды больше, чем у меня. Но у меня есть довольно таки современные фичи - вроде загрузки шейдеров из бинарников, а них нет.
ну и еще у меня есть клевый инстеллер и мастера )) т.е. даже новичок сможет мой движок поставить и использовать.
код хороший у них, да.
а у меня и вовсе закрытый ))
Скажем почему нужно писать свой если есть уже Хорда?
|
ну, не знаю почему ты выбрал именно хорду))) скорее смысл теряется на фоне юнити и бесплатных ЮДК / крайтека.
ну или на шарпе можно писать так:

static class Program
{
public static MainForm form;
public static bool mStarted =false;
public static Window wnd = null;
public static Engine engine = null;
public static Camera camera = null;
public static Canvas canvas = null;
//---------------------------------------------------------------------------------------------------
class Box
{
public Pivot ent;
public float angle, radius, y, dangle;
public void update()
{
angle += dangle;
}
};
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
//Application.Run(new MainForm());
form = new MainForm();
form.Show();
engine = Engine.Init();
wnd = engine.ApplyWindow(form.ViewportHandle(), 32, 0);
wnd.VSync(false);
canvas = engine.GetCanvas();
Scene scene = engine.AddScene();
camera = scene.AddCamera();
Surface cube_s = Library.Surfaces.Cube(2);
Random rnd = new Random();
InstanceGroup instances_g = engine.CreateInstanceGroup();
instances_g.SetGeometry(cube_s);
Entity instances = scene.Add(instances_g,0);
instances.SetShader(Library.Shaders.TexturingInstanced(), true);
instances.SetTexture(engine.LoadTexture(@"..\..\texture.png"),0,true);
List<Box> boxes = new List<Box>(100);
for (int i = 0; i < 10000; ++i)
{
Box box = new Box();
box.ent = instances_g.AddInstance();
box.angle = (float)rnd.Next(36000) * 0.01f;
box.y = (float)rnd.Next(-10000, 10000) * 0.01f;
box.dangle = (float)rnd.Next(-50, 50) * 0.0001f;
box.radius = (float)rnd.Next(1000, 4600) * 0.1f;
boxes.Add(box);
}
camera.ClearColor(0.1f, 0.2f, 0.33f, 1);
Font fnt = engine.LoadFreeTypeFont("arial.ttf", 32);
canvas.SetFont(fnt);
camera.SetDrawMode(Camera.DrawMode.SOLID);
foreach (Box box in boxes)
{
float x = (float)Math.Sin(box.angle) * box.radius;
float z = (float)Math.Cos(box.angle) * box.radius;
box.update();
box.ent.SetPosition(x, box.y, z);
}
do
{
Application.DoEvents();
if (mStarted)
{
foreach (Box box in boxes)
{
float x = 0;
float z = 0;
axmath.SinCos(box.angle, ref x, ref z);
x *= box.radius;
z *= box.radius;
box.update();
box.ent.SetPosition(x, box.y, z);
}
scene.Render();
canvas.SetBlendMode(BlendMode.ALPHA);
canvas.Text(20, 20, "test", false);
wnd.Flip(true);
}
}
while (!form.IsDisposed);
if (mStarted)
{
wnd.Free();
engine.Free();
}
}
}
}
а не простыми вызовами функций (стиль блица, хорса, хорды)