Win10系列:VC++绘制几何图形1

本小节主要介绍如何使用Direct2D来绘制几何图形,其中会使用到FillGeometry函数和FillEllipse函数,FillGeometry函数用于填充几何图形的内部区域,而FillEllipse函数则专门用于填充椭圆的内部区域。下面将分别来介绍如何使用FillGeometry函数和FillEllipse函数在应用窗口中绘制简单的三角形和圆形。

1.使用FillGeometry函数绘制三角形

本示例中所要添加的代码比较多,为了让读者能更为清晰地了解如何使用Direct2D绘制几何图形,下面将分为四部分来介绍使用FillGeometry函数绘制三角形的步骤。其中第一部分首先介绍如何新建Direct2D中的资源,第二部分紧接着介绍如何初始化和激活应用窗口,接下来在第三部分中具体来介绍使用FillGeometry函数绘制三角形的方法,最后一部分将介绍如何为项目添加主入口函数,以便于项目能正常运行。

(1)新建Direct2D资源

在使用FillGeometry函数绘制几何图形之前,首先需要新建Direct2D资源,这些资源包括独立于设备的资源和依赖于设备的资源。Direct2D中独立于设备的资源包括ID2D1Factory工厂接口、IDWriteFactory工厂接口、ID2D1Geometry接口和ID2D1GeometrySink接口等,在显示设备发生改变时这些资源不会被重新创建,如显示设备的分辨率发生改变,以及远程桌面连接断开等。下面列举出了Direct2D中常用的独立于设备的资源:

  • ID2D1Factory工厂接口,用于新建Direct2D中的资源。
  • IDWriteFactory工厂接口,用于创建DirectWrite类的对象。
  • ID2D1Geometry接口,绘制弧线、曲线和线段所需的接口。
  • ID2D1GeometrySink接口,绘制线段、弧线、三次方和二次方贝塞尔曲线所需的接口。

Direct2D中依赖于设备的资源包括ID2D1Brush接口、ID2D1Layer接口、ID2D1RenderTarget接口和ID2D1DeviceContext接口等,这些资源会在GPU可用的情况下直接映射到GPU上,并且当显示设备发生改变时将会重新创建这些资源。下面列举出了Direct2D中常用的依赖于设备的资源:

  • ID2D1SolidColorBrush接口,用于绘制纯色区域的画刷。
  • ID2D1Layer接口,实现图层的接口。
  • ID2D1RenderTarget接口,用于渲染图形的接口。
  • ID2D1DeviceContext接口,继承自ID2D1RenderTarget的接口。

在Visual Staudio 2012中新建一个Visual C++的Windows应用商店的Direct3D应用程序项目,并命名为Direct2DDemo。由于本示例中并没有用到Direct3D应用程序项目默认的绘图代码,读者可以分别右键点击BasicTimer.h、CubeRenderer.cpp、CubeRenderer.h、Direct2DDemo.cpp、Direct2DDemo.h、Direct3DBase.cpp、Direct3DBase.h、SimplePixelShader.hlsl和SimpleVertexShader.hlsl文件,并在弹出的菜单栏中选中"移除",将这些不必要的文件从项目中移除掉,以保证在本示例中所要添加的代码不会和项目中默认的代码产生冲突。

接着打开pch.h头文件,并引用如下的头文件,在使用Direct2D绘制图形的过程中将会用到定义在这些头文件中的类。

#include <wrl.h>

#include <d3d11_1.h>

#include <d2d1_1.h>

#include <d2d1effects.h>

#include <d2d1_1helper.h>

#include <dwrite_1.h>

#include <wincodec.h>

#include <math.h>

#include <agile.h>

引用了上面的头文件以后,接下来在解决方案资源管理器窗口中右键点击项目图标,在弹出的菜单栏中选中"添加", 并在"添加"的子菜单栏中选择"新建项",在出现的"添加新项"窗口中选中"C++ 文件(.cpp)",添加名为"DirectXBase.cpp"的源文件。然后使用同样的方法在"添加新项"窗口中选中"头文件(.h)",添加名为"DirectXBase.h"的头文件。这里新建Direct2D资源的实现代码以及第二部分中用于初始化应用窗口的实现代码将添加在DirectXBase.cpp源文件中,而DirectXBase.h头文件则用于声明在DirectXBase.cpp源文件中使用到的函数和变量。

下面来介绍如何新建Direct2D中独立于设备的资源,首先打开DirectXBase.h头文件,并添加如下代码用于定义一个DirectXBase类。

#include "DirectXHelper.h"

ref class DirectXBase abstract

{

internal:

    //声明构造函数DirectXBase

    DirectXBase();

};

定义了DirectXBase类以后,接下来在此类中添加如下的代码,用于声明在创建独立于设备的资源的过程中使用到的成员变量和函数。

protected private:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值