Direct2D中的2D显示
来源:互联网 发布:推荐等身大抱枕淘宝店 编辑:程序博客网 时间:2024/05/29 13:36
Dx11中的2D显示抛弃了Dx8和Dx9中的 ID3DxSprite 绘制精灵,也出乎意料的(出乎我的意料 :) )没有采用顶点方式而是返璞归真走向了表面。现在的Direct2D更像是GDI了~~~
DX11上Direct2D的第一个例题就是绘制一个笔刷~~这在原来是不可能实现的;原来的ID3DxSprite 只能够绘制基于纹理的格式,比如我们要做一个效果,当选中一个Button的时候,这个Button边界线会高亮显示,这在原来必须依靠制作这样的纹理来实现,现在不同了,你可以定义一个线条笔刷,给他个范围,画一个矩形就完成了!~~
Creating a Simple Direct2D Application
这个立体绘制了一个矩形框,一个蓝色填充的矩形和网格的背景;这些都是Direct2D自己绘制的,没有用任何的纹理。
我们这个程序使用的是一个标准的Win32API程序,和微软标准的例题不一样,要比那个简单。
1)头文件
// Windows Header Files: #pragma once // Windows 头文件: #include <windows.h> #include <tchar.h>这几个头文件是win32平台必须的头文件,外加Dx11的2D头文件,这里不用倒入Dx11的头文件,因为Direct2D和Dx11的3D库是相对独立的。
#include <d2d1.h>
与之相关的lib库是D2d1.lib,它的名字是D2d1,估计也是尝试性的一个库,以后还会出D2d2,D2d3.....
//-----------------全局变量------------------------------ HINSTANCE hInst; // 当前实例 ID2D1Factory* pD2DFactory = NULL; // 2D工厂 ID2D1SolidColorBrush* pBlackBrush = NULL; // 实例笔刷 ID2D1HwndRenderTarget* m_pRenderTarget = NULL; // 渲染面
创建一个函数,初始化2D环境
LRESULT InItD2D(HWND hWnd) { //创建一个单线程irect2D资源指针 HRESULT hr = D2D1CreateFactory(D2D1_FACTORY_TYPE_SINGLE_THREADED,&pD2DFactory); // Obtain the size of the drawing area. GetClientRect(hWnd, &rc); // Create a Direct2D render target // 根据窗口大小生成一个渲染表面 hr = pD2DFactory->CreateHwndRenderTarget(D2D1::RenderTargetProperties(), D2D1::HwndRenderTargetProperties(hWnd,D2D1::SizeU(rc.right - rc.left, rc.bottom - rc.top)), &m_pRenderTarget); // 在表面上加入3个笔刷 if (SUCCEEDED(hr)) { m_pRenderTarget->CreateSolidColorBrush(D2D1::ColorF(D2D1::ColorF::SteelBlue),&pBlackBrush); m_pRenderTarget->CreateSolidColorBrush(D2D1::ColorF(D2D1::ColorF::Gray),&pSteelBlueBrush); m_pRenderTarget->CreateSolidColorBrush(D2D1::ColorF(D2D1::ColorF::GreenYellow),&pGreenBrush); } return hr; }
生成笔刷以后,就可以绘制表面了
VOID Rander() { if(!m_pRenderTarget) return ; m_pRenderTarget->BeginDraw(); m_pRenderTarget->SetTransform(D2D1::Matrix3x2F::Identity()); m_pRenderTarget->Clear(D2D1::ColorF(D2D1::ColorF::White)); // Draw a grid background for (int x = 0; x < width; x += 10) { //画格子线 m_pRenderTarget->DrawLine( D2D1::Point2F(static_cast<FLOAT>(x), 0.0f), D2D1::Point2F(static_cast<FLOAT>(x), height), pGreenBrush, 0.5f ); } for (int y = 0; y < height; y += 10) { m_pRenderTarget->DrawLine( D2D1::Point2F(0.0f, static_cast<FLOAT>(y)), D2D1::Point2F(width, static_cast<FLOAT>(y)), pGreenBrush, 0.5f ); } // 画矩形线框 m_pRenderTarget->DrawRectangle( D2D1::RectF(rc.left + 200.0f,rc.top + 200.0f,rc.right - 200.0f,rc.bottom - 200.0f), pSteelBlueBrush); // 画矩形区域 m_pRenderTarget->FillRectangle( D2D1::RectF(rc.left + 300.0f,rc.top + 300.0f,rc.right - 300.0f,rc.bottom - 300.0f), pBlackBrush); m_pRenderTarget->EndDraw(); }
- Direct2D中的2D显示
- [Direct2D]DX11中的2D显示
- Direct2D中的坐标变换
- Direct2D中的坐标变换
- Direct2D中的坐标变换
- Direct2D中的IWICBitmap接口
- Direct2D中的DirectWrite
- Direct2D在VC中的使用
- Direct2D图像显示不全的问题
- Ogre中的2D显示方法(转)
- OGRE显示2d
- MFC 用 Direct2D 显示图像到 Picture Control 中
- opencv Mat显示到指定窗体 Direct2D实现
- Direct2D教程(二)来看D2D世界中的Hello,World
- Direct2D 及 WPF手动绘图中的线宽问题
- Direct2D教程(二)来看D2D世界中的Hello,World
- Direct3D中的2D
- Ogre的2D显示
- 【iPhone】网络编程
- Nginx-负载均衡
- android ListView 几个重要属性
- Solr自定义排序
- WIFI无线网络5G 5.8G(5.8GHz)频谱各信道及对应频率
- Direct2D中的2D显示
- SGU132 状态压缩~最优值
- linux下scp命令详解
- sizeof()用法汇总
- 什么是.do文件?
- android中activity的四种启动模式
- 使用百度地图离线JavaScript API加载本地瓦片地图
- 50个必备的实用jQuery代码段
- ASP.NET:自定义实体类