Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Исчезновение освещения

50K
29 августа 2009 года
molotov
5 / / 09.07.2009
Уже задавал этот вопрос в другой теме, но никто не ответил.
Начав изучать DirectX столкнулся с такой проблемой - если используется освещение, то оно исчезает при изменении размеров окна и больше не восстанавливается, предотвратить это можно отменой события DeviceResizing, что отрицательно сказывается на качестве картинки. Как это исправить?
Сам код:

Код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Microsoft.DirectX;
using Microsoft.DirectX.Direct3D;

namespace DXtriangle3DLight
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            this.SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.Opaque, true);
        }

        private Device device = null;
        float angle = 0;

        public void InitializeGraphics()
        {
            PresentParameters presentParams = new PresentParameters();
            presentParams.Windowed = true;  //приложение оконное
            presentParams.SwapEffect = SwapEffect.Discard;  //видеокарта сама определяет режим работы с буфером
            device = new Device(0, DeviceType.Hardware, this, CreateFlags.SoftwareVertexProcessing, presentParams);
            device.DeviceResizing+=new CancelEventHandler(this.CanselResize);
        }

        private void CanselResize(object sender, CancelEventArgs e)
        {
            //e.Cancel = true;            
        }

        private void SetupCamera()
        {
            device.Transform.Projection = Matrix.PerspectiveFovLH((float)Math.PI / 4, (float)this.Width / this.Height, 1f, 100f);
            device.Transform.View = Matrix.LookAtLH(new Vector3(0, 0, 5), new Vector3(0, 0, 0), new Vector3(0, 1, 0));
            //device.RenderState.Lighting = false;
            device.RenderState.CullMode = Cull.None;
            device.RenderState.NormalizeNormals = true;            
            device.Transform.World = Matrix.RotationAxis(new Vector3(angle / ((float)Math.PI * 2), angle / ((float)Math.PI * 4), angle / ((float)Math.PI * 6)), angle / (float)Math.PI);
            angle += 0.1f;
        }

        private void SetupLights()
        {
            device.Lights[0].Type = LightType.Point;
            device.Lights[0].Position = new Vector3(0, 0, 0);
            device.Lights[0].Diffuse = Color.White;
            device.Lights[0].Attenuation0 = 0.2f;
            device.Lights[0].Range = 10000f;
            device.Lights[0].Enabled = true;
        }        

        private CustomVertex.PositionNormalColored[] TriangleN()
        {
            CustomVertex.PositionNormalColored[] verts = new CustomVertex.PositionNormalColored[3];
            verts[0].Position = new Vector3(0f, 1f, 1f);
            verts[0].Normal = new Vector3(0f, 0f, -1f);
            verts[0].Color = Color.Orange.ToArgb();
            verts[1].Position = new Vector3(-1f, -1f, 1f);
            verts[1].Normal = new Vector3(0f, 0f, -1f);
            verts[1].Color = Color.Purple.ToArgb();
            verts[2].Position = new Vector3(1f, -1f, 1f);
            verts[2].Normal = new Vector3(0f, 0f, -1f);
            verts[2].Color = Color.Green.ToArgb();
            return verts;
        }

        protected override void OnPaint(PaintEventArgs e)
        {
            device.Clear(ClearFlags.Target, Color.CadetBlue, 1f, 0);
            SetupCamera();
            SetupLights();
            device.BeginScene();
            device.VertexFormat = CustomVertex.PositionNormalColored.Format;
            device.DrawUserPrimitives(PrimitiveType.TriangleList, 1, TriangleN());          
            device.EndScene();
            device.Present();
            this.Invalidate();
        }
    }
}
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог