置顶随笔

[置顶]用DirectX实现魔方(一)

摘要: 关于魔方魔方英文名字叫做Rubik's Cube,是由匈牙利建筑学教授和雕塑家Ernő Rubik于1974年发明,最初叫做Magic Cube(这大概也是中文名字的来历吧),1980年Ideal Toys公司开始销售此玩具,并将名字改为Rubik's Cube。魔方在80年代最为风靡,至今未衰。截至2009年1月,魔方在全世界已经售出了3亿五千多万个。最常见的魔方是三阶魔方,由27个小方块构成,共三层,每层9个小方块。我的Demo实现的就是三阶魔方。其他的魔方种类有二阶,四阶及更高阶,也有钻石魔方,五边形魔方,三角魔方等。三阶魔方所有可能的排列数是43252003274489阅读全文

posted @ 2013-06-28 09:18 zdd 阅读(3982) 评论(33) 编辑

2016年1月22日

两个Fragment之间如何传递数据

摘要: FragmentA启动FragmentB,做一些选择操作后,返回FragmentA,需要把FragmentB里面选择的数据传回来。有什么办法?Fragment之间不能直接通信,必须通过Activity来完成,具体步骤。1. 在FragmentA中定义接口通信接口,通过该接口向Activity发送数据...阅读全文

posted @ 2016-01-22 16:01 zdd 阅读(22) 评论(0) 编辑

2016年1月21日

SmartImageView

摘要: ==public class SmartImageView extends ImageView { public SmartImageView(Context context) { super(context); } public SmartImageView(...阅读全文

posted @ 2016-01-21 22:30 zdd 阅读(5) 评论(0) 编辑

2016年1月18日

onSingleTapUp()和onSingleTapConfirmed()的区别

摘要: onSingleTapUp() - 在按下并抬起时发生,只要符合这个条件就触发该函数,没有任何附加条件。onSingleTapConfirmed() 同上者,但有附加条件,就是Android会确保单击之后短时间内没有再次单击,才会触发该函数。举个列子,如果监听双击事件:onSingleTapUp()...阅读全文

posted @ 2016-01-18 20:20 zdd 阅读(8) 评论(0) 编辑

2016年1月12日

Android Fragment add/replace以及backstack

摘要: 无论Fragment以何种方式加入,都不会影响backstack,backstack由addToBackStack函数决定,只有调用了这个函数,才会将Fragment加入返回栈。这个说法其实不太准确,返回栈记录的是Fragment切换的过程,所以加入返回栈的是Transaction,而不是Fragm...阅读全文

posted @ 2016-01-12 10:48 zdd 阅读(13) 评论(0) 编辑

2015年12月21日

InputStream与InputStreamReader的区别

摘要: InputStream是字节流,多用于读取二进制数据InputStreamReader是字符流,多用于读取文本文件。有不同的编码方式,如utf8等。可以在构造的时候指定编码方式。例如,两者都有一个无参read函数,前者读取一个字节并转换为int(0-255),后者读取一个字符并转换为int(最高两位...阅读全文

posted @ 2015-12-21 11:02 zdd 阅读(24) 评论(0) 编辑

2015年11月8日

Android手动签名

摘要: 在生成release build时可实现自动签名,所谓手动签名,就是在命令行下完成签名,落实到Android Studio里面,就是在terminal里面做。下面是三个命令,第一个签名,第二个验证,第三个对齐压缩。第三个命令可能会找不到zipalign这个命令,那么可以切换到zipalign所在的目...阅读全文

posted @ 2015-11-08 16:49 zdd 阅读(64) 评论(0) 编辑

2015年10月30日

使用后台服务数据更新UI

摘要: https://www.websmithing.com/2011/02/01/how-to-update-the-ui-in-an-android-activity-using-data-from-a-background-service/阅读全文

posted @ 2015-10-30 10:16 zdd 阅读(46) 评论(0) 编辑

2015年10月29日

Perl重命名当前目录下的文件

摘要: 下载的zip包解压后,中文都变成了乱码,就写了个脚本重命名文件。use strict;use warnings;use Cwd;sub main { my $dir = getcwd(); opendir my $DH, $dir or die "Can not open ...阅读全文

posted @ 2015-10-29 10:18 zdd 阅读(33) 评论(0) 编辑

2015年8月29日

PS 多次剪裁同一图片

摘要: 一个图品里面有两个小图,要分别抠出来。我以前的做法是,先扣一个,重新打开文件,再扣另外一个。今天发现一个简单的办法,不用重新打开文件。就是在扣完第一个的时候,打开历史记录面板,双击打开动作,就可以查看原始图片,再扣另外一个就行了。如果动作面板没有打开,可以在菜单栏中选择窗口-历史记录来开启。==阅读全文

posted @ 2015-08-29 17:00 zdd 阅读(65) 评论(0) 编辑

2015年8月23日

Win + D 和 Win + M的区别

摘要: 在Windows系统上,Win + D是显示桌面,Win + M是最小化所有窗口,咋一看,这两个快捷键貌似没有区别,但是在某些方面还是有细微的区别。威力从威力上来说,Win + D更牛逼一,因为显示桌面意味着所有窗口都得消失,但是Win + M则不一定,比如,对于不支持最小化的窗口,Win + M是...阅读全文

posted @ 2015-08-23 09:56 zdd 阅读(141) 评论(0) 编辑

2015年8月10日

使用ViwePager显示图片时如何防止内存泄露。

摘要: 内存泄露的检测。1. 在Android Studio中运行你的应用,然后切换到输出窗口的Android tab。2. 尽情的玩耍你的应用,最好各个功能都用到,如果是Viewpager,则多滑动一些页面,观察内存的增长情况。如果是下面这样大致平稳的曲线,就没有内存泄露。如果是下面这样,阶梯状的曲线,基...阅读全文

posted @ 2015-08-10 14:27 zdd 阅读(220) 评论(0) 编辑

2015年8月8日

onCreateView中加载大位图

摘要: 我的一个Fragment中,加载了一个1024*1024的图片,非常卡。解决办法1. 将图片改为512*5122. 异步加载。final SmartImageView mizige = (SmartImageView)view.findViewById(R.id.mizige); //...阅读全文

posted @ 2015-08-08 08:57 zdd 阅读(61) 评论(0) 编辑

2015年8月5日

在XML drawable中引用自定义颜色

摘要: ==先看一下一个xml drawable文件,这是一个button的样式。可以看到这里好几处用到了颜色,但是都是直接指定颜色值,如果我想引用一个外部颜色,比如定义在values/refs里面的。那该怎么办呢?先在values/refs.xml文件里面定义颜色,如下: #FFFFFF #0...阅读全文

posted @ 2015-08-05 15:38 zdd 阅读(343) 评论(0) 编辑

2015年7月27日

使用Handler的步骤

摘要: 1. 在Activity中定义Handler并实现handleMessage方法用来处理接收到的消息。2. 定义一个Runable实例,并在run方法中设置和发送消息(使用Bundle实现)3. 新建一个Thread并运行步骤2中的Runable。调用Thread.start().完整代码publi...阅读全文

posted @ 2015-07-27 16:40 zdd 阅读(78) 评论(0) 编辑

android:onClick vs setOnClickListener

摘要: 为Android Widgets添加点击事件处理函数又两种方法,一个是在Xml文件中添加onClick属性,然后在代码中添加对应的函数。另一个是直接在代码中添加setOnClickListener函数。两者什么区别呢?以Button控件为例讲解一下。方法一在Xml中添加onClick属性 在代...阅读全文

posted @ 2015-07-27 14:34 zdd 阅读(87) 评论(0) 编辑

2014年11月23日

【IOS】Target membership

摘要: Target membership是指XCode中,一个文件属于哪一个工程,在XCode左侧的工程面板中选中一个文件,在XCode右侧的属性面板中会显示其Target Membership,如下图。当前的文件AppDelegate.m属于书谱这个Target。Target Membership的一些...阅读全文

posted @ 2014-11-23 20:26 zdd 阅读(2096) 评论(0) 编辑

获取IOS应用的子目录

摘要: 在开发IOS应用时,我们经常需要将素材分类,并放入相应地子目录中。在开发代码时,需要访问这些素材时,就需要获取对应的子目录路径。那么如何获取呢?获取应用路径首先,要找到应用所在的路径。NSString *bundlePath = [[NSBundle mainBundle] bundlePath];...阅读全文

posted @ 2014-11-23 17:55 zdd 阅读(2141) 评论(1) 编辑

2014年6月28日

Direct2D教程(外篇)环境配置

摘要: 2014年世界杯首场淘汰赛马上开始了,闲着没事,整理以前的博客草稿打发时间,意外的发现这篇文章,本来是打算加入到Direct2D那个系列的,不知道为什么把它给遗漏了。环境配置,对于熟手来说,不是什么重要的东西,但是对于新手却很重要,尤其是没有接触过Direct2D的朋友们,整理一下发了出来,没有放博...阅读全文

posted @ 2014-06-28 23:53 zdd 阅读(2209) 评论(0) 编辑

2014年6月10日

链表逆序(递归法)

摘要: 来自SO,貌似没啥实际应用,但是思路不错,留存。#include #include using namespace std;struct node{ int data; node* next; node(int d, node* p):data(d), next(p){}};voi...阅读全文

posted @ 2014-06-10 16:23 zdd 阅读(477) 评论(0) 编辑

2014年5月31日

GLFW初体验

摘要: GLFW - 很遗憾,没有找到FW的确切含义,Wiki上没有,GLFW主页也没有。猜测F表示for,W表示WindowGLFW是干啥用的?一个轻量级的,开源的,跨平台的library。支持OpenGL及OpenGL ES,用来管理窗口,读取输入,处理事件等。因为OpenGL没有窗口管理的功能,所以很...阅读全文

posted @ 2014-05-31 08:42 zdd 阅读(7155) 评论(14) 编辑

2013年9月16日

用DirectX实现魔方(三)视角变换及缩放(附源码)

摘要: 在本系列第一篇介绍过鼠标按键的功能,如下。左键拖拽 - 旋转魔方右键拖拽 - 变换视角滚轮 - 缩放魔方今天研究一下如何实现后面两个功能,用到的技术主要是Arcball,Arcball是实现Model-View-Camera的重要技术,这里的旋转基于Quaternion(四元数)来实现,当然也可以通过欧拉角来实现,但是欧拉角的旋转不够平滑。先看一下Model-View-Camera的效果,如下,这个gif效果图是用LICEcap录制的,帧率有些慢,略有卡顿现象,大家可以下载文末的可执行文件查看更加平滑的效果。右键拖拽 - 变换视角由上面的动画可以看到,通过用户按下并拖拽鼠标右键即可以旋转视角(阅读全文

posted @ 2013-09-16 09:50 zdd 阅读(3637) 评论(14) 编辑

2013年7月10日

用DirectX实现魔方(二)

摘要: 这篇说一下如何构造魔方,主要包括魔方几何体的构造及纹理贴图。以下论述皆以三阶魔方为例,三阶魔方共有3 x 3 x 3 = 27个小立方体。构造魔方在第一篇里面说过,最初模型用的是微软的.x文件格式,由于魔方要实现按层旋转,所以不能将整个模型做成一个.x文件,只能分成若干个小立方体,每个立方体对应一个.x文件。这导致在发布程序的时候也要发布这些模型文件,而且.x文件已经逐渐为微软遗弃,所以就干脆不用了,自己画吧。魔方由27个小立方体构成,所以只要绘制一个小立方体,并复制27分,再将这个27个小立方体按一定顺序堆叠在一起,最后贴上纹理,就可以构成一个完整的魔方了。一个小立方体包含六个面,由于每个面阅读全文

posted @ 2013-07-10 09:22 zdd 阅读(4068) 评论(27) 编辑

2013年6月28日

用DirectX实现魔方(一)

摘要: 关于魔方魔方英文名字叫做Rubik's Cube,是由匈牙利建筑学教授和雕塑家Ernő Rubik于1974年发明,最初叫做Magic Cube(这大概也是中文名字的来历吧),1980年Ideal Toys公司开始销售此玩具,并将名字改为Rubik's Cube。魔方在80年代最为风靡,至今未衰。截至2009年1月,魔方在全世界已经售出了3亿五千多万个。最常见的魔方是三阶魔方,由27个小方块构成,共三层,每层9个小方块。我的Demo实现的就是三阶魔方。其他的魔方种类有二阶,四阶及更高阶,也有钻石魔方,五边形魔方,三角魔方等。三阶魔方所有可能的排列数是43252003274489阅读全文

posted @ 2013-06-28 09:18 zdd 阅读(3982) 评论(33) 编辑

2013年4月15日

Direct2D教程(十二)图层

摘要: 什么是Layers?Layer,中文译成图层,在Direct2D中可以用来完成一些特殊效果,使用Layer的时候,先将Layer Push到render target,然后进行绘制,此时是直接绘制在Layer上的,绘制完毕后,将Layer Pop出来,刚刚绘制在Layer上的内容就会组合到render target上。在Direct2D中,Layer使用接口ID2D1Layer来表示。和画刷一样,Layer由render target创建,属于设备相关的资源,Layer可以用于任何render target上,只要二者在相同的资源作用域内,在同一时间内,Layer只能用于一个render ta阅读全文

posted @ 2013-04-15 09:40 zdd 阅读(3120) 评论(41) 编辑

2013年4月9日

Vim案例两则

摘要: 在博问中看见两个比较典型的Vim处理文本的案例,总结一下,希望对大家有所帮助。如果大家有好的方法,欢迎讨论。尤其是第二个案例,如果能够一个命令处理更好。案例一这是在博问中看到的一个问题,原始文本如下。要求处理成下面的样子,也就是把逗号从行尾移动到下一行第一个单词前面。我的第一想法是先将2-6行的逗号删除,然后在3-7行加上逗号即可。删除2-6行的逗号:%s/,// 解释一下:: 冒号在Vim里面是命令引导符,想要输入命令必须先输入冒号。% 表示匹配所有行s/old/new/ 表示用new来替换old。s表示substitude(替换)。在s/,//中,old是逗号,new是空(注意后面两个斜线阅读全文

posted @ 2013-04-09 09:41 zdd 阅读(1457) 评论(5) 编辑

2013年3月26日

Direct2D教程(十一)几何变换

摘要: 什么是几何变换(Transform)在图形学中,主要有三种几何变换,分别是平移(Translate),旋转(Rotation)和缩放(Scaling)。在D2D中,这三种变换都有实现,而且还有一种不太常见的变换,倾斜(Skewing)。 Transform是指将一个点从一个坐标系映射到另一个坐标系,或者将一个点从同一个坐标系的一个位置映射到另外一个位置。在实际应用中,通常是将几何图形从一个位置变换到另外一个位置,而图形是由多个顶点组成的,只要将图形中的所有顶点都变换一下,那么整个图形就完成了变换,所以变换的本质是对顶点的变换。在D2D中,用如下三维矩阵M来表示这种变换。矩阵M的默认值是单位..阅读全文

posted @ 2013-03-26 09:09 zdd 阅读(3653) 评论(7) 编辑

2013年3月10日

D3D9 Device类型

摘要: D3D9主要有两种类型的Device,一种是HAL Device(Hardware Abstraction Layer,硬件抽象层)。另一种是REF Device(References Device)。HAL Device这是主要的设备类型,该类型支持硬件加速,并且支持hardware vertex processing及software vertex processing。如果显卡支持HAL类型的设备,那么在初始化D3D的时候就应该使用该类型。HAL Device只能实现大部分D3D特性,比如变换,光照,光栅化等。应用程序并不直接访问图形适配器(显卡)而是先调用D3D函数,D3D则通过HAL阅读全文

posted @ 2013-03-10 16:24 zdd 阅读(1317) 评论(0) 编辑

2013年3月1日

Direct2D教程(十)绘制文本

摘要: 概述在Direct2D中,文本的绘制是通过DirectWrite来实现的,DirectWrite实际上已经是一个独立的DirectX组件了。关于DirectWrite,我摘录了MSDN的一段文字。DirectWrite介绍当今的应用程序应提供高质量的文本渲染,分辨率无关的字体及完整的Unicode文本和布局支持,DirectWrite提供了这些功能,甚至比这更多。下面是DirectWrite的特性设备无关的文本布局系统,提高了文本的可读性(包括文档及UI上的文本)高质量的,子像素,ClearType文本的渲染(可以使用GDI及Direct2D或应用程序指定的渲染技术)硬件加速的文本渲染(和Di阅读全文

posted @ 2013-03-01 09:04 zdd 阅读(3622) 评论(20) 编辑

2013年2月27日

防止Direct Input获取多次输入

摘要: 如果将Direct input处理键盘输入的函数放到游戏循环中,由于Direct Input速度极快,用户的一次按键,Direct Input将会产生多次按键事件,导致程序多次被响应,处理如下。char hitLetter = '';static bool keyPressed = false;if(dinput_->getKey()){ if(!keyPressed) { hitLetter = dinput_->getKey(); keyPressed = true; }}else{ keyPressed = false;}关键在于key...阅读全文

posted @ 2013-02-27 10:49 zdd 阅读(446) 评论(2) 编辑

Direct2D教程(九)渲染位图

摘要: 概述这篇的标题更确切的说应该叫位图画刷,这样才好和前几篇对应起来。在Direct2D中,位图的渲染也是通过画刷来实现的。Direct2D中并没有直接操作位图的接口,而是借助WIC(Windows Image Component)来完成的。今天我们来看看如何在Direct2D中加载并显示位图。这个方法可以用来渲染背景。基本步骤如下。从文件创建WIC位图由WIC位图创建D2D位图使用D2D绘制位图在开始之前,首先简要介绍一下WIC什么是WIC?WIC全称是Windows Image Component,是一套扩展的API,用来处理数字图像,它是基于COM组件的。该API包含非常丰富的图像处理函数,阅读全文

posted @ 2013-02-27 09:30 zdd 阅读(4989) 评论(42) 编辑

2013年2月21日

求反射向量

摘要: 在图形学中,计算光照模型时,经常需要求取反射向量,一般的shader函数库都提供计算反射向量的方法,下面介绍一下如何手动计算反射向量。给定入射光线向量I和平面法向量N,求反射向量R,如下图。为了方便计算,这里假定I和N都是单位向量(模为1,编程时可先将I和N单位化)方法一设入射光线向量I和反射平面的...阅读全文

posted @ 2013-02-21 21:38 zdd 阅读(2685) 评论(0) 编辑

2012年11月22日

Direct2D教程(八)梯度色画刷

摘要: 概述单色画刷产生的颜色是单一的,比如一个红色画刷只能输出红色,而渐变画刷则不同,它可以输出多种颜色,这些颜色通常是连续的,从一个颜色平滑过渡到另一个颜色,看起来有渐变的效果。渐变画刷又分为两种,一种是ID2D1LinearGradientBrush(线性渐变画刷),另一种是ID2D1RadialGradientBrush(放射渐变画刷),下图显示了这两种画刷的效果。线性渐变画刷这种画刷的颜色从一个位置线性渐变到另外一个位置,所以在创建这种画刷之前需要确定以下两个属性起始位置及颜色终止位置及颜色在Direct2D中,结构体D2D1_GRADIENT_STOP用来表示一个位置及其颜色,其定义如下:阅读全文

posted @ 2012-11-22 08:41 zdd 阅读(2180) 评论(2) 编辑

2012年11月6日

Visual Studio 2012中使用自定义project properties

摘要: 由于将系统升级到了Windows 8, 而Windows 8 SDK已经集成了DirectX SDK,且不包含DX9及之前的头文件和库文件,如果想编写DX9程序则需要安装DirectX SDK,我安装的是DirectX SDK的最后一个单独分发包-Microsoft DirectX SDK (June 2010)。这样又出现了一个问题,如果编写DX10/11或者Direct2D程序,就会导致有两份头文件及库文件,一份来自Windows 8 SDK,位于C:\Program Files\Windows Kits\8.0\Include,这是随系统安装的,而且是最新版的,编程时建议使用此版,另一份阅读全文

posted @ 2012-11-06 22:59 zdd 阅读(1657) 评论(0) 编辑

2012年10月12日

DirectX11 driver类型浅析

摘要: 在DirectX 11中,创建设备时可以指定以下几种类型的driver。 D3D_DRIVER_TYPE_UNKNOWN = 0, D3D_DRIVER_TYPE_HARDWARE = ( D3D_DRIVER_TYPE_UNKNOWN + 1 ), D3D_DRIVER_TYPE_REFERENCE = ( D3D_DRIVER_TYPE_HARDWARE + 1 ), D3D_DRIVER_TYPE_NULL = ( D3D_DRIVER_TYPE_REFERENCE + 1 ), D3D_DRIVER_TYPE_SOFTWARE = ( D...阅读全文

posted @ 2012-10-12 23:58 zdd 阅读(704) 评论(0) 编辑

2012年10月2日

C++默认构造函数

摘要: 默认构造函数默认的构造函数是指为所有参数都提供了默认值的构造函数,通常是指无参的构造函数。比如下面的类Test,它的默认构造函数就是Test()。class Test{public: Test(){} // default constructor} ;如果你没有为你的类提供任何构造函数,那么编...阅读全文

posted @ 2012-10-02 15:21 zdd 阅读(4901) 评论(2) 编辑

2012年9月15日

DirectWrite处理WM_SIZE消息

摘要: 对于DirectWrite程序,在窗口大小改变时,也要同步更新render target的尺寸,否则的话,所绘文本可能超出窗口之外。可以定义一个OnResize函数来更新render target的尺寸,然后再WM_SIZE中调用这个函数。// When window size changed, we need to resize the render target as wellVOID OnResize(UINT width, UINT height){ if(g_pRenderTarget) { D2D1_SIZE_U size = D2D1::SizeU(wi...阅读全文

posted @ 2012-09-15 21:36 zdd 阅读(489) 评论(0) 编辑

Direct2D中资源的创建顺序

摘要: 资源类型Direct2D中有两种类型的资源,设备无关资源和设备相关资源,设备无关的资源可以一次创建,永久使用(在程序生存期内),且通常创建于系统内存中,设备相关的资源和设备有相同的生命周期,一旦设备丢失,则资源也需重建。这类资源一般在显存中创建。设备无关的资源包括ID2D1DrawingStateBlockID2D1FactoryID2D1Geometry及继承自它的接口ID2D1GeometrySink和ID2D1SimplifiedGeometrySinkID2D1StrokeStyle设备相关的资源包括ID2D1Brush及继承自它的接口ID2D1LayerID2D1RenderTarg阅读全文

posted @ 2012-09-15 12:21 zdd 阅读(1275) 评论(0) 编辑

2012年9月10日

什么是Modulate?

摘要: Modulate是颜色操作中的一个术语,可以理解为颜色乘法。两个颜色相乘,或者一个颜色与一个标量相乘。叫做modulation(调制?)。一个渲染中的三角形,其上某个像素的颜色由多个颜色源组合而成。通常来说,其中一个颜色来自纹理,另一个来自三角形顶点的插值,这两者的乘积就是最终的颜色,在这种情况下,...阅读全文

posted @ 2012-09-10 21:46 zdd 阅读(526) 评论(2) 编辑

2012年9月8日

程序员,请昂起你高贵的头!

摘要: 程序员与艺术家我这辈子最佩服两类人,一类是艺术家,一类是程序员。一个好的程序员从在某种程度上来说也是一个艺术家!艺术家是精神世界及其丰富的人群,他们不仅自己享受着艺术的魅力,也为全人类的精神文明指引着方向!程序员,他们是城市中的白领,不仅自己享受着编码的乐趣,也推动着信息世界不断向前发展。在这个信息爆炸的年代,哪个行业能离开计算机?能离开程序员?月经贴可是,就是这样艺术家一样神圣的职业,却被某些人玷污了。。。最近越来越多的人开始写一些无聊的月经贴,传播一些无聊的言论,什么程序员是青春饭,过了30就伤不起,就得转管理,程序员是苦逼行业,挣得不如民工多。相信这些类似的言论大家都不陌生吧?对于这种技阅读全文

posted @ 2012-09-08 21:12 zdd 阅读(19636) 评论(364) 编辑

XPDM vs WDDM

摘要: XPDM - Windows XP Display Driver ModelWDDM - Windows Vista Display Driver ModelSecure Desktopsecure desktop(安全桌面)在以下几种情况下被激活锁定屏幕(Windows + L)屏幕保护程序启动UAC对话框弹出当安全桌面激活时,HAL(Hardware Abstraction Layer)是不可访问的。XPDM与WDDM的不同试图创建Direct3d9 HAL device将会失败(返回D3DERR_NOT_AVAILABLE),且当前存在的D3D9 device在调用Present函数时都阅读全文

posted @ 2012-09-08 11:09 zdd 阅读(1581) 评论(0) 编辑

导航

公告