文档章节

Direct2D (7) : 空间变换

涂孟超
 涂孟超
发布于 2014/09/26 15:38
字数 291
阅读 11
收藏 0

{相关方法} 
TDirect2DCanvas.RenderTarget.SetTransform();
TDirect2DCanvas.RenderTarget.GetTransform();

{相关结构}
TD2DMatrix3x2F (或D2D_MATRIX_3X2_F) //因第三列的值在这里是固定的(0,0,1),所以这里用的是 3*2 的矩阵;该结构重载了 * 运算符

{TD2DMatrix3x2FHelper 为 TD2DMatrix3x2F 提供的方法(多为 class 方法)}
Identity();     //初始化 TD2DMatrix3x2F,默认值:_11、_22 为 1.0,其它是 0
Translation();  //平移
Scale();        //放缩
Rotation();     //旋转
Skew();         //斜切
Determinant();  //计算行列式
IsInvertible(); //是否可逆
Invert();       //逆向运算
SetProduct();   //乘

{相关全局函数}
D2D1MakeRotateMatrix();   //旋转
D2D1MakeSkewMatrix();     //斜切
D2D1IsMatrixInvertible(); //是否可逆
D2D1InvertMatrix();       //逆向运算


测试代码:

uses Direct2D, D2D1;

procedure TForm1.FormPaint(Sender: TObject);
var
  cvs: TDirect2DCanvas;
  pts: array[0..2] of TPoint;
  matrix: TD2DMatrix3x2F;
begin
  pts[0] := Point(ClientWidth div 2, ClientHeight div 2);
  pts[1] := Point(ClientWidth div 5, ClientHeight div 2);
  pts[2] := Point(ClientWidth div 2, ClientHeight div 5);

  cvs := TDirect2DCanvas.Create(Canvas, ClientRect);
  cvs.BeginDraw;
  cvs.Brush.Style := bsClear;

  {原始}
  cvs.Pen.Color := clSilver;
  cvs.Pen.Width := 9;
  cvs.Polygon(pts);

  cvs.Pen.Width := 2;

  {平移}
  matrix := TD2DMatrix3x2F.Translation(90, 50);
  cvs.RenderTarget.SetTransform(matrix);
  cvs.Pen.Color := clRed;
  cvs.Polygon(pts);

  {放缩}
  matrix := TD2DMatrix3x2F.Scale(1.5, 0.5, pts[0]);
  cvs.RenderTarget.SetTransform(matrix);
  cvs.Pen.Color := clBlue;
  cvs.Polygon(pts);

  {旋转}
  matrix := TD2DMatrix3x2F.Rotation(90, pts[0]);
//  D2D1MakeRotateMatrix(90, pts[0], @matrix); //同上一行
  cvs.RenderTarget.SetTransform(matrix);
  cvs.Pen.Color := clGreen;
  cvs.Polygon(pts);

  {斜切}
  matrix := TD2DMatrix3x2F.Skew(60, 0, pts[0]);
//  D2D1MakeSkewMatrix(60, 10, pts[0], @matrix); //同上一行
  cvs.RenderTarget.SetTransform(matrix);
  cvs.Pen.Color := clPurple;
  cvs.Polygon(pts);

  cvs.EndDraw;
  cvs.Free;
end;

procedure TForm1.FormResize(Sender: TObject);
begin
  Repaint;
end;


效果图:



本文转载自:http://www.cnblogs.com/del/archive/2011/04/01/2001989.html

共有 人打赏支持
涂孟超
粉丝 12
博文 2011
码字总数 14107
作品 0
深圳
程序员
私信 提问
Direct2D教程(十一)几何变换

什么是几何变换(Transform) 在图形学中,主要有三种几何变换,分别是平移(Translate),旋转(Rotation)和缩放(Scaling)。在D2D中,这三种变换都有实现,而且还有一种不太常见的变换,...

吞吞吐吐的
2017/09/12
0
0
Direct2D教程(十二)图层

什么是Layers? Layer,中文译成图层,在Direct2D中可以用来完成一些特殊效果,使用Layer的时候,先将Layer Push到render target,然后进行绘制,此时是直接绘制在Layer上的,绘制完毕后,将...

吞吞吐吐的
2017/10/26
0
0
深度解读 - Windows 7核心图形架构细致分析(转贴)

原帖地址:http://technet.microsoft.com/zh-cn/library/ee921514.aspx 如现在大家所想的那样, Windows7 其实是 Windows Vista 的改进版。 Windows 7 在 Windows Vista 的基础上进行了大量的...

迈克老狼1
2012/12/23
0
0
WhiteStarUML 5.6.1 发布,UML 建模软件

WhiteStarUML 发布了 5.6.1 版本。 该版本的改动: 1. 新增选项:现在可以在 Windows 7+上面选择启用 Direct2D 来绘制反锯齿图形。勾选 General -> Use Direct2D 2. 添加了“复制/粘贴格式”...

daxiaoming
2015/01/26
2.8K
9
使用 Direct2D 绘制分层窗口

这是我关于Direct2D的第三篇介绍了,今天主要讲下其无可比拟的互操作性。为了避免繁缛末节的讲述,我们从一个实例入手:层级窗口。相对于windows的其它众多功能。层级窗口并未做相应的更新,...

Dy_
2014/01/16
8.2K
10

没有更多内容

加载失败,请刷新页面

加载更多

Ubuntu16.04下安装docker

[TOC] 本文开发环境为Ubuntu 16.04 LTS 64位系统,通过apt的docker官方源安装最新的Docker CE(Community Edition),即Docker社区版,是开发人员和小型团队的理想选择。 1. 开始安装 1.1 由于...

豫华商
24分钟前
3
0
使用XShell工具密钥认证登录Linux系统

如果你是一名Linux运维,那么Linux服务器的系统安全问题,可能是你要考虑的,而系统登录方式有两种,密码和密钥。哪一种更加安全呢? 无疑是后者! 这里我为大家分享用Xshell利器使用密钥的方...

dragon_tech
36分钟前
1
0
day178-2018-12-15-英语流利阅读-待学习

“真蛛奶茶”了解一下?蜘蛛也会产奶了 Lala 2018-12-15 1.今日导读 “蛋白质含量是牛奶的 4 倍,并有着更低的脂肪和含糖量”,听起来诱人又美味的并不是羊奶或豆奶,而是你可能打死都想不到...

飞鱼说编程
41分钟前
8
0
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents

场景重现 npm install --verbose 安装依赖的时,出现如下警告 强迫症患者表示不能接受 npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@1.2.4 (node_modules\fsevents):npm WARN......

taadis
46分钟前
2
0
OSChina 周六乱弹 —— 你一口我一口多咬一口是小狗

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @达尔文 :分享Roy Orbison的单曲《She's a Mystery to Me》 《She's a Mystery to Me》- Roy Orbison 手机党少年们想听歌,请使劲儿戳(这里...

小小编辑
今天
350
6

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部