Graphics/DirectX

Direct X - 3. 글자출력

MOLOKINI 2014. 6. 1. 21:02
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;   // 2강에서 추가된 네임스페이스
using System.Windows.Forms; // 메세지 박스
using System.Drawing;       // Color속성 사용

using Microsoft.DirectX;
using Microsoft.DirectX.Direct3D;   // 라이브러리 두개 추가

namespace ddrawexercise
{
    public partial class MDX : IDisposable // 관리되지 않는 리소스 해제
    {
        private Microsoft.DirectX.Direct3D.Font _font = null;

        // 탑레벨 윈도우 : 모든 초기화가 OK면 true, 하나라도 실패하면 false를 리턴한다.
        // false를 리턴하게되면 자동으로 종료된다.
        public bool InitializeApplication(Form1 topLevFORM)
        {
            this._form = topLevFORM;

            try
            {
                this.CreateDevice(topLevFORM);

                FontDescription fd = new FontDescription();
                fd.Height = 24;
                fd.FaceName = "고딕";

                this._font = new Microsoft.DirectX.Direct3D.Font(this._device, fd);
            }
            catch(DirectXException ex)
            {
                MessageBox.Show(ex.ToString(), "에러", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            return true;
        }

        public void MainLoop()  // 메인루프
        {
            //화면을 파란색으로 클리어, 클리어 하지 않으면 전에 출력된 내용이 남는다
            this._device.Clear(ClearFlags.Target, Color.DarkBlue, 1.0f, 0);
            // flags : 클리어 하는 내용 지정, color : 클리어 할 색, 나머지는 z버퍼와 스탠실버퍼 통상 1.0과 0


            this._device.BeginScene();  
            // beginScene과 endScene사이에 그릴 내용을 코딩한다
            this._font.DrawText(null, "Rectangle 구조체와 텍스트 포맷",
                new Rectangle(100, 260, 500, 400),
                DrawTextFormat.Left | DrawTextFormat.Top, Color.LightPink);

            this._font.DrawText(null, "두줄출력도" + Environment.NewLine + "가능",
                new Rectangle(400, 320, 500, 400),
                DrawTextFormat.Left | DrawTextFormat.Top, Color.LightGreen);
            this._device.EndScene();

            this._device.Present(); // 실제 디바이스에 출력
        }

        public void Dispose()   // 자원의 파기
        {
            if (this._device != null)
            {
                this._device.Dispose();
            }   // Direct 3D 디바이스의 자원 해제

        }
    }
}
 
 
시뻘건 부분이 바로 그것, 폰트부분이다!
여러가지 글자속성이 필요하다면 글자변수를 많이 만들면 된다!
 
 this._font = new Microsoft.DirectX.Direct3D.Font(this._device, fd);
Direct3D.Font 구조체
this._device : 폰트가 적용될 디바이스 설정
fd : 폰트속성 사용
이탤릭이나 진하게 이런거 다돼
 
Environment.NewLine : 줄바꾸기야, \r\n 요게 줄바꾸기인데, 이걸쓰는걸 추천해
DrawTextFormat.Singleline : 이렇게 설정이 되어있으면 줄이 안바뀌어
 
     this._font.DrawText(null, "두줄출력도" + Environment.NewLine + "가능",
                new Rectangle(400, 320, 500, 400),
                DrawTextFormat.Left | DrawTextFormat.Top, Color.LightGreen);
 
Direct3D.Font.DrawText 구조체
sprite : 스프라이트 클래스를 이용해서 그리기 효율을 올린다. 없으면 걍 null
text : 그리려는 문자열
rect : 그릴 범위
format : 서식설정, drawTextFormat 열거형의 편성을 지정한다.
color : 글씨색