Direct3D
caimouse
在IT行业有20多年的经验。拥有20多年的C和C++开发经验,5年以上Python开发经验,资深数据库开发、上百G数据库优化经验。曾经任职嵌入式工程师、P2P开发工程师、银行信用卡交易系统工程师、全自动化电池测试部门经理。
展开
-
在VC里实现长按键时,解决窗口不更新的问题
在修改一个老程序时,发现有这样一个问题,当按下一次向下或向上方向键时窗口里的数据可以向上或向下滚动一条,也会立即更新到窗口里显示。但是,当长按,不弹起按键时,就会发现数据有滚动,但窗口不更新的现象。这种现象就会给客户一种假死的感觉,体验非常不好。为了解决这个问题,仔细地看了一下VC里MFC的消息体系。为什么一次按下再弹起就可以更新窗口呢?因为这里使用InvalidateRect函数,通知窗口有区域无效了,也就是作了一个标记,但这是Windows并不会立即更新窗口里的数据,等到弹起按键,没有操作时才会处理原创 2020-06-19 10:17:28 · 697 阅读 · 0 评论 -
使用C++17编译时出错:error C2872: 'byte': ambiguous symbol
现在已经是2020年了,因此使用C++的标准要提高到C++17的方式,因为C++17提高了不少性能,在语言上改进也很多。这样需要在VC2017或VC2019里使用下面的设置来使用C++17的标准:主要设置C++ Language Standard: ISO C++ 17设置完成之后,就可以使用最新的C++17的特性,同时也强制地按这个标准编译了。如果是旧的代码,也许会提示一个如下的BUG:c:\program files (x86)\microsoft sdks\windows\v7.1a\原创 2020-05-11 09:49:42 · 13531 阅读 · 7 评论 -
使用std::function来实现不同类的函数回调
在开发软件过程中,经常会遇到这样的需求,设计一个类Call来进行通用的逻辑处理,但是需要调用另外一个类A,或B中一些函数,这时就不能直接传送类A或类B的指针进来了,如果在以往一般采用静态函数,或者类A和类B是继承关系采用多态来实现。目前可以采用std::function来实现函数对象的调用,也可以实现多态的方式。如下面的例子:// ConsoleBind.cpp : This file co...原创 2020-04-11 19:17:40 · 1002 阅读 · 0 评论 -
C++里怎么样让类对象删除时自动释放动态分配的内存?
经常有这样的需求,在一个类里一些成员变量需要动态地分配内存,以前是把这个成员声明为指针,然后在构造函数里指定为NULL类型,然后在析构函数里判断这个指针是否分配了内存,如果分配了就进行删除。这种方式需要人工来做,工作量有点大,能否有更加高效的,能否有偷赖的方式呢?这是有的,如下的例子:#include <memory>class widget{private: st...原创 2020-03-22 12:25:07 · 4291 阅读 · 8 评论 -
C++怎么样使用range-based for
range-based for是C++增加的一个重要特性,大大地加快写循环代码的能力,特别是智能指针,模板等对象的引用。因此,在所有项目工程里,尽量使用这种方式,不要再使用旧的方式了,具体使用的方式,可以参考下面的代码:// range-based-for.cpp// compile by using: cl /EHsc /nologo /W4#include <iostre...原创 2020-03-22 12:10:49 · 628 阅读 · 1 评论 -
运行软件打不开,报“应用程序无法正常启动(0xc0150002)”的错误
出现这个问题,查看Windows的事件管理器,提示如下内容:“D:\work\ControlCAN.dll”的激活上下文生成失败。 找不到从属程序集 Microsoft.VC90.MFC,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="9.0.21022.8"。 请使用 sx...原创 2019-12-02 16:01:12 · 4235 阅读 · 5 评论 -
如何解决windows.h和WinSocket2.h的冲突
如何解决windows.h和WinSocket2.h的冲突在一个大的VC++工程里,经常会遇到这样一个问题,比如想要使用一个库,而这个库里要使用<Windows.h>头文件,但是这样会引起后面代码里使用WinSocket2.h的冲突,导致整个工程编译不过。为了解决这个问题,可以把WinSocket2.h提前,包含到<Windows.h>之前,如下所示:#inclu...原创 2019-10-31 15:49:33 · 1330 阅读 · 0 评论 -
error LNK2019: 无法解析的外部符号 __except_handler4_common
4>MSVCRTD.lib(chandler4gs.obj) : error LNK2019: 无法解析的外部符号 __except_handler4_common,该符号在函数 __except_handler4 中被引用最近在编译一个开源的工程时,发现出这个提示,导致执行文件不能生成。后来仔细地查看一下原因,原是由于有一些库是使用MD的代码生成,而另外全部是使用Mtd的代码生成,这样...原创 2019-10-31 15:22:55 · 7824 阅读 · 1 评论 -
D3DXColorAdjustContrast 函数
D3DXColorAdjustContrast 函数调整颜色对比度值。定义D3DXCOLOR *WINAPI D3DXColorAdjustContrast( D3DXCOLOR *pOut, const D3DXCOLOR *pC, FLOAT c);参数:pOut [in, out] 指向D3DXCOLOR结构,返回操作结果原创 2004-09-29 14:04:00 · 3347 阅读 · 1 评论 -
D3DXColorAdjustSaturation 函数
D3DXColorAdjustSaturation 函数调整颜色饱和度。定义:D3DXCOLOR *WINAPI D3DXColorAdjustSaturation( D3DXCOLOR *pOut, const D3DXCOLOR *pC, FLOAT s);参数:pOut [in, out] 指向D3DXCOLOR结构,返原创 2004-09-29 17:29:00 · 3413 阅读 · 0 评论 -
D3DXColorLerp 函数
D3DXColorLerp 函数把两个颜色值线性地插补创建一个新颜色值。定义:D3DXCOLOR *D3DXColorLerp( D3DXCOLOR *pOut, CONST D3DXCOLOR *pC1, CONST D3DXCOLOR *pC2, FLOAT s);参数:pOut [in, out] 指向一个返回D3D原创 2004-09-29 17:48:00 · 4203 阅读 · 0 评论 -
D3DXColorModulate 函数
D3DXColorModulate 函数混合两个颜色。定义:D3DXCOLOR *D3DXColorModulate( D3DXCOLOR *pOut, CONST D3DXCOLOR *pC1, CONST D3DXCOLOR *pC2);参数:pOut [in, out] 指向一个返回D3DXCOLOR结构的结果。 pC原创 2004-09-29 18:02:00 · 3131 阅读 · 0 评论 -
DirectX的前途
自从DirectX 9在2002年发布后,就成为寿命最长的DirectX API,大家一直都在期盼着Microsof能早点发布新的API:传说中的DirectX 10,可惜微软好像一直没有什么动静,只是在2003年放出一丝风声,说将会发布新的图形API——My Game来取代为微软、nVIDIA,还有ATI的成功立下汗马功劳的DirectX,之后就又进入微软的传统的“无线电静默”状态,就像微软在推原创 2004-09-27 13:51:00 · 6152 阅读 · 1 评论 -
DirectX9.0 Summer 2004介绍
今天下载了DX9.0 2004 版,立即把原来的旧版本删除了,重新安装新版本,一打开帮助文档,看看有什么更新,仔细看了一下,大多数没有改变,主要改动以下几方面:· DirectX Graphics · DirectInput · DirectSound还有加入了新的Sample Framework,它可以支持新的UI界面,比较不错。DirectDraw是建议不要再使用原创 2004-09-27 14:16:00 · 5620 阅读 · 0 评论 -
深入浅出Direct3D
深入浅出Direct3D 蔡军生 版权所有·第 1 章 3D基础知识·1.1 什么是3D?·1.2 3D相关概念·1.3 DirectX介绍·1.4 Direct3D中3D基元·1.5 Direct3D的表面和顶点法向矢量·第 2 章 Direct3D系统架构·2.1 Direct3D在原创 2004-09-27 15:26:00 · 5558 阅读 · 2 评论 -
相关概念
大家学习立体几何时,都要用到坐标系,才能把几何体定位和计算。在计算机里要显示3D的图像,就是显示几何体,就是把那些数字化的坐标转换成几何图像显示。因此坐标系必须要学习的,否则那一大堆坐标数据就没有办法显示,或者显示出来是乱七八糟的。在Direct3D里也要用到坐标系,它的坐标系是左手坐标系。目前常见的有两种坐标系,如下图所示: 图1.1:左手坐标系,右手坐标系 左手坐标系就是x轴的正方向指向右原创 2004-09-27 15:29:00 · 4087 阅读 · 0 评论 -
DirectX介绍
DirectX介绍 蔡军生 微软发布"具有多项令人兴奋功能"的DirectX 9.0!DirectX获得更好的图像显示质量,使多人游戏具可伸缩性,以及更棒的音频效果。DirectX 9.0至少在以下几个方面表现出色:1、 强化了针对DirectDraw和Direct3D的接口,简化了应用扩展,提升性能2、 改善了图形创作工具,更易于做出最佳的3-D角色和环境3、 点光源式光影和像素原创 2004-09-27 15:36:00 · 5034 阅读 · 2 评论 -
附录A 1. Direct3D对象
附录A 1. Direct3D对象 (蔡军生 版权所有)在Direct3D应用程序里,最先创建的对象是Direct3D对象,最后删除的对象也是Direct3D对象。那么Direct3D对象是用来作什么的呢?是怎么样创建的呢?由于Direct3D对象是用COM实现,所以要用到Direct3D对象,就要先初始化COM库,然后创建Direct3D的COM对象。如果在C++原创 2004-09-27 17:30:00 · 3692 阅读 · 0 评论 -
附录A 2. Direct3D的设备
·附录A 2. Direct3D的设备 (蔡军生 版权所有) 在Direct3D应用程序里,Direct3D的设备是非常重要的。因为Direct3D的设备提供矩阵变换,三维图像渲染和三维图像光栅化显示。这些操作都需要大最运算,目前大部份集中在显卡中处理。Direct3D的设备就是硬件显卡的一种抽象,当然它是高于硬件的,因为它不但可以直接使用硬件功能,还可以用软件来原创 2004-09-27 17:30:00 · 4254 阅读 · 0 评论 -
附录A 3. Direct3D的资源
·附录A 3. Direct3D的资源 (蔡军生 版权所有)在Direct3D里的资源,有很多种,但主要有纹理和缓冲区。应用程序要创建,加载,拷贝和使用这些资源。资源的接口都是继承于COM接口IDirect3DResource9,其中纹理和缓冲区日的接口都是继承上面的接口。这些的资源的接口如下图所示:资源有很多事情要做,比如了解资源属性,操作资源,进行资源访问时同步原创 2004-09-27 17:32:00 · 2957 阅读 · 2 评论 -
附录A 4. Direct3D的着色
·附录A 4. Direct3D的着色 (蔡军生 版权所有)现在来介绍一下Direct3D里的3D多边形着色。在Direct3D里有什么样的着色模式呢?怎么样设置着色模式呢?在Direct3D里有两种着色模式,分别是平面着色和Gouraud着色。两种着色区分就是在多边形里每点着色的区别。平面着色就是用多边形第一个顶点的颜色作来整个多边形里每个点的颜色;而Gourau原创 2004-09-27 17:33:00 · 3834 阅读 · 3 评论 -
附录A 5. Direct3D显示场境
·附录A 5. Direct3D显示场境 (蔡军生 版权所有)在Direct3D里怎么显示场境呢?或者说怎么样显示一帧的画面?带着这个问题,我们来看看Direct3D显示过程。由于任何的动画,都是基于电影的播放原理。就是由于人眼具有图像视觉延迟性,当看到一帧图画时,并不能立即就从大脑里消失。如果一秒钟内至少保持24帧图画播放,就会看到的图画是连续的动画。因此,Dir原创 2004-09-27 17:34:00 · 3177 阅读 · 1 评论 -
附录A 8. Direct3D中的3D坐标变换
·附录A 8. Direct3D中的3D坐标变换(蔡军生 版权所有)在游戏里有很多物体,就拿CS来说,常常看到里面有很多木箱,这些木箱位置是怎么样放上去的呢?因为这些木箱都相同的,同样大小,同样纹理,但摆的位置不一样,要表示这种不一样的位置,就要用到3D坐标空间,而用坐标来表示两个木箱相对位置。坐标变换是3D游戏里最基本知识,时时都要用到变换。比如从模型的坐原创 2004-09-27 17:35:00 · 4166 阅读 · 3 评论 -
附录A 9. 矩阵
·附录A 9. 矩阵(蔡军生 版权所有)Direct3D使用矩阵这个工具来实现3D变换。其实矩阵是用来计算线性代数最方便工具,因为坐标变换都是线性方程组组成,肯定要用到矩阵这个工具来计算,才是最佳的方法。在3D里,最常用的是4行4列的矩阵,因为它才可以更加方便地计算三维坐标的平移,旋转和缩放等。如果用3行的矩阵,要表示平移是有困难的。后面接讨论下面内容:3D变换原创 2004-09-27 17:36:00 · 2956 阅读 · 2 评论 -
DirectX Software Development Kit
The DirectX Software Development Kit 这个就是微软的DX SDK。MS的DXSDK主要用来开发多媒程序,它是低级程序开发接口API。它可以用来创建游戏和其它高性能的多媒体应用程序。主要包括高性能的2D,3D,声音和输入控制。DirectX Programming Guide DirectX Tools DirectX Sample原创 2004-09-28 09:38:00 · 4525 阅读 · 1 评论 -
D3DXColorAdd函数
D3DXColorAdd Function添加两个颜色值,并返回这个组合值。定义:D3DXCOLOR *D3DXColorAdd( D3DXCOLOR *pOut, CONST D3DXCOLOR *pC1, CONST D3DXCOLOR *pC2);参数:pOut [in, out] 返回指向一个 D3D原创 2004-09-28 09:51:00 · 3152 阅读 · 0 评论 -
Direct3D好,还是OpenGL好呢?
Q: Direct3D好,还是OpenGL好呢?A: 当你去OPENGL网站问时,肯定说是OPENGL好,如果去D3D网站问时,肯定是说D3D好。其实上,这两个API都是做同样的事情,都是基于同样的硬件尽可能加速,没有谁好谁坏,只要你选择一个自己感觉良好的API就好了。每个API只要你发挥到极点,都可以做出同样的水平游戏。原创 2004-09-28 10:05:00 · 6728 阅读 · 4 评论 -
D3DXFloat16To32Array 函数
D3DXFloat16To32Array 函数转换16-bit位的float数组为32-bit的float数组。定义:FLOAT *WINAPI D3DXFloat16To32Array( FLOAT *pOut, const D3DXFLOAT16 *pIn, UINT n);参数:pOut [in, out] 指向32-bi原创 2004-09-30 17:31:00 · 2894 阅读 · 0 评论 -
D3DXFresnelTerm 函数
D3DXFresnelTerm 函数计算菲涅耳系数。定义:FLOAT WINAPI D3DXFresnelTerm( FLOAT CosTheta, FLOAT RefractionIndex);参数:CosTheta [in] 本值必须在 0和1之间。 RefractionIndex [in] The refraction原创 2004-09-30 17:32:00 · 3388 阅读 · 0 评论 -
什么是3D
3D是three-dimensional的缩写,就是三维图形。在计算机里显示3D图形,就是说在平面里显示三维图形。不像现实世界里,真实的三维空间,有真实的距离空间。计算机里只是看起来很像真实世界,因此在计算机显示的3D图形,就是让人眼看上就像真的一样。人眼有一个特性就是近大远小,就会形成立体感。计算机屏幕是平面二维的,我们之所以能欣赏到真如实物般的三维图像,是因为显示在计算机屏幕上时色彩灰度的不同原创 2004-09-27 15:27:00 · 5138 阅读 · 1 评论 -
D3DXColorScale 函数
D3DXColorScale 函数按比例系数来放大或缩小颜色值。定义:D3DXCOLOR *D3DXColorScale( D3DXCOLOR *pOut, CONST D3DXCOLOR *pC, FLOAT s);参数:pOut [in, out] 指向一个返回D3DXCOLOR结构的结果。 pC [in] 指向一个原创 2004-09-30 15:13:00 · 2906 阅读 · 0 评论 -
D3DXCreateMatrixStack 函数
D3DXCreateMatrixStack 函数创建接口ID3DXMatrixStack的实例。定义:HRESULT WINAPI D3DXCreateMatrixStack( DWORD Flags, LPD3DXMATRIXSTACK *ppStack);参数:Flags [in] 没有实现,用0作为参数。 ppStack原创 2004-09-30 17:25:00 · 3491 阅读 · 0 评论 -
D3DXMatrixAffineTransformation2D 函数
D3DXMatrixAffineTransformation2D 函数在X-Y平面创建一个仿射变换变换矩阵。NULL的参数就会当作是单位矩阵。定义:D3DXMATRIX *WINAPI D3DXMatrixAffineTransformation2D( D3DXMATRIX *pOut, FLOAT Scaling, CONST D3DXV原创 2004-10-08 17:57:00 · 2579 阅读 · 0 评论 -
D3DXMatrixMultiplyTranspose 函数
D3DXMatrixMultiplyTranspose 函数计算两个矩阵乘积的转置矩阵。定义:D3DXMATRIX *WINAPI D3DXMatrixMultiplyTranspose( D3DXMATRIX* pOut, const D3DXMATRIX* pM1, const D3DXMATRIX* pM2);参数:pOut原创 2004-10-09 12:53:00 · 3083 阅读 · 0 评论 -
D3DXMatrixOrthoOffCenterLH 函数
D3DXMatrixOrthoOffCenterLH 函数创建一个用户定制的左手坐标系的正交投影矩阵。定义:D3DXMATRIX *WINAPI D3DXMatrixOrthoOffCenterLH( D3DXMATRIX *pOut, FLOAT l, FLOAT r, FLOAT b, FLOAT t, FLOAT z原创 2004-10-10 09:30:00 · 5362 阅读 · 0 评论 -
D3DXMatrixOrthoOffCenterRH 函数
D3DXMatrixOrthoOffCenterRH 函数创建一个用户定制的右手坐标系的正交投影矩阵。定义:D3DXMATRIX *WINAPI D3DXMatrixOrthoOffCenterRH( D3DXMATRIX *pOut, FLOAT l, FLOAT r, FLOAT b, FLOAT t, FLOAT z原创 2004-10-10 09:35:00 · 2706 阅读 · 0 评论 -
D3DXMatrixOrthoRH函数
D3DXMatrixOrthoRH函数创建一个右手坐标系正交投影矩阵。定义:D3DXMATRIX *WINAPI D3DXMatrixOrthoRH ( D3DXMATRIX *pOut, FLOAT w, FLOAT h, FLOAT zn, FLOAT zf);参数:pOut [in, out] 指向D3DXMA原创 2004-10-10 09:36:00 · 2858 阅读 · 0 评论 -
D3DXMatrixPerspectiveFovRH函数
D3DXMatrixPerspectiveFovRH函数创建一个右手坐标系的透视投影矩阵。定义:D3DXMATRIX *WINAPI D3DXMatrixPerspectiveFovRH( D3DXMATRIX *pOut, FLOAT fovy, FLOAT Aspect, FLOAT zn, FLOAT zf);参数:原创 2004-10-10 09:46:00 · 3392 阅读 · 2 评论 -
D3DXMatrixDecompose 函数
D3DXMatrixDecompose 函数分解一个3D变换矩阵为缩放系数,旋转分量和平移向量。定义:HRESULT WINAPI D3DXMatrixDecompose( D3DXVECTOR3 *pOutScale, D3DXQUATERNION *pOutRotation, D3DXVECTOR3 *pOutTranslation,原创 2004-10-09 09:14:00 · 3407 阅读 · 0 评论 -
D3DXMatrixDeterminant 函数
D3DXMatrixDeterminant 函数计算矩阵行列式值。定义:FLOAT WINAPI D3DXMatrixDeterminant( CONST D3DXMATRIX *pM);参数:pM [in] 指向输入D3DXMATRIX结构的矩阵。 返回值:返回矩阵对角线(11,22,33,44)上乘积。函数信息:原创 2004-10-09 10:15:00 · 2896 阅读 · 0 评论