Тема: axelynx
Показать сообщение отдельно
Старый 20.10.2012, 19:31   #430
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Ответ: axelynx

посмотри на синтаксис хорды;
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();
            }

        }
    }
}
а не простыми вызовами функций (стиль блица, хорса, хорды)
(Offline)
 
Ответить с цитированием