使用MFC做D3D的框架
摘要:转载请注明出处http://www.cnblogs.com/CAION/p/3192111.html(程序运行时是和其他程序挺像 = =,但我保证这是原创的)1.将D3D的初始化,渲染等等一些行为封装为图形(Graph)类代码如下(这里使用绘制旋转的茶壶作为例子),头文件#pragma once#include #include class Graphi{public: Graphi(void); ~Graphi(void); bool Initialize(int,int,HWND); void Shutdown(); bool Setup(); bool...
阅读全文
posted @
2013-07-15 21:33
曾健
阅读(3317)
推荐(0)
D3D中关于各个空间的介绍
摘要:最近在看几何着色器,才发现自己对顶点的变换过程又忘光了,赶紧找出书来复习… 下面是我的一些笔记 一、观察空间 为了生存场景的2D图像,在场景中放置一个摄像机,摄像机指定了用户能看到的区域。在摄像机上附加局部坐标系,称之为观察空间或者摄像机空间。附加的坐标系,我们一如既往使用矩阵表示坐标系。最后通过操纵矩阵从而操纵摄像机。 从观察空间到世界空间的变换矩阵(别看错了~)是这样子的 W = U...
阅读全文
posted @
2013-03-08 17:12
曾健
阅读(1197)
推荐(0)
D3D混合技术的应用
摘要:1)ALPHA测试,裁剪像素 可以通过ALPHA测试,判定当ALPHA位于某个区间的像素输出或者不输出。这项技术运用于绘制铁丝网之类的“有洞”的纹理图像,比使用混合技术要来的节省资源。比如下面这幅纹理图片 左边是它的RGB颜色通道,右边是它的ALPHA灰度图,只有在网上才有ALPHA值。使用HLSL语言的内置函数clip(x),裁剪x<0的像素。从本质上讲,我们剔除了铁丝网上的非铁丝像素。...
阅读全文
posted @
2013-03-08 17:11
曾健
阅读(639)
推荐(0)
D3D中的模板缓冲
摘要:就如同现实生活中使用的模板,D3D中的模板缓冲也是用来挡住一些像素,使之不能绘制到后台缓冲区。我们通过ID3DDepthStencilState接口控制模板缓冲区和深度缓冲区。下面从创建到使用介绍ID3DDepthStencilState接口。 注意:同混合和渲染状态一样,深度模板状态既可以在C++程序中定义,也可以在效果文件中定义。下面是在C++文件中定义的例子。 在C++程序中,步骤可以分...
阅读全文
posted @
2013-03-04 20:56
曾健
阅读(2042)
推荐(0)
D3D中的混合
摘要:D3D中的混合指的是目标像素(后台缓冲)与源像素(光栅化像素)混合(blend)输出的过程。 一、影响最终的混合后输出结果的因素有个:混合因子,混合方法。 1)混合因子(D3D10_BLEND)。 混合因子共有19个。注意:有些混合因子以_COLOR结尾,有的以_ALPHA结尾。其中以_COLOR结尾的混合因子不能用于APPHA混合方程 混合因子分为源混合因子,目标混合因子。区别在于,前...
阅读全文
posted @
2013-02-26 18:37
曾健
阅读(2200)
推荐(0)
D3D中的纹理映射
摘要:注:这里讲的纹理指的是贴在3D物体表面的一层像素,并不涉及问题的其他用途。 在篇文档《D3D中的光照》中,我们为每个顶点指定了材质(漫反射材质和高光材质)。 在这里,我们放弃顶点材质的做法,使用纹理作为物体的材质(即对应的漫反射纹理贴图,高光纹理贴图)。 在程序中使用纹理,可以大致分为两个阶段。第一阶段,从硬盘中读取文件(C++程序),第二阶段在着色器程序中使用纹理进行一系列计算。 一、 ...
阅读全文
posted @
2013-02-22 17:14
曾健
阅读(1291)
推荐(0)
D3D中的光照
摘要:D3D中光源可大致分为3种,点光源,方向光,环境光 1) 可以大致对应我们生活中的 电灯泡,太阳光,环境光。通过抽象各种光的性质,我们可以使用结构体Light,以更方便地表示光。 光可以定义如下 Struct Light{ D3DXVECTOR3 pos;//位置 D3DXVECTOR3 dir;//方向 D3DXCOLOR ambiet;//环境光颜色 D3DXCOLOR dif...
阅读全文
posted @
2013-02-21 22:41
曾健
阅读(454)
推荐(0)
DIrectX的windows编程基础
摘要:今天想看看Direct10的,却发现自己连最基本的Windows程序都忘了是怎样的..于是照着书码了一遍代码,顺便贴到博客上来,提醒自己..下面是一个简单的Windows应用程序。#include <windows.h>HWND myWinWnd = 0;bool iniWinApp(HINSTANCE instanceHandle,int nshow);int run();LRESULT CALLBACK WndProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam);/*第一个参数为该程序的实例句柄,一个程序可以有多个实例,就是我
阅读全文
posted @
2013-01-25 15:53
曾健
阅读(328)
推荐(0)
D3D窗口的初始化
摘要:要初始化一个D3D窗口需要以下步骤1.填充一个DXGI_SWAP_CHAIN_DESC结构体 也就是用来描述你所要创建的交换链的特性。 (交换链的特性有:BufferDesc:描述了后台缓冲区的宽、高、像素格式等属性。SampleDesc:描述了多重采样数量的质量级别,在龙书中统一设为1,0。BufferUsage:设为DXGI_USAGE_RENDER_TARGET_OUTPUT,表示为将场景渲染到后台缓冲区。BufferCount:交换链中后台缓冲区数量,一般只用一个后台缓冲区实现双缓存。OutputWindow:将要渲染到的窗口句柄。SwapEffect:设为DXGI_SWAP_EFFE
阅读全文
posted @
2012-12-08 16:08
曾健
阅读(2298)
推荐(0)
Dx10 学习buffer
摘要:这个程序是一个3D的彩色立方体,用到的知识点很简单。使用的是《DirectX 3D 游戏编程入门》(我习惯称为龙书,下文同)的框架。下面只是其中一些步骤中的要点,并无逻辑关联。1.buffer的建立。buffer的描述buffer是什么就不说了,很多书都有定义。D3D的buffer使用D3D10_BUFFER_DESC结构体描述,也即是我们每次建立一个新的buffer,都要建立相对应的DESC结构体。由于龙书是入门性质的书籍,所以作者只给我们介绍了几个对应的参数含义。他们分别是:UsageByteWidthBindFlagsCPUAccessFlags MiscFlags。意义依次为,buff
阅读全文
posted @
2012-12-07 13:36
曾健
阅读(312)
推荐(0)
D3D编程的常见报错及解决
摘要:d3dapp.cpp(136): error C2664: 'wcscpy' : cannot convert parameter 1 from 'CHAR [32]' to 'wchar_t *'1> Types pointed to are unrelated;这是用龙书会出现的常见错误,把Character set改成Unicode或者多字节字符集试试~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~·
阅读全文
posted @
2012-12-02 22:41
曾健
阅读(1700)
推荐(0)