2012年4月3日

DirectX截图黑屏的解决办法

摘要: 好久没有更新博客了,今天开始继续耕耘。生活要继续工作要继续梦想也一定要继续!之前写过一篇关于DirectX截屏的文章,其中有网友留言提到了截图黑屏的问题,于是这些日子研究了一下,与大家一同分享。为什么会黑屏?一句话概括,黑屏是由于DDraw加速引起的!先说一下DirectX的显示原理,通常我们看到的屏幕上的数据,都是通过Primary Surface送至显示器的,什么是Primary Surface呢?中文叫做主显示表面,也就是说我们当前看到的屏幕上的图像数据是从这个表面来的,除了主表面意外还有离屏表面,叫做OffScreenSuface。这种表面中的数据是不直接显示在屏幕上的。常用的截屏函数 阅读全文

posted @ 2012-04-03 08:38 前端风云志 阅读(23015) 评论(4) 推荐(3)

2011年9月15日

也谈走台阶问题

摘要: 问题刚才在首页看到一篇博客,说的是腾讯的一道面试题:一个楼梯有50个台阶,每一步可以走一个台阶,也可以走两个台阶,请问走完这个楼梯共有多少种方法?博主把这题分析的很麻烦。引来很多人围观。我以前也碰到过这个问题。写出来和大家分享一下。举个例子,假设有3个台阶,则有三种走法:分别是,1-1-1, 1-2, 2-1。分析很简单的一道题,学过组合数学的人很快就能想到,这是一个递推关系。假设走完k个台阶有f(k)种走法。k = 1时,f(k) = 1k = 2时,f(k) = 2k = n时,第一步走一个台阶,剩n-1个台阶,有f(n - 1)种走法。第一步走两个台阶,剩n-2个台阶,有f(n - 2) 阅读全文

posted @ 2011-09-15 14:23 前端风云志 阅读(4815) 评论(23) 推荐(7)

2011年7月14日

数组面试题-子数组之和

摘要: 昨天在一位老兄的凡客面试题中看到的,拿来写一下。题目描述给定一个含有n个元素的整形数组a,再给定一个和sum,求出数组中满足给定和的所有元素组合,举个例子,设有数组a[6] = { 1, 2, 3, 4, 5, 6 },sum = 10,则满足和为10的所有组合是{1, 2, 3, 4}{1, 3, 6}{1, 4, 5}{2, 3, 5}{4, 6}注意,这是个n选m的问题,并不是两两组合问题。解法一:穷举法最直观的想法就是穷举,把数组中元素的所有组合情况都找出来,然后看看哪些组合满足给定的和即可,这种方法的计算量非常大,是指数级的,假设数组有n个元素,那么所有组合的情况一共有2 ^ n种( 阅读全文

posted @ 2011-07-14 17:24 前端风云志 阅读(11138) 评论(29) 推荐(1)

2011年7月11日

也谈杨辉三角形

摘要: 很久没更新博客了,来篇水的。今天看见有位兄弟写了杨辉三角形,记得以前自己也研究过,索性也发一篇,欢迎讨论。来历杨辉三角形也叫贾宪三角形,西方叫帕斯卡三角形,其实就是各阶二项式系数排列起来构成的三角形,如下。每行的数字实际上是(a + b) ^ n展开后的结果。 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1历史上发现这个三角形的人很多,这里介绍几个主要的,北宋人贾宪约1050年首先使用“贾宪三角”进行高次开方运算。杨辉,字谦光,南宋时期杭州人。在他1261年所著的《详解九章算法》一书中,辑录了如上所示的三角形数表,称之为“开方作法本源”图。欧洲直到1623年以后,法国数学家帕斯卡在 阅读全文

posted @ 2011-07-11 17:48 前端风云志 阅读(9480) 评论(4) 推荐(5)

2011年7月8日

八进制字符与十六进制字符

摘要: 一般形式 在C中有两种特殊的字符,八进制转义字符和十六进制转义字符,八进制字符的一般形式是'\ddd',d是0-9的数字。十六进制字符的一般形式是'\xhh',h是0-9或A-F内的一个。八进制字符和十六进制字符表示的是字符的ASCII码对应的数值。比如 '\063'表示的是字符'3',因为'3'的 阅读全文

posted @ 2011-07-08 13:36 前端风云志 阅读(14080) 评论(7) 推荐(3)

2011年6月3日

Direct2D教程(七)单色画刷

摘要: 概述画刷是D2D中最重要的资源之一,无论绘制什么图形,都离不开画刷,它好比是画家手中的画笔。画刷由render target创建,是设备相关的资源,如果渲染设备重建了,那么需要重新建立画刷。Direct2D中有以下四种类型的画刷,这些画刷全部继承自ID2D1Brush,并且有一些共同特征(比如设置和获取opacity,以及transform)。ID2D1SolidColorBrush 单色画刷ID2D1LinearGradientBrush 线性梯度色画刷ID2D1RadialGradientBrush 放射梯度色画刷ID2D1BitmapBrush 位图画刷下面是几种画刷及其对应的绘制效果画 阅读全文

posted @ 2011-06-03 12:34 前端风云志 阅读(7825) 评论(10) 推荐(3)

2011年6月1日

Direct2D教程(六)图形也能做运算

摘要: 概述大家都学过集合运算,给定两个集合,可以求他们的并集,交集,差集等。其实图形之间也能做运算,今天就带大家开始图形运算之旅,讲讲如何合并图形。在D2D中有四种方法合并图形,分别是并(UNION),交(INTERSECT),差(EXCLUDE)和异或(XOR)。那么图形之间是如何合并的呢?两个图形之间进行Xor的结果是什么呢?为了便于理解,我先把效果图贴上来。下面图片中第一副图示两个圆的原始图,第二副图是UNION的结果,取两个圆所有的部分,但是公共部分只保留一份。第三幅图是INTERSECT的结果,取两个圆的公共部分。第四幅图是XOR的结果,取两个圆公共部分以外的部分。最后一幅图是EXCLUD 阅读全文

posted @ 2011-06-01 09:37 前端风云志 阅读(8056) 评论(10) 推荐(6)

2011年5月31日

Direct2D教程(五)复合图形

摘要: 概述Direct2D支持以下几种类型的几何图形。Simple Geometry(简单几何图形) 矩形 圆角矩形 椭圆Path Geometry(路径图形)Composite Geometry(复合图形) Geometry Group(图形组) Transformed Geometry(变换的图形)上一篇介绍了Path geometry,这篇介绍复合图形。复合图形也可以叫做合成图形,包含两种,一种是图形组,即由多个图形组成的一组图形,另一种是经过变换的图形,D2D支持的变换有四种,平移,旋转,缩放和倾斜。图形组由于图形组是一组图形的集合,所以如果对图形组进行操作,会影响到其中每一个图形,这对批量 阅读全文

posted @ 2011-05-31 10:05 前端风云志 阅读(8330) 评论(7) 推荐(9)

2011年5月27日

Direct2D教程(四)Path Geometry

摘要: 概述Direct2D支持以下几种类型的几何图形,上一篇介绍了简单几何图形,这篇介绍Path geometry。Simple Geometry(简单几何图形)矩形圆角矩形椭圆Path Geometry(路径图形)Composite Geometry(复合图形)Geometry Group(图形组)Transformed Geometry(变换的图形)Path geometry,说白了,就是以路径来描述图形,由于翻译过来比较别扭,所以下文中出现该词的地方全部使用英文。Path geometry可以用来创建复杂的几何图形,因为无论多么复杂的图形都可以由一些基本的几何图元来表示,Path geomet 阅读全文

posted @ 2011-05-27 09:02 前端风云志 阅读(14262) 评论(24) 推荐(7)

2011年5月25日

Direct2D教程(三)简单几何图形

摘要: 从本章开始,我们介绍D2D几何图形。D2D图形分类Direct2D支持多种类型的几何图形,包括Simple Geometry(简单几何图形)矩形圆角矩形椭圆Path Geometry(路径图形)Composite Geometry(复合图形)Geometry Group(图形组)Transformed Geometry(变换的图形)各种图形对应的D2D接口如下,所有接口都继承自ID2D1Geometry。矩形-ID2D1RectangleGeometry圆角矩形-ID2D1RoundedRectangleGeometry椭圆-ID2D1EllipseGeometry路径图形-ID2D1Path 阅读全文

posted @ 2011-05-25 09:48 前端风云志 阅读(13021) 评论(13) 推荐(3)

2011年5月23日

Direct2D教程(二)来看D2D世界中的Hello,World

摘要: 引子任何一门语言的第一个教程几乎都是Hello,world。我们也不例外,但是这里不是教大家打印Hello,world,而是编写一个简单的D2D绘制程序,让大家对Direct2D的程序结构及编程方法有一个基本的认识。下面我们来看如何一步一步绘制一个矩形。基本概念在开始之前,还是先介绍一些基本的概念,有助于大家理解程序,这些概念包括,Brush(画刷),Render target(渲染目标),Geometry(几何图形),它们会贯穿整个教程,所以越早介绍越好,对于有Windows GDI基础的人来说,理解这些概念很容易。没有基础的也没关系,我们可以先了解一下,随着学习的深入,会有更加深刻的认识。 阅读全文

posted @ 2011-05-23 20:26 前端风云志 阅读(26802) 评论(38) 推荐(7)

2011年4月23日

DirectX-渲染到纹理

摘要: 什么是纹理熟悉DX的兄弟们都知道什么叫纹理了,这里简单介绍一下,先看看现实生活中的例子吧,其实纹理的例子比比皆是,比如地板,墙面都是纹理。在图形学中,纹理主要是为了增强场景的真实感,如果你想绘制一个地面,简单一点可以直接使用一个矩形,稍微复杂一点可以用三角形网格,再复杂一点可以使用地面纹理,有了纹理以后真实感明显增强了。DX中的纹理映射其实就是对现实生活中纹理的模拟,D3D中有专门的数据结构来管理纹理。渲染到纹理常规的渲染操作都是直接将场景呈现到backbuffer中的,backbuffer说白了其实就是一个表面,再说白了就是一块内存,场景通过绘制函数载入显存后,再通过Present函数送至显 阅读全文

posted @ 2011-04-23 08:21 前端风云志 阅读(15141) 评论(20) 推荐(10)

2011年4月22日

大端序与小端序

摘要: 何为大端序,小端序?简单点说,就是字节的存储顺序,如果数据都是单字节的,那怎么存储无所谓了,但是对于多字节数据,比如int,double等,就要考虑存储的顺序了。注意字节序是硬件层面的东西,对于软件来说通常是透明的。再说白一点,字节序通常只和你使用的处理器架构有关,而和编程语言无关,比如常见的Intel x86系列就是小端序。Big-endian(大端序)数据的高位字节存放在地址的低端 低位字节存放在地址高端Little-endian(小端序)数据的高位字节存放在地址的高端 低位字节存放在地址低端字节的高位与低位举个例子,int a = 0x12345678 ; 那么左边12就是高位字节,右边 阅读全文

posted @ 2011-04-22 09:55 前端风云志 阅读(48512) 评论(8) 推荐(6)

2011年4月2日

Direct2D教程(一)Direct2D已经来了,谁是GDI的终结者?

摘要: 什么是Direct2D一言以蔽之,就是Windows 7平台上的一个2D图形API,可以提供高性能,高质量的2D渲染。大多数人对Direct2D可能都比较陌生,以至于我之前在论坛上提到这个词的时候,有人竟然说你是不是写错了?可能大家比较熟悉的是Direct3D,因为D3D已经是当前游戏界的主流应用。在过去,3D世界是OpenGL与DirectX二分天下,但是由于OpenGL发展十分滞后,而且没有一个像微软这样强大的后台支柱,所以逐渐被DirectX所超越。回过头来说2D,过去Windows上的2D程序还主要基于GDI和GDI+,遗憾的是这两者都是软件实现,而Direct2D则不同,它基于Dir 阅读全文

posted @ 2011-04-02 16:56 前端风云志 阅读(22233) 评论(29) 推荐(10)

2011年3月26日

用DirectX实现多视图渲染

摘要: 什么是多视图一般的3D程序都只有一个视图,对应整个窗口的客户区。多视图就是在一个窗口中放置多个视图,以便从不同的角度观察模型或者场景。很多图形软件都有这个功能,比如大家熟知的3DMax就有四个视图,分别是前视图,左视图,顶视图和透视图。还有一些游戏引擎也有类似的Demo,比如irrlicht引擎中的SplitScreen就是用多视图实现的,如下图。什么是视口(viewport)?用DirectX实现多视图有几种方法,可以使用多个Viewport,也可以使用多个Swap Chain,后者实现起来比较复杂,以后再做介绍,先看如何使用多个viewport来实现。那么到底什么是viewport呢?举个 阅读全文

posted @ 2011-03-26 09:16 前端风云志 阅读(10604) 评论(6) 推荐(5)

2011年3月14日

如何调试DX程序

摘要: 配置调试环境如果安装了DirectX SDK,就可以通过SDK中的DirectX Control Panel来设置调试选项,这个工具位于开始-程序-Microsoft DirectX SDK(June 2010)-DirectX Utilities中,也可以在SDK的安装目录下找到,在我这里是C:\Program Files\Microsoft DirectX SDK (June 2010)\Utilities\bin\x86。运行后如下图。由于我机器上安装的是DX9,所以我们只看有关DX9的设置Debug Output Level – 这是调试输出的级别,级别越高,输出的调试信息越丰富,选择 阅读全文

posted @ 2011-03-14 21:17 前端风云志 阅读(8543) 评论(18) 推荐(6)

2011年3月9日

字符串面试题(一)字符串逆序

摘要: 几点说明1. 所有题目全部来自网络,书籍,或者我自己的面试经历,本人只是负责搜集整理。在此对原作者表示感谢!2. 我已经尽力确保文字及程序的正确性,但我毕竟是凡人,如果您发现了文章中的错误,或者有更好的解法,请一定留言相告,以免误导大家!3. 所有代码都采用C/C++编写很早就准备写一个字符串系列的... 阅读全文

posted @ 2011-03-09 21:31 前端风云志 阅读(85735) 评论(56) 推荐(23)

2011年2月23日

What is VMR(Video Mixing Render)-From MSDN

摘要: Link: http://msdn.microsoft.com/en-us/library/dd373403%28v=vs.85%29.aspxThis section provides an overview of the features in the Video Mixing Renderer 7 (VMR-7) and the VMR-9.Features of the VMRVMR vs. Previous DirectShow RenderersVMR System RequirementsVMR Filter ComponentsRelated TopicsUsing the V 阅读全文

posted @ 2011-02-23 13:06 前端风云志 阅读(746) 评论(0) 推荐(0)

2011年2月21日

何时使用Delegate,何时使用Interface

摘要: 委托和接口的相似点委托和接口都允许类的设计者将声明和实现分离开来,一个给定的接口可以被任何类或结构体继承和实现;也可以为任何类的方法创建对应的委托,只要该方法满足委托的签名,委托和接口可以被一个对象使用,这个对象不必关心实现委托和接口的细节,有了这些相似点,我么什么时候使用委托?什么时候使用接口呢?使用委托的情况使用了基于事件的设计模式封装静态方法调用者无需访问实现方法的对象的其他内容,比如属性,方法或接口简单的组合一个类想要方法的多种实现使用接口的情况一组相关的方法需要被调用只需要方法的一种实现需要将接口转换为其他接口或类被实现的方法链接到类中的某个类型,比如comparison方法有一个使 阅读全文

posted @ 2011-02-21 09:58 前端风云志 阅读(1486) 评论(0) 推荐(0)

2011年2月13日

D3DPOOL(资源池)

摘要: D3DPOOL定义了资源对应的内存类型,资源可以是texture surface, vertex buffer等,从内存的角度来看,资源有以下几种类型。 D3DPOOL_DEFAULT D3DPOOL_MANAGED D3DPOOL_SYSTEMMEM D3DPOOL_SCRATCH D3DPOOL_FORCE_DWORD D3DPOOL_DEFAULT 资源被存储在最适合给定资源访问的内存中,这通常是显存,包括本地显内存和AGP内存,D3DPOOL_DEFAULT不同于D3DPOOL_MANAGED和D3DPOOL_SYSTEMMEM,它指出了资源被存储在最适合设备访问的内存中,D3DPOO 阅读全文

posted @ 2011-02-13 12:26 前端风云志 阅读(4313) 评论(0) 推荐(0)

D3D中的设备丢失

摘要: 周末闲着没事,翻译一段DirectX SDK帮助文档,是关于设备丢失及其处理方法的。路径是DirectX Graphics-Direct3d 9-Programming Guide-Getting Started-Direct3D Devices-Lost Devices,翻译完才发觉,原来翻译并不是那么容易的事,总是觉得某些地方词不达意,英文水平亟待提高!设备丢失一个Direct3D设备要么处于可操作状态,要么处于丢失状态,可操作状态即正常状态,设备按预期运行并渲染。当某些事件发生时,设备将转入丢失状态,比如在全屏状态下失去键盘焦点,这将导致无法继续渲染。设备丢失的一个特点是所有的渲染操作都 阅读全文

posted @ 2011-02-13 11:34 前端风云志 阅读(4972) 评论(0) 推荐(1)

2010年12月24日

extern “C”总结

摘要: 经常看到如下代码:#ifdef _cplusplusextern "C" {#endif#include "XXX.h"#ifdef _cplusplus}#endif解释:extern "C"的作用是,告诉C++编译器,下面的代码按照C的方式进行编译,说白了,不要对这些函数进行名字重整(funct... 阅读全文

posted @ 2010-12-24 21:02 前端风云志 阅读(6373) 评论(4) 推荐(4)

整数超出范围时如何表示?

摘要: 类型都是有表示范围的,整型也不例外 在32位系统上int占四个字节内存,能表示的整数范围是-231--231-1 (最高位是符号位) unsigned int 也占四个字节内存,能表示的整数范围是0—232-1 (无符号位) 如果某个整型变量超过了其类型所能表示的范围,编译器该如何解释这个变量呢? 比如定义如下一个变量 char ch = 128 ; 由于char 是8bit 整型,所能表示的范围... 阅读全文

posted @ 2010-12-24 20:17 前端风云志 阅读(7839) 评论(0) 推荐(0)

2010年12月19日

用DirectX实现动态纹理

摘要: 什么是动态纹理动态纹理是相对于常规的纹理而言的,通常的纹理都是静态的,而动态纹理就是模型保持不动,而纹理动态变化,凡是能够对模型应用的变换,也能作用于纹理,比如平移,旋转,缩放,投影,shear等都不在话下,使用动态纹理可以模拟很多现象,最常见的就是Dynamic cloud。如何实现动态纹理话说这个问题还是我在一次面试的时候遇到的。面试官:怎样让一个纹理动起来我:让模型动起来即可面试官:如果不允许移动模型呢?只动纹理我:。。。其实这个问题并不难,只要明白一点,纹理也是有坐标的,既然有坐标,就可以改变位置,位置可以改变,就能做出动态效果来。普通的纹理坐标都是二维的,用(u, v)来表示,这里u 阅读全文

posted @ 2010-12-19 19:26 前端风云志 阅读(8182) 评论(3) 推荐(2)

2010年11月22日

D3DPT_TRIANGLELIST与D3DPT_TRIANGLESTRIP

摘要: 这两种方式都可以绘制三角形网格,那么在什么情况下使用它们呢?如果要画多个三角型,那么使用D3DPT_TRIANGLELIST一定要配合IndexBuffer,否则的话将要重复定义很多顶点,如果要画少量的三角型,则可以使用D3DPT_TRIANGLESTRIP来代替D3DPT_TRIANGLELIST,比如要画一个矩形(也叫Quad,通常用在渲染一个纹理图片时),则可以由两个三角型拼接而成,比如有如下顶点定义,则可以通过TRIANGLESTRIP来拼接成一个矩形。那么如何确定顶点的定义顺序以保证TRIANGLESTRIP能正确工作呢?这里有个小窍门1 确保前三个顶点是顺时针方向的,如下面的V0V 阅读全文

posted @ 2010-11-22 14:58 前端风云志 阅读(5790) 评论(0) 推荐(0)

Primitive Type in DX

摘要: 在调用DrawPrimitive函数时,一定要指定正确的图元个数,否则会出现诡异的结果,看下面的例子假设有下图所示的7个顶点如果图元类型是D3DPT_POINTLIST,那么按道理只能画三条线,结果如下[代码]但是如果一不小心将图元个数设置为4,就会出现下面的结果[代码]可见,如果顶点个数不够的话,DX选择了顶点(0,0)来终结。 阅读全文

posted @ 2010-11-22 10:41 前端风云志 阅读(823) 评论(0) 推荐(0)

2010年11月21日

DirectX backface culling(背面剔除)

摘要: 先看一下什么是backface,有backface必然就有frontface,在DX中,frontface是这样定义的,按照顶点定义的先后顺序,呈顺时针排列的顶点构成的三角形是frontface(以view space为参考),与frontface相对的面则是backface,如下图所示。可见决定frontface的因素有两个顶点定义的先后顺序顶点的排列方向-顺时针或者逆时针(由顶点的位置坐标决定)先看第一条,如果顶点的位置不变,但是定义顺序变了,可能导致frontface变成backface,如下图再看第二条,如果顶点的定义顺序不变,但是位置变了,也可能导致frontface变成backfa 阅读全文

posted @ 2010-11-21 16:19 前端风云志 阅读(11347) 评论(5) 推荐(2)

2010年9月2日

D3DCOLOR与D3DXCOLOR

摘要: D3DCOLORD3DCOLOR实际上是一个DWORD,看一下它的定义(位于d3d9types.h中)// D3DCOLOR is equivalent to D3DFMT_A8R8G8B8#ifndef D3DCOLOR_DEFINEDtypedef DWORD D3DCOLOR;#define ... 阅读全文

posted @ 2010-09-02 16:23 前端风云志 阅读(6898) 评论(3) 推荐(0)

2010年8月24日

关于数组的几道面试题

摘要: 2011年2月15日更新,加入找出绝对值最小的元素一题 数组是最基本的数据结构,关于数组的面试题也屡见不鲜,本文罗列了一些常见的面试题,仅供参考,如果您有更好的题目或者想法,欢迎留言讨论。目前有以下18道题目,如果有好的题目,随时更新。 数组求和 求数组的最大值和最小值 求数组的最大值和次大值 求数 阅读全文

posted @ 2010-08-24 12:58 前端风云志 阅读(58351) 评论(96) 推荐(20)

2010年8月21日

D3D中设备丢失的处理

摘要: 什么是设备丢失D3D中设备(Device)有两种状态,一种是可操作状态,也就是正常状态,另一种是丢失状态(Lost),处于丢失状态的设备是不能进行渲染操作的。简单的说,设备丢失是只应用程序(Device)与显卡失去了联系,因此无法使用显存。这里的Device不是只硬件,而是我们在程序中创建的Device对象,可以理解为上下文环境。什么情况会导致设备丢失当某些事件发生时,设备会由正常状态转换到丢失状态。这些事件包括程序在全屏状态下失去键盘焦点(全屏时按下Alt+Tab或Win+D键或Win+L键)其他程序进入全屏状态电源管理事件,比如屏保等设备丢失的现象渲染窗口内模型丢失渲染窗口背景色变黑或者干 阅读全文

posted @ 2010-08-21 22:51 前端风云志 阅读(14070) 评论(4) 推荐(1)

2010年8月13日

VertexShader入门

摘要: Shader与固定管线顶点着色(Vertex Shader)是一段执行在GPU上的程序(一般用HLSL来编写),用来取代fixed pipeline中的transformation和lighting,Vertex Shader主要操作顶点。 有图则一目了然。 Vertex Shader做了什么工作 由上图知,Vertex Shader对输入顶点完成了从local space到homogeneous... 阅读全文

posted @ 2010-08-13 17:14 前端风云志 阅读(13353) 评论(2) 推荐(5)

2010年8月12日

C/C++数据对齐

摘要: 为了避免混淆,做如下规定,以下代码若不加特殊说明都运行于32位平台,结构体的默认对齐值是8,各数据类型所占字节数分别为char占一个字节int占四个字节double占八个字节。两个例子请问下面的结构体大小是多少?[代码]这个呢?[代码]在公布答案之前先看一下对齐的规则。对齐规则一般来说,结构体的对齐规则是先按数据类型自身进行对齐,然后再按整个结构体进行对齐,对齐值必须是2的幂,比如1,2, 4, ... 阅读全文

posted @ 2010-08-12 11:20 前端风云志 阅读(19433) 评论(19) 推荐(4)

2010年8月9日

射线和三角形的相交检测(ray triangle intersection test)

摘要: 本文以Fast, Minimum Storage Ray Triangle Intersection为参考,在此感谢原作者,大家也可以直接阅读原版。概述射线和三角形的相交检测是游戏程序设计中一个常见的问题,最典型的应用就是拾取(Picking),本文介绍一个最常见的方法,这个方法也是DirectX中采用的方法,该方法速度快,而且存储空间少。先讲述理论,然后给出对应的代码实现。 理论部分一个直观的方法我想大多数人在看到这个问题时,可能都会想到一个简单而直观的方法:首先判断射线是否与三角形所在的平面相交,如果相交,再判断交点是否在三角形内。判断射线是否与平面相交判断点是否在三角形内但是,上面的方法 阅读全文

posted @ 2010-08-09 13:41 前端风云志 阅读(34466) 评论(32) 推荐(8)

2010年8月5日

判断点是否在三角形内

摘要: 本文只是翻译和整理,原文在此http://www.blackpawn.com/texts/pointinpoly/default.html概述给定三角形ABC和一点P(x,y,z),判断点P是否在ABC内。这是游戏设计中一个常见的问题。需要注意的是,这里假定点和三角形位于同一个平面内。本文介绍三种不... 阅读全文

posted @ 2010-08-05 17:54 前端风云志 阅读(122061) 评论(77) 推荐(26)

C++中的explicit关键字

摘要: 先看一下MSDN上关于explicit关键字的解释This keyword is a declaration specifier that can only be applied to in-class constructor declarations. An explicit constructor cannot take part in implicit conversions. It can only be used to explicitly construct an object.1 该关键字只能用来修饰类内部的构造函数class A{public: explicit A(in... 阅读全文

posted @ 2010-08-05 08:35 前端风云志 阅读(2580) 评论(2) 推荐(3)

2010年8月4日

空间点到直线的距离

摘要: 阅读全文

posted @ 2010-08-04 15:23 前端风云志 阅读(4902) 评论(2) 推荐(0)

2010年8月3日

向量投影

摘要: 给定一个向量u和v,求u在v上的投影向量,如下图。假设u在v上的投影向量是u’,且向量u和v的夹角为theta。一个向量有两个属性,大小和方向,我们先确定u’的大小(即长度,或者模),从u的末端做v的垂线,那么d就是u’的长度。而u’和v的方向是相同的,v的方向v/|v|也就是u’的方向。所以有 (1)再求d的长度。 (2)最后求cos(theta) (3)联合求解方程(1)(2)(3)得到这就是最终的投影向量。而这个向量的长度d是============================以下是旧的推导,也保留。 阅读全文

posted @ 2010-08-03 23:30 前端风云志 阅读(113401) 评论(2) 推荐(5)

直线和平面的交点

摘要: 阅读全文

posted @ 2010-08-03 23:27 前端风云志 阅读(1401) 评论(0) 推荐(0)

2010年7月31日

点在平面上的投影

摘要: 应用:P在平面上的投影P'是平面上所有点中离P最近的点。如果给定平面外任意一点,求平面上离点P最近的点,则可用此法。 阅读全文

posted @ 2010-07-31 22:57 前端风云志 阅读(17804) 评论(1) 推荐(1)

2010年7月16日

几道C语言题目

摘要: 第一题下面代码的输出结果是?int main(){ int a[][3] = {1, 2, 3, 4, 5, 6}; int (*ptr)[3] = a; printf("%d, %d\n", (*ptr)[1], (*ptr)[2]); ++ptr; printf("%d, %d\n", (*ptr)[1], (*ptr)[2]); system("pause") ; return 0 ;}结果2, 35, 6分析ptr的类型是int(*)[3],那么*ptr的类型便是int[3],也就是int*(编译器会将数组名转换成指针),所以 阅读全文

posted @ 2010-07-16 11:21 前端风云志 阅读(2082) 评论(6) 推荐(0)

导航

关注我

前端风云志