none
DirectX и net.framework 4 RRS feed

  • Вопрос

  • Интересно когда же выпустят DirectX который будут работать корректно с net.framework 4 ?

    или может уже что то придумали?

    просто DirectX входит в курс обучения(с графикой)  нашего факультета например (2d и 3d графика)

    можно наверное xna использовать, но учебные примеры будут с использованием DirectX, как и лабораторные собственно

     как же все таки быть.

    2 декабря 2010 г. 9:14

Ответы

  • Нормально работать неизвестно когда будет.

    Пока можно посмотреть такие ссылки (сам я их пока не смотрел):

    http://code.msdn.microsoft.com/WindowsAPICodePack

    http://slimdx.org/

     

    XNA, к моему большому сожалению (я как раз преподаю курс компьютерной графики), не очень подходит, так как в нем нет нормальных встроенных примитивов.

    Есть еще неплохие обертки для OpenGL.

    • Предложено в качестве ответа iandreev 2 декабря 2010 г. 15:46
    • Помечено в качестве ответа Abolmasov Dmitry 10 декабря 2010 г. 7:30
    2 декабря 2010 г. 15:46

Все ответы

  • Нормально работать неизвестно когда будет.

    Пока можно посмотреть такие ссылки (сам я их пока не смотрел):

    http://code.msdn.microsoft.com/WindowsAPICodePack

    http://slimdx.org/

     

    XNA, к моему большому сожалению (я как раз преподаю курс компьютерной графики), не очень подходит, так как в нем нет нормальных встроенных примитивов.

    Есть еще неплохие обертки для OpenGL.

    • Предложено в качестве ответа iandreev 2 декабря 2010 г. 15:46
    • Помечено в качестве ответа Abolmasov Dmitry 10 декабря 2010 г. 7:30
    2 декабря 2010 г. 15:46
  • у меня вот небольшой пример, я пробовал подключить slimdx вместо directx, но попытка так и не удалась..

     

    using System;

    using System.Collections.Generic;

    using System.ComponentModel;

    using System.Data;

    using System.Drawing;

    using System.Text;

    using System.Windows.Forms;

    using Microsoft.DirectX;

    using Microsoft.DirectX.Direct3D;

    using System.IO;


    namespace WindowsApplication1

    {

        public partial class Form1 : Form

        {

            Device d3d;

            Mesh sfera;

            Material sfera_material;

            bool fl = true;

            Texture sfera_texture;

            float koef=10f;

            public Form1()

            {

                InitializeComponent();

                d3d = null;

                SetStyle(ControlStyles.ResizeRedraw, true);

                sfera = null;

                sfera_texture = null;

            }

            public void OnIdle(object sender, EventArgs e)

            {

                Invalidate(); // Помечаем главное окно (this) как требующее перерисовки

            }

            private void Form1_Load(object sender, EventArgs e)

            {

                try

                {                // Устанавливаем режим отображения трехмерной графики

                    PresentParameters d3dpp = new PresentParameters();

                    d3dpp.BackBufferCount = 1;

                    d3dpp.SwapEffect = SwapEffect.Discard;

                    d3dpp.Windowed = true; // Выводим графику в окно

                    d3dpp.MultiSample = MultiSampleType.None; // Выключаем антиалиасинг

                    d3dpp.EnableAutoDepthStencil = true; // Разрешаем создание z-буфера

                    d3dpp.AutoDepthStencilFormat = DepthFormat.D16; // Z-буфер в 16 бит

                    d3d = new Device(0, // D3D_ADAPTER_DEFAULT - видеоадаптер по 

                        // умолчанию

                          DeviceType.Hardware, // Тип устройства - аппаратный ускоритель

                          this, // Окно для вывода графики

                          CreateFlags.SoftwareVertexProcessing, // Геометрию обрабатывает CPU

                          d3dpp);

             }

                catch (Exception exc)

                {

                    MessageBox.Show(this, exc.Message, "Ошибка инициализации");

                    Close(); // Закрываем окно

                }

                sfera = Mesh.Sphere(d3d, 0.5f, 50, 10);

                sfera_material = new Material();

                sfera_material.Diffuse = Color.Yellow;

                sfera_material.Specular = Color.White;

                radioButton1.Enabled = true;

               // FileStream textureFile = new FileStream("FROG.BMP", FileMode.Open);

               /* sfera_texture = Texture.FromStream(d3d,

                        textureFile,   // Поток данных с текстурой

                        0,             // Будем использовать как обычную текстуру

                        Pool.Managed); // Область памяти для размещения текстуры

                    textureFile.Close();*/

                        }

            private void Form1_Paint(object sender, PaintEventArgs e)

            {

                // Очищаем буфер глубины и дублирующий буфер

                d3d.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.Azure, 1.0f, 0);

                d3d.BeginScene();

                SetupProekcii();

                if (fl)

                    d3d.RenderState.FillMode = FillMode.Solid;

                else

                    d3d.RenderState.FillMode = FillMode.WireFrame;

                d3d.Material = sfera_material;

                // В качестве текстурных координат берем вектор нормали

             //   d3d.TextureState[0].TextureCoordinateIndex =

              //          (int)TextureCoordinateIndex.CameraSpaceNormal;

             //   d3d.SetTexture(0, sfera_texture);

                d3d.Transform.World = Matrix.Scaling(koef/10f,koef/10f,koef/10f)* Matrix.RotationX((float)Math.PI / 6) * Matrix.Translation(new Vector3(0, 0, 5f));

                sfera.DrawSubset(0);

                d3d.EndScene();

                //Показываем содержимое дублирующего буфера

                d3d.Present();        }

            private void SetupProekcii()

            {

                // Устанавливаем параметры источника освещения

                // Устанавливаем параметры источника освещения

                d3d.Lights[0].Enabled = true;   // Включаем нулевой источник освещения

                d3d.Lights[0].Diffuse = Color.White;         // Цвет источника освещения

                d3d.Lights[0].Position = new Vector3(0, 0, 0); // Задаем координаты

                d3d.Transform.Projection = Matrix.PerspectiveFovLH((float)Math.PI / 4, this.Width / this.Height, 1.0f, 50.0f);

            }

          private void radioButton2_Click(object sender, EventArgs e)

            {

                fl = false;

                this.Invalidate();

            }

            private void radioButton1_Click(object sender, EventArgs e)

            {

                fl = true;

                this.Invalidate();

            }

            private void цветToolStripMenuItem_Click(object sender, EventArgs e)

            {

                if (colorDialog1.ShowDialog() == DialogResult.OK)


                    sfera_material.Diffuse = colorDialog1.Color;

            }

            private void текстураToolStripMenuItem_Click(object sender, EventArgs e)

            {

                if (openFileDialog1.ShowDialog() == DialogResult.OK)

                {

                    FileStream textureFile = new FileStream(openFileDialog1.FileName, FileMode.Open);

                           sfera_texture= Texture.FromStream(d3d,

                            textureFile,   // Поток данных с текстурой

                            0,             // Будем использовать как обычную текстуру

                            Pool.Managed); // Область памяти для размещения текстуры

                        textureFile.Close();          }

            }

           private void hScrollBar1_Scroll(object sender, ScrollEventArgs e)

            {

                koef = hScrollBar1.Value;

                this.Invalidate();

            }

        }

    }

    вот я подключил в этот проект slimDX

    http://ipicture.ru/uploads/20101204/O2djHPfu.png        объекты вроде как существуют как и существовали..

    а вот методы и сво-ва не все   http://ipicture.ru/uploads/20101204/Wf5w1oRF.png   может что неправильно? 

    3 декабря 2010 г. 23:27
  • Потому что названия функций, методов и свойст не точно совпадают в slimDX и directx, например:

    d3d.RenderState.FillMode = FillMode.Solid; заменить на d3d.SetRenderState(RenderState.FillMode, FillMode.Solid);

    и так далее..

     

    Вот весь код:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using SlimDX;
    using SlimDX.Direct3D9;
    using System.IO;
    
    
    namespace WindowsFormsApplication33
    {
      public partial class Form1 : Form
      {
        Device d3d;
        Mesh sfera;
        Material sfera_material;
        bool fl = true;
        Texture sfera_texture;
        float koef = 10f;
    
        public Form1()
        {
          InitializeComponent();
    
          d3d = null;
          SetStyle(ControlStyles.ResizeRedraw, true);
          sfera = null;
          sfera_texture = null;
        }
    
        public void OnIdle(object sender, EventArgs e)
        {
          Invalidate(); // Помечаем главное окно (this) как требующее перерисовки
        }
    
        private void Form1_Load(object sender, EventArgs e)
        {
          try
          {  
            // Устанавливаем режим отображения трехмерной графики
            PresentParameters d3dpp = new PresentParameters();
            d3dpp.BackBufferCount = 1;
            d3dpp.SwapEffect = SwapEffect.Discard;
            d3dpp.Windowed = true; // Выводим графику в окно
            d3dpp.Multisample = MultisampleType.None;
            //   d3dpp.MultiSample = MultiSampleType.None; // Выключаем антиалиасинг
            d3dpp.EnableAutoDepthStencil = true; // Разрешаем создание z-буфера
            // d3dpp.AutoDepthStencilFormat = DepthFormat.D16; // Z-буфер в 16 бит
            d3dpp.AutoDepthStencilFormat = Format.D16;
            
            d3d = new DeviceEx(new Direct3DEx(), 0, DeviceType.Hardware, this.Handle, CreateFlags.SoftwareVertexProcessing, d3dpp);
    
            //d3d = new Device(0, // D3D_ADAPTER_DEFAULT - видеоадаптер по 
    
            //  // умолчанию
    
            //   DeviceType.Hardware, // Тип устройства - аппаратный ускоритель
    
            //   this, // Окно для вывода графики
    
            //   CreateFlags.SoftwareVertexProcessing, // Геометрию обрабатывает CPU
    
            //   d3dpp);
    
          }
    
          catch (Exception exc)
          {
            MessageBox.Show(this, exc.Message, "Ошибка инициализации");
            Close(); // Закрываем окно
          }
    
          //sfera = Mesh.Sphere(d3d, 0.5f, 50, 10);
          sfera = Mesh.CreateSphere(d3d, 0.5f, 50, 10);
          sfera_material = new Material();
          sfera_material.Diffuse = Color.Yellow;
          sfera_material.Specular = Color.White;
          radioButton1.Enabled = true;
    
          // FileStream textureFile = new FileStream("FROG.BMP", FileMode.Open);
    
          /* sfera_texture = Texture.FromStream(d3d,
    
               textureFile,  // Поток данных с текстурой
    
               0,       // Будем использовать как обычную текстуру
    
               Pool.Managed); // Область памяти для размещения текстуры
    
             textureFile.Close();*/
    
        }
    
        private void Form1_Paint(object sender, PaintEventArgs e)
        {
          // Очищаем буфер глубины и дублирующий буфер
          d3d.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.Azure, 1.0f, 0);
          d3d.BeginScene();
          SetupProekcii();
    
          if (fl)
            //d3d.RenderState.FillMode = FillMode.Solid;
            d3d.SetRenderState(RenderState.FillMode, FillMode.Solid);
          else
            // d3d.RenderState.FillMode = FillMode.WireFrame;
            d3d.SetRenderState(RenderState.FillMode, FillMode.Wireframe);
    
          d3d.Material = sfera_material;
    
          // В качестве текстурных координат берем вектор нормали
    
          //  d3d.TextureState[0].TextureCoordinateIndex =
    
          //     (int)TextureCoordinateIndex.CameraSpaceNormal;
    
          //  d3d.SetTexture(0, sfera_texture);
    
          // d3d.Transform.World = Matrix.Scaling(koef / 10f, koef / 10f, koef / 10f) * Matrix.RotationX((float)Math.PI / 6) * Matrix.Translation(new Vector3(0, 0, 5f));
          d3d.SetTransform(TransformState.World, Matrix.Scaling(koef / 10f, koef / 10f, koef / 10f) * Matrix.RotationX((float)Math.PI / 6) * Matrix.Translation(new Vector3(0, 0, 5f)));
          sfera.DrawSubset(0);
          d3d.EndScene();
          //Показываем содержимое дублирующего буфера
          d3d.Present();
        }
    
        private void SetupProekcii()
        {
          // Устанавливаем параметры источника освещения
    
          // Устанавливаем параметры источника освещения
    
          d3d.EnableLight(0, true);
    
          Light l = d3d.GetLight(0);
          l.Diffuse = Color.White;
          l.Position = new Vector3(0, 0, 0);
    
          //d3d.SetLight(0, l);
    
          //d3d.Lights[0].Enabled = true;  // Включаем нулевой источник освещения
    
          // d3d.Lights[0].Diffuse = Color.White;     // Цвет источника освещения
    
    
          //d3d.Lights[0].Position = new Vector3(0, 0, 0); // Задаем координаты
    
          // d3d.Transform.Projection = Matrix.PerspectiveFovLH((float)Math.PI / 4, this.Width / this.Height, 1.0f, 50.0f);
          d3d.SetTransform(TransformState.Projection, Matrix.PerspectiveFovLH((float)Math.PI / 4, this.Width / this.Height, 1.0f, 50.0f));
    
        }
    
        private void radioButton2_Click(object sender, EventArgs e)
        {
          fl = false;
          this.Invalidate();
        }
    
        private void radioButton1_Click(object sender, EventArgs e)
        {
          fl = true;
          this.Invalidate();
        }
    
        private void цветToolStripMenuItem_Click(object sender, EventArgs e)
        {
          if (colorDialog1.ShowDialog() == DialogResult.OK)
            sfera_material.Diffuse = colorDialog1.Color;
        }
    
        private void текстураToolStripMenuItem_Click(object sender, EventArgs e)
        {
          if (openFileDialog1.ShowDialog() == DialogResult.OK)
          {
            FileStream textureFile = new FileStream(openFileDialog1.FileName, FileMode.Open);
            sfera_texture = Texture.FromStream(d3d,
             textureFile,  // Поток данных с текстурой
    
             0,       // Будем использовать как обычную текстуру
    
             Pool.Managed); // Область памяти для размещения текстуры
    
            textureFile.Close();
          }
    
        }
    
        private void hScrollBar1_Scroll(object sender, ScrollEventArgs e)
        {
    
          koef = hScrollBar1.Value;
    
          this.Invalidate();
    
        }
    
      }
    
    }
    


    Для связи [mail]
    7 декабря 2010 г. 13:01
  • Все проблема решена!

    я скачал недавно вышедшие обновление к VS 2010  http://www.microsoft.com/downloads/en/details.aspx?FamilyID=11ea69cb-cf12-4842-a3d7-b32a1e5642e2&displaylang=en

    потом поставил последние DirectX

    http://www.microsoft.com/downloads/en/details.aspx?displaylang=en&FamilyID=3021d52b-514e-41d3-ad02-438a3ba730ba

    правда в  Net.framework 4 я их не увидел, но так через браузер можно добавлять и все работает !

    9 декабря 2010 г. 20:31