vs2003的debug菜单没有direct3d选项

这些日子学习d3d到了可编程的渲染管线部分. 顶点或者象素渲染代码(用HLSL语言)写在vsh或者psh中, 既然是写的代码, 那么免不了可能出一些问题, 需要调试. 调试这里面的代码可不象调试我们cpp中的代码那么直接. 大概需要做一些设置:

继续阅读

Posted in DirectX3D | Tagged | Leave a comment

将ocx和DLL文件打包成cab文件,实现IE浏览器在线安装

以下是转帖:

将ocx和DLL文件打包成cab文件,实现IE浏览器在线安装 收藏

我们打开淘宝等网站时,IE浏览器会提示安装空间,这个控件便是用于对用户名密码进行加密的ActiveX控件。如何在我们的站点上安装如此控件,让用户可以通过简单的点击便可方便使用我们的空间呢?

下面是如何让在你的站点上安装控件的方法。

 

 

 基础知识

html语言中Object标签

定义和用法

定义一个嵌入的对象。请使用此元素向您的 XHTML 页面添加多媒体。此元素允许您规定插入 HTML 文档中的对象的数据和参数,以及可用来显示和操作数据的代码。<object> 标签用于包含对象,比如图像、音频、视频、Java applets、ActiveX、PDF 以及 Flash。object 的初衷是取代 img 和 applet 元素。不过由于漏洞以及缺乏浏览器支持,这一点并未实现。浏览器的对象支持有赖于对象类型。不幸的是,主流浏览器都使用不同的代码来加载相同的对象类型。而幸运的是,object 对象提供了解决方案。如果未显示 object 元素,就会执行位于 <object> 和 </object> 之间的代码。通过这种方式,我们能够嵌套多个 object 元素(每个对应一个浏览器)。

实例

向HTML中添加对象:

  1. <object classid="clsid:F08DF954-8592-11D1-B16A-00C0F0283628" id="Slider1"   
  2. width="100" height="50">  
  3.   <param name="BorderStyle" value="1" />  
  4.   <param name="MousePointer" value="0" />  
  5.   <param name="Enabled" value="1" />  
  6.   <param name="Min" value="0" />  
  7.   <param name="Max" value="10" />  
  8. </object>  

继续阅读

Posted in 杂项 | Tagged | Leave a comment

渲染管线以及directx的发展过程

 

本文摘抄自网页,以备日后学习之用。
显卡 : 什么是渲染管线 


渲染管线也称为渲染流水线,是显示芯片内部处理图形信号相互独立的的并行处理单元。在某种程度上可以把渲染管线比喻为工厂里面常见的各种生产流水线,工厂里的生产流水线是为了提高产品的生产能力和效率,而渲染管线则是提高显卡的工作能力和效率。 
渲染管线的数量一般是以 像素渲染流水线的数量×每管线的纹理单元数量 来表示。例如,GeForce 6800Ultra的渲染管线是16×1,就表示其具有16条像素渲染流水线,每管线具有1个纹理单元;GeForce4 MX440的渲染管线是2×2,就表示其具有2条像素渲染流水线,每管线具有2个纹理单元等等,其余表示方式以此类推。 

渲染管线的数量是决定显示芯片性能和档次的最重要的参数之一,在相同的显卡核心频率下,更多的渲染管线也就意味着更大的像素填充率和纹理填充率,从显卡的渲染管线数量上可以大致判断出显卡的性能高低档次。但显卡性能并不仅仅只是取决于渲染管线的数量,同时还取决于显示核心架构、渲染管线的的执行效率、顶点着色单元的数量以及显卡的核心频率和显存频率等等方面。一般来说在相同的显示核心架构下,渲染管线越多也就意味着性能越高,例如16×1架构的GeForce 6800GT其性能要强于12×1架构的GeForce 6800,就象工厂里的采用相同技术的2条生产流水线的生产能力和效率要强于1条生产流水线那样;而在不同的显示核心架构下,渲染管线的数量多就并不意味着性能更好,例如4×2架构的GeForce2 GTS其性能就不如2×2架构的GeForce4 MX440,就象工厂里的采用了先进技术的1条流水线的生产能力和效率反而还要强于只采用了老技术的2条生产流水线那样。 



显卡 : 什么是顶点着色单元 



顶点着色单元是显示芯片内部用来处理顶点(Vertex)信息并完成着色工作的并行处理单元。顶点着色单元决定了显卡的三角形处理和生成能力,所以也是衡量显示芯片性能特别是3D性能的重要参数。 
顶点(Vertex)是图形学中的最基本元素,在三维空间中,每个顶点都拥有自己的坐标和颜色值等参数,三个顶点可以构成成一个三角形,而显卡所最终生成的立体画面则是由数量繁多的三角形构成的,而三角形数量的多少就决定了画面质量的高低,画面越真实越精美,就越需要数量更多的三角形来构成。顶点着色单元就是处理着些信息然后再送给像素渲染单元完成最后的贴图工作,最后再输出到显示器就成为我们所看到的3D画面。而显卡的顶点处理能力不足,就会导致要么降低画质,要么降低速度。 

在相同的显示核心下,顶点着色单元的数量就决定了显卡的性能高低,数量越多也就意味着性能越高,例如具有6个顶点着色单元的GeForce 6800GT就要比只具有5个顶点着色单元的GeForce 6800性能高:但在不同的显示核心架构下顶点着色单元的数量多则并不一定就意味着性能越高,这还要取决于顶点着色单元的效率以及显卡的其它参数,例如具有4个顶点着色单元的Radeon 9800Pro其性能还不如只具有3个顶点着色单元的GeForce 6600GT。 


DX9.0C 全称为DirectX9.0c。是微软公司的多媒体技术,很多运行于Windows 环境的新游戏需要DirectX。DirectX包含了对Direct3D、DirectDraw、DirectPlay、DirectSound、DirectInput等显示、声音以及系统的重要升级,是软硬件的接口。 





DirectX并不是一个单纯的图形API,它是由微软公司开发的用途广泛的API,它包含有Direct Graphics(Direct 3D+Direct Draw)、Direct Input、Direct Play、Direct Sound、Direct Show、Direct Setup、Direct Media Objects等多个组件,它提供了一整套的多媒体接口方案。只是其在3D图形方面的优秀表现,让它的其它方面显得暗淡无光。DirectX开发之初是为了弥补Windows 3.1系统对图形、声音处理能力的不足,而今已发展成为对整个多媒体系统的各个方面都有决定性影响的接口。 

DirectX 1.0 
第一代的DirectX很不成功,推出时众多的硬件均不支持,当时基本都采用专业图形API-OpenGL,缺乏硬件的支持成了其流行的最大障碍。 
DirectX 1.0版本是第一个可以直接对硬件信息进行读取的程序。它提供了更为直接的读取图形硬件的性能(比如:显示卡上的块移动功能)以及基本的声音和输入设备功能(函数),使开发的游戏能实现对二维(2D)图像进行加速。这时候的DirectX不包括现在所有的3D功能,还处于一个初级阶段。 

DirectX 2.0 
DirectX 2.0在二维图形方面做了些改进,增加了一些动态效果,采用了Direct 3D的技术。这样DirectX 2.0与DirectX 1.0有了相当大的不同。在DirectX 2.0中,采用了“平滑模拟和RGB模拟”两种模拟方式对三维(3D)图像进行加速计算的。DirectX 2.0同时也采用了更加友好的用户设置程序并更正了应用程序接口的许多问题。从DirectX 2.0开始,整个DirectX的设计架构雏形就已基本完成。 

DirectX 3.0 
DirectX 3.0的推出是在1997年最后一个版本的Windows95发布后不久,此时3D游戏开始深入人心,DirectX也逐渐得到软硬件厂商的认可。97年时应用程序接口标准共有三个,分别是专业的OpenGL接口,微软的DirectX D接口和3DFX公司的Glide接口。而那时的3DFX公司是最为强大的显卡制造商,它的Glide接口自然也受到最广泛的应用,但随着3DFX公司的没落,Voodoo显卡的衰败,Glide接口才逐渐消失了。 

DirectX 3.0是DirectX 2.0的简单升级版,它对DirectX 2.0的改动并不多。包括对DirectSound(针对3D声音功能)和DirectPlay(针对游戏/网络)的一些修改和升级。DirectX 3.0集成了较简单的3D效果,还不是很成熟。 

DirectX 5.0 
微软公司并没有推出DirectX 4.0,而是直接推出了DirectX 5.0。此版本对Direct3D做出了很大的改动,加入了雾化效果、Alpha混合等3D特效,使3D游戏中的空间感和真实感得以增强,还加入了S3的纹理压缩技术。 
同时,DirectX 5.0在其它各组件方面也有加强,在声卡、游戏控制器方面均做了改进,支持了更多的设备。因此,DirectX发展到DirectX 5.0才真正走向了成熟。此时的DirectX性能完全不逊色于其它3D API,而且大有后来居上之势。 

DirectX 6.0 
DirectX 6.0推出时,其最大的竞争对手之一Glide,已逐步走向了没落,而DirectX则得到了大多数厂商的认可。DirectX 6.0中加入了双线性过滤、三线性过滤等优化3D图像质量的技术,游戏中的3D技术逐渐走入成熟阶段。 

DirectX 7.0 
DirectX 7.0最大的特色就是支持T&L,中文名称是“坐标转换和光源”。3D游戏中的任何一个物体都有一个坐标,当此物体运动时,它的坐标发生变化,这指的就是坐标转换;3D游戏中除了场景+物体还需要灯光,没有灯光就没有3D物体的表现,无论是实时3D游戏还是3D影像渲染,加上灯光的3D渲染是最消耗资源的。虽然OpenGL中已有相关技术,但此前从未在民用级硬件中出现。 

在T&L问世之前,位置转换和灯光都需要CPU来计算,CPU速度越快,游戏表现越流畅。使用了T&L功能后,这两种效果的计算用显示卡的GPU来计算,这样就可以把CPU从繁忙的劳动中解脱出来。换句话说,拥有T&L显示卡,使用DirectX 7.0,即使没有高速的CPU,同样能流畅的跑3D游戏。 

DirectX 8.0 
DirectX 8.0的推出引发了一场显卡革命,它首次引入了“像素渲染”概念,同时具备像素渲染引擎(Pixel Shader)与顶点渲染引擎(Vertex Shader),反映在特效上就是动态光影效果。同硬件T&L仅仅实现的固定光影转换相比,VS和PS单元的灵活性更大,它使GPU真正成为了可编程的处理器。这意味着程序员可通过它们实现3D场景构建的难度大大降低。通过VS和PS的渲染,可以很容易的宁造出真实的水面动态波纹光影效果。此时DirectX的权威地位终于建成。 

DirectX 9.0 
2002年底,微软发布DirectX9.0。DirectX 9中PS单元的渲染精度已达到浮点精度,传统的硬件T&L单元也被取消。全新的VertexShader(顶点着色引擎)编程将比以前复杂得多,新的VertexShader标准增加了流程控制,更多的常量,每个程序的着色指令增加到了1024条。 

PS 2.0具备完全可编程的架构,能对纹理效果即时演算、动态纹理贴图,还不占用显存,理论上对材质贴图的分辨率的精度提高无限多;另外PS1.4只能支持28个硬件指令,同时操作6个材质,而PS2.0却可以支持160个硬件指令,同时操作16个材质数量,新的高精度浮点数据规格可以使用多重纹理贴图,可操作的指令数可以任意长,电影级别的显示效果轻而易举的实现。 

VS 2.0通过增加Vertex程序的灵活性,显著的提高了老版本(DirectX8)的VS性能,新的控制指令,可以用通用的程序代替以前专用的单独着色程序,效率提高许多倍;增加循环操作指令,减少工作时间,提高处理效率;扩展着色指令个数,从128个提升到256个。 

增加对浮点数据的处理功能,以前只能对整数进行处理,这样提高渲染精度,使最终处理的色彩格式达到电影级别。突破了以前限制PC图形图象质量在数学上的精度障碍,它的每条渲染流水线都升级为128位浮点颜色,让游戏程序设计师们更容易更轻松的创造出更漂亮的效果,让程序员编程更容易。 

显卡所支持的DirectX版本已成为评价显卡性能的标准,从显卡支持什么版本的DirectX,用户就可以分辨出显卡的性能高低,从而选择出适合于自己的显卡产品。 

ATI AVIVO视频技术的支持 (看下面的:) 
http://article.pchome.net/content-355631.html 

MPEG-2的硬件解码技术的支持 

MPEG-2 
MPEG-2制定于1994年,设计目标是高级工业标准的图象质量以及更高的传输率。MPEG-2所能提供的传输率在3-10Mbits/sec间,其在NTSC制式下的分辨率可达720X486,MPEG-2也可提供并能够提供广播级的视像和CD级的音质。MPEG-2的音频编码可提供左右中及两个环绕声道,以及一个加重低音声道,和多达7个伴音声道(DVD可有8种语言配音的原因)。由于MPEG-2在设计时的巧妙处理,使得大多数MPEG-2解码器也可播放MPEG-1格式的数据,如VCD。 

同时,由于MPEG-2的出色性能表现,已能适用于HDTV,使得原打算为HDTV设计的MPEG-3,还没出世就被抛弃了。(MPEG-3要求传输速率在20Mbits/sev-40Mbits/sec间,但这将使画面有轻度扭曲)。除了做为DVD的指定标准外,MPEG-2还可用于为广播,有线电视网,电缆网络以及卫星直播(DirectBroadcastSatellite)提供广播级的数字视频。 

MPEG-2的另一特点是,其可提供一个较广的范围改变压缩比,以适应不同画面质量,存储容量,以及带宽的要求。 

对于最终用户来说,由于现存电视机分辨率限制,MPEG-2所带来的高清晰度画面质量(如DVD画面)在电视上效果并不明显,到是其音频特性(如加重低音,多伴音声道等)更引人注目。 

MPEG-2的编码图像被分为三类,分别称为I帧,P帧和B帧。 

I帧图像采用帧内编码方式,即只利用了单帧图像内的空间相关性,而没有利用时间相关性。P帧和B帧图像采用帧间编码方式,即同时利用了空间和时间上的相关性。P帧图像只采用前向时间预测,可以提高压缩效率和图像质量。P帧图像中可以包含帧内编码的部分,即P帧中的每一个宏块可以是前向预测,也可以是帧内编码。B帧图像采用双向时间预测,可以大大提高压缩倍数。 

MPEG-2的编码码流分为六个层次。为更好地表示编码数据,MPEG-2用句法规定了一个层次性结构。它分为六层,自上到下分别是:图像序列层、图像组(GOP)、图像、宏块条、宏块、块。 

继续阅读

Posted in DirectX3D | Tagged | Leave a comment

开源3D引擎比较

 

这是从别人那里摘抄而来, 学习之用.

http://www.cnblogs.com/cyberchen-net/archive/2007/03/04/663597.html

 

典型开源3D引擎分类比较

 

常见的3D引擎有:Unreal,Quake,Lithtech,OGRE,Nebula,Irrlicht,Truevision3D…等,其中开源免费的有:orge,irrlicht,fly3d, NeoEngine, revolution3d, Nebula2Genesis3d等。OGRE 在免费、开源的引擎中评价最高,一个原因是作为一个图形渲染引擎,它支持的图形特性最多,所以渲染质量也不错;另一个原因是设计模式的清晰;另外,速度也不错。OGRE 将专注于向一个纯粹的、然而富于协作和扩展性的图形引擎发展,这得益于它的庞大的社群支持,使得很多事情可以通过外挂一些更专业的引擎来实现,物理引擎使用 ODE  Tokamak  NovodeX ,网络引擎使用 openTNL  RakNet  eNet ,声音引擎使用 FMod  OpenAL ,以及界面引擎使用 CEGUI 

继续阅读

Posted in 3D游戏开发(通用) | Tagged | Leave a comment

D3D 文本

d3d中可以在场景中直接渲染文本:

步骤很简单, 如下:

1. 定义ID3DXFont接口

ID3DXFont *m_pFPSFont;

2. 创建实例

    LOGFONTW lf = { 0 };
    lf.lfHeight = 20;
    lf.lfWeight = 12;
    lf.lfWeight = 400;
    lf.lfItalic         = false;  
    lf.lfUnderline      = false;   
    lf.lfStrikeOut      = false;   
    lf.lfCharSet        = DEFAULT_CHARSET;
    lf.lfOutPrecision   = 0;             
    lf.lfClipPrecision  = 0;         
    lf.lfQuality        = 0;          
    lf.lfPitchAndFamily = 0;
    wcscpy( lf.lfFaceName, L”Times New Roman” );
    HRESULT hr = D3DXCreateFontIndirect( m_pD3DDevice, &lf, &m_pFPSFont );

继续阅读

Posted in 学习过程中遇到的一些问题 | Tagged | Leave a comment

问题: D3D 渲染的一点思考

在学习d3d的初期就看到了渲染管线也就是T&L(Transform and Lighting).

 

Local Space ->World Space -> View Space ->Backface Culling -> Lighting -> Clipping -> Projection -> Viewport Space ->Rasterization

 

刚开始, 我认为当所有的物体渲染完了以后,比如画基本图元DrawPrimitive或者渲染mesh, DrawSubset. 完了调用Present. 就执行上述过程.最后就可以在屏幕上看到渲染后的3d图形了.

继续阅读

Posted in 学习过程中遇到的一些问题 | Tagged | Leave a comment

CreateProcess的命令行参数的长度

这里先描述一下遇到的问题:

 

共有2个进程, 进程A, 进程B. A通过CreateProcess来启动进程B, 启动的时候带有参数, 参数是一长串字符串, 里面就是用逗号隔开的一些IP地址.

 

起初一直都没有事, 一直到1年多以后, 当这个IP地址的数量是17, 在增加一个到18, 那么这个程序立即就出问题, 这里的这个程序指的是A. 弹出windows错误框, 是说程序在某处发生异常.

继续阅读

Posted in Windows | Tagged | Leave a comment

installshiled12 添加和删除发布版本

一般创建installshield的工程的时候就会要求输入版本的名称, 这样我们就有了一个版本.

 

但是往往我们创建一个工程以后还想往一面添加其他的版本, 如我现在做的这个工程就有4个语言版本, 这样我创建这个工程的时候就会指定一种版本, 但是其他的3种都是通过添加完成的. 那么怎么添加呢? 其实很简单:

继续阅读

Posted in Installshield | Tagged | Leave a comment

D3D 材质和灯光

我们在生活中看到的光有环境光, 漫反射光以及璄面反射光还有物体本身发射的光. 因此我们在定义材质时就要描述对这些光反应.

看看材质结构体的定义:

 

typedef struct _D3DMATERIAL9 {
    D3DCOLORVALUE   Diffuse;        /* Diffuse color RGBA */
    D3DCOLORVALUE   Ambient;        /* Ambient color RGB */
    D3DCOLORVALUE   Specular;       /* Specular ‘shininess’ */
    D3DCOLORVALUE   Emissive;       /* Emissive color RGB */
    float           Power;          /* Sharpness if specular highlight */
} D3DMATERIAL9;

继续阅读

Posted in DirectX3D | Tagged | Leave a comment

d3d全屏模式

d3d全屏模式

通常我们创建的d3d程序时都是非全屏模式, 但是游戏大部分是全屏模式, 怎么创建这两种模式呢?

创建的时候有2点不同: 创建窗口, 创建设备.

1. 创建普通模式:

a. 创建窗口:

    m_hMainWin = CreateWindowW( m_szWinClsName, m_szWinTitle, WS_OVERLAPPEDWINDOW
,

继续阅读

Posted in DirectX3D | Tagged | Leave a comment