随笔分类 -  C++

摘要:1.融合方程首先绘制那些不需要融合的物体,然后将需要融合的物体按照相对于摄像机的深度进行排序。融合后的颜色=源像素颜色值*源融合因子 + 目标像素颜色值*目标融合因子Direct3D默认下是禁用融合运算的,以下方法可开启融合运算。Device->SetRenderState(D3DRS_ALPHABLENDENABLE, true);2.通过设置绘制状态,可以设置源融合因子和目标融合因子。Device->SetRenderState(D3DRS_SRCBLEND, value);Device->SetRenderState(D3DRS_DESTBLEND, value);3. 阅读全文
posted @ 2014-04-11 17:04 hometown 阅读(350) 评论(0) 推荐(0)
摘要:借助纹理映射技术,我们可以将图像数据映射到三角形图元中。在Direct3D中,纹理用接口IDirect3DTexture9来表示。1.纹理坐标Direct3D使用的纹理坐标,由沿水平方向的u轴和沿垂直方向的v轴构成。用坐标对(u,v)标示的纹理元素称为纹理元。为了能处理不同尺寸的纹理,Direct3D将纹理坐标做了规范处理,使之限定在区间[0,1]内。纹理的FVF标记:D3DFVF_TEX1.2.创建并启用纹理纹理数据通常从磁盘的图像文件读入,然后再加载到IDirect3DTexture9对象中。使用的函数如下:HRESULT D3DXCreateTextureFromFile( LPDIRE 阅读全文
posted @ 2014-04-10 16:01 hometown 阅读(277) 评论(0) 推荐(0)
摘要:使用光照时,我们无需自行指定顶点的颜色。Direct3D会将顶点送入光照的计算引擎,依据光源类型,材质以及物体表面相对光源的朝向,计算出每个顶点的颜色值。1.光照的组成在Direct3D的光照模型中,有3种类型的光。1.1环境光。这种类型的光经其他表面反射到达物体表面,并照亮整个场景。1.2漫射光。当光到达某一表面时,将沿着各个方向均匀反射。从各个方向观察,亮度均相同。1.3镜面光。当光到达某一表面时,将沿着特定方向反射。只能在一定的角度才能看到高亮度。镜面光计算量较大,默认情况下Direct3D禁用镜面反射。启用镜面光的方法:Device->SetRenderState(D3DRS_S 阅读全文
posted @ 2014-04-09 18:28 hometown 阅读(333) 评论(0) 推荐(0)
摘要:1.颜色表示。 RGB数据可以用两种不同的结构来保存。1.1D3DCOLOR,他实际与DWORD类型相同。32位,D3DCOLOR中的每一项占居一位。每位取值[0,255]。用宏D3DCOLOR_ARGB和宏D3DCOLOR_XRGB来表示。1.2D3DCOLORVALUE,在该结构中我们用单精度浮点数来表示每个颜色分量的亮度值。取值范围0~1。我们可以用D3DXCOLOR来替代D3DCOLORVALUE。2.顶点颜色。 图元的颜色由构成改图元的顶点颜色来决定。相关标识D3DFVF_DIFFUSE.3.着色。有两种着色模式:平面着色和高洛德着色。Device->SetRenderStat 阅读全文
posted @ 2014-04-08 17:45 hometown 阅读(245) 评论(0) 推荐(0)
摘要:1.顶点缓存和索引缓存一个顶点缓存是一个包含顶点数据的连续内存空间;一个索引缓存是一个包含索引数据的连续内存空间。顶点缓存用接口IDirect3DVertexBuffer9表示;索引缓存用接口IDirect3DIndexBuffer9表示。1.1创建顶点缓存和索引缓存HRESULT IDirect3DDevice9::CreateVertexBuffer( UINT Length, //为缓存分配的字节数 DWORD Usage, //指定如何使用缓存的附加属性,0表明无需附加属性 DWORD FVF, //存储在顶点缓存中的灵活顶点格式 D3DPOOL Pool, //容纳缓存的内存池 ID 阅读全文
posted @ 2014-04-08 16:39 hometown 阅读(297) 评论(0) 推荐(0)
摘要:绘制流水线的功能是,在给定3D场景和指定观察方向的虚拟摄像机的几何描述时,创建2D图像。1.模型表示1.1场景是物体或模型的集合,任何物体都可以用三角形网格逼近表示。在Direct3D中,顶点除了包含空间信息外,还有其他属性(如颜色,法线等等)。Direct3D赋予了我们定义顶点格式的自由。(1)首先创建顶点数据的结构体;(2)然后用灵活顶点格式(FVF)的组合来描述顶点的结构。【灵活顶点描述中的顺序必须和顶点数据的结构体中顺序一致】struct Vertex { Vertex(); Vertex(float x,float y,float z) { _x=x;_y=y;_z=z; } flo 阅读全文
posted @ 2014-04-08 11:27 hometown 阅读(859) 评论(0) 推荐(0)
摘要:1.Direct3D概述Direct3D是一套底层图形API,借助该API,我们能够利用硬件加速功能来绘制3D场景。设备制造商将其产品支持的全部功能都实现到HAL中。1.1 Direct3D提供了参考光栅设备(REF设备),它以软件运算方式完全支持Direct3D API。REF速度缓慢,在测试以外的其他环节都不适用。1.2 D3DDEVTYPE枚举类型 在程序中HAL设备用值D3DDEVTYPE_HAL来表示,REF设备用值D3DDEVTYPE_REF来表示。2.COM:创建COM接口时不可以使用new关键字,使用完用Realease方法释放。COM接口都有一个前缀I。3.预备知识3.1.表 阅读全文
posted @ 2014-04-07 15:51 hometown 阅读(295) 评论(0) 推荐(0)
摘要:error LNK2019: 无法解析的外部符号 _DirectDrawCreateEx@16,该符号在函数 "int __cdecl DD_Init(int,int,int)" (?DD_Init@@YAHHHH@Z) 中被引用在编译项目时,报错。如上所述。很明显链接时没有找到DirectDrawCreateEx函数所在的位置,少链接文件。执行方法,右键“创建的项目”->“属性”->“VC++目录”。分别对“包含目录”和“库目录”添加所安装DirectX sdk的Include路径。(本人电脑路径为C:\Program Files (x86)\Microsof 阅读全文
posted @ 2014-02-23 20:57 hometown 阅读(1194) 评论(0) 推荐(1)
摘要:ASCII码字符char,字符指针char*,字符数组char a[];例如:char a='A'; char* pC="beijing"; char aC[]="beijing";Unicode码字符wchar_t,字符指针wchar_t*,字符数组wchar_t a[];例如:wchar_t b='A'; wchar_t* pB=L"beijing"; //L代表long. wchar_t bC[]=L"beijing";通用码:维护单一原始码,既能按ASCII编译又能按Unic 阅读全文
posted @ 2013-12-17 16:33 hometown 阅读(330) 评论(0) 推荐(0)
摘要:以上7中方式的代码实现:/* CString t1,t2; int a1,a2,a3; (GetDlgItem(IDC_EDIT1)->GetWindowTextW(t1)); (GetDlgItem(IDC_EDIT2)->GetWindowTextW(t2)); a1=_ttoi(t1); a2=_ttoi(t2); a3=a1+a2; TCHAR t3[10]; _itow_s(a3, t3,10,10); GetDlgItem(IDC_EDIT3)->SetWindowTextW( t3);*/ /*CString t1,... 阅读全文
posted @ 2013-12-17 12:14 hometown 阅读(329) 评论(0) 推荐(0)
摘要:指向函数的指针必须包含指向函数的内存地址。声明方式:返回类型 (*Type)(参数)。有三部分组成:指向函数的返回类型;指针名称;指向函数的形参列表。注:赋给指针的函数必须与定义的指针类型相同。我们可以使用初始化语句来初始化函数指针,也可以是这个指针指向另一个函数。函数的指针可以作为参数,指针在不同的情况下指向不同的函数,这样使得具体使用的函数由调用程序决定。#include using namespace std;long sumA(long a,long b);long sumB(long x,long y);long sum(long x,long y,long (*pf)(long . 阅读全文
posted @ 2013-11-14 18:16 hometown 阅读(199) 评论(0) 推荐(0)
摘要:#include 主要是输入输出控制。Dec 十进制;hex 十六进制;oct 八进制;setw 设置宽度;setfill 设置填充值;setbase 将数字转换为n进制;setprecision 设置输出的位数;setiosflags 设置相关的标志表示(如下)。resetiosflags 清除指定的标志。setiosflags(ios::fixed) 固定的浮点显示setiosflags(ios::scientific) 指数表示setiosflags(ios::left) 左对齐setiosflags(ios::right) 右对齐setiosflags(ios::skipws) 忽略前 阅读全文
posted @ 2013-11-14 11:58 hometown 阅读(232) 评论(0) 推荐(0)
摘要:要注意:同返回指针一样,永远不要从函数中返回局部变量的引用。double& lowest(double a[],int len){ int j=0; for(int i=1;ia[i]) { j=i; } } return a[j];}int main(void) { double arrayT[]={2.3,1.2,2.0,2.6,6.3}; int len=sizeof(arrayT)/sizeof(double); for(int i=0;i<len;i++) { cout<<... 阅读全文
posted @ 2013-11-13 17:47 hometown 阅读(329) 评论(0) 推荐(0)
摘要:stdarg.h 头文件,主要目的是让函数可以接受可变参数。va_list :用来保存宏va_arg与宏va_end所需信息。va_start :使va_list指向起始的参数va_arg :检索参数va_end :释放va_listva_copy : 拷贝va_list的内容double sum(int count,...){ if(count<=0) { return 0; } va_list arg_ptr; va_start(arg_ptr,count); double sum=0; for(double i=0;i<count;... 阅读全文
posted @ 2013-11-13 17:41 hometown 阅读(216) 评论(0) 推荐(0)
摘要:纤程(fiber)是一种由应用程序自己调度的轻量级线程。纤程不能被线程自动调用。一个线程可以创建任意多个纤程。如果想使用纤程,可以使用createfiber()创建,但是其处于挂起状态。即纤程创建后不能马上执行。一旦创建了纤程,可以通过纤程的地址在纤程之间转换,纤程本身不能完成这项工作,需要SwitchToFiber()来自己完成转换工作!一个纤程在以下两种情况下将暂停:1.线程调用了其他纤程;2.该纤程所在的线程用完了系统分配的时间片。1.LPVOID WINAPI ConvertThreadToFiber( LPVOID lpParameter);//参数为指向传给纤程的数据,可以通过Ge 阅读全文
posted @ 2013-10-31 15:32 hometown 阅读(1594) 评论(0) 推荐(0)
摘要:SuspendThread()暂停一个线程,ResumeThread()重启一个线程。参数均为线程的句柄。#include #include using namespace std;DWORD WINAPI mythread(void *p){ for(int i=0;i<100;i++) { cout<<"hello,everybody!"<<endl; ::Sleep(100); } return 0;}int main(){ HANDLE handle; DWORD dw; handle=::CreateThread(... 阅读全文
posted @ 2013-10-29 14:31 hometown 阅读(239) 评论(0) 推荐(0)
摘要:因为我们经常使用向量类,所以在这里我们创建一个类似于向量的类加深我们对如何设计和实现一个类的理解。我们决定写一个模板类,这样可以使用户用Vec类存储几种不同类型的数据成员。模板类的写法:template class Vec{public: //接口private : //实现};因为这个类中要实现begin,end,size等函数的功能。所以Vec中要保存首元素地址,末元素地址和元素个数。我们可以只保存首元素地址和末元素地址,然后计算元素的个数。Vec类改进为:template class Vec{public: //接口private : T* data;//Vec中的首元素 T* li.. 阅读全文
posted @ 2013-10-20 20:34 hometown 阅读(509) 评论(0) 推荐(0)
摘要:#include #include #include using namespace std;template T median(vector v){ typedef typename vector::size_type vec_sz;//注:关键字typename,说明vector::size_type是一个类型。 vec_sz size=v.size(); if(size==0) { throw domain_error("空的集合!"); } sort(v.begin(),v.end()); vec_sz mid=s... 阅读全文
posted @ 2013-10-18 12:01 hometown 阅读(252) 评论(0) 推荐(0)
摘要:#include #include #include #include using namespace std;//根据空格等将字符串,拆分成多个单词。vector split(const string& s){ vector ret; typedef string::size_type string_size; string_size i=0; while(i!=s.size()) { while(i!=s.size() && isspace(s[i])) { ++i; } strin... 阅读全文
posted @ 2013-10-15 17:04 hometown 阅读(392) 评论(0) 推荐(0)
摘要:bool space(char c){ return isspace(c);}bool not_space(char c){ return !isspace(c);}vector new_split(const string& s){ typedef string::const_iterator iter; vector ret; iter i=s.begin(); while(i!=s.end()) { i=find_if(i,s.end(),not_space);//find_if前两个参数指定一个序列,当第3个参数为TRUE时终止调... 阅读全文
posted @ 2013-10-14 18:03 hometown 阅读(287) 评论(0) 推荐(0)