DirectX9 SDK Samples(16) ShadowMap Sample(1)

DirectX11-Sample-Tutorial01-初始化窗口-利用d3d清除窗口背景颜色 1)按照这里的方法配置好DirectX11 2)流程简介 >首先,要初始化窗口,用于显示图形图像。 >其次,创建图形模型(InitModel),如一个三角片,由三个顶点组成,每个顶点有对应的颜色或纹理;然后,创建着色器(InitShader),包括顶点着色器和像素着色器,用于将模型与GPU关联,将模型放入渲染管道线中处理。 >然后,利用Windows的消息循环机制,不断接收 阅读详情

阴影映射,这是常用的技术了,具体技术解释就不说了,SDK中也有,还是阅读代码吧。

1OnResetDevice

    // Create the shadow map texture
    V_RETURN( pd3dDevice->CreateTexture( ShadowMap_SIZE, ShadowMap_SIZE,
                                         1, D3DUSAGE_RENDERTARGET,
                                         D3DFMT_R32F,
                                         D3DPOOL_DEFAULT,
                                         &g_pShadowMap,
                                         NULL ) );
创建阴影纹理。注意D3DUSAGE是RENDERTARGET,格式只有一个通道,因为只需要深度值。

    // Create the depth-stencil buffer to be used with the shadow map
    // We do this to ensure that the depth-stencil buffer is large
    // enough and has correct multisample type/quality when rendering
    // the shadow map.  The default depth-stencil buffer created during
    // device creation will not be large enough if the user resizes the
    // window to a very small size.  Furthermore, if the device is created
    // with multisampling, the default depth-stencil buffer will not
    // work with the shadow map texture because texture render targets
    // do not support multisample.
    DXUTDeviceSettings d3dSettings = DXUTGetDeviceSettings();
    V_RETURN( pd3dDevice->CreateDepthStencilSurface( ShadowMap_SIZE,
                                                     ShadowMap_SIZE,
                                                     d3dSettings.d3d9.pp.AutoDepthStencilFormat,
                                                     D3DMULTISAMPLE_NONE,
                                                     0,
                                                     TRUE,
                                                     &g_pDSShadow,
                                                     NULL ) );
这里还用到了模版来进行深度测试,使用原因见注释。
    // Initialize the shadow projection matrix
    D3DXMatrixPerspectiveFovLH( &g_mShadowProj, g_fLightFov, 1, 0.01f, 100.0f );
创建阴影图的透视矩阵。


2OnFrameRender

    //
    // Render the shadow map
    //
    LPDIRECT3DSURFACE9 pOldRT = NULL;
    V( pd3dDevice->GetRenderTarget( 0, &pOldRT ) );
    LPDIRECT3DSURFACE9 pShadowSurf;
    if( SUCCEEDED( g_pShadowMap->GetSurfaceLevel( 0, &pShadowSurf ) ) )
    {
        pd3dDevice->SetRenderTarget( 0, pShadowSurf );
        SAFE_RELEASE( pShadowSurf );
    }
    LPDIRECT3DSURFACE9 pOldDS = NULL;
    if( SUCCEEDED( pd3dDevice->GetDepthStencilSurface( &pOldDS ) ) )
        pd3dDevice->SetDepthStencilSurface( g_pDSShadow );

    {
        CDXUTPerfEventGenerator g( DXUT_PERFEVENTCOLOR, L"Shadow Map" );
        RenderScene( pd3dDevice, true, fElapsedTime, &mLightView, &g_mShadowProj );
    }

    if( pOldDS )
    {
        pd3dDevice->SetDepthStencilSurface( pOldDS );
        pOldDS->Release();
    }
    pd3dDevice->SetRenderTarget( 0, pOldRT );
    SAFE_RELEASE( pOldRT );
这一段代码涉及到RenderTarget和DepthStencil的改变。改变RT和DS后,调用RenderScene渲染ShadowMap。
    //
    // Now that we have the shadow map, render the scene.
    //
    const D3DXMATRIX* pmView = g_bCameraPerspective ? g_VCamera.GetViewMatrix() :
        &mLightView;

    // Initialize required parameter
    V( g_pEffect->SetTexture( "g_txShadow", g_pShadowMap ) );
    // Compute the matrix to transform from view space to
    // light projection space.  This consists of
    // the inverse of view matrix * view matrix of light * light projection matrix
    D3DXMATRIXA16 mViewToLightProj;
    mViewToLightProj = *pmView;
    D3DXMatrixInverse( &mViewToLightProj, NULL, &mViewToLightProj );
    D3DXMatrixMultiply( &mViewToLightProj, &mViewToLightProj, &mLightView );
    D3DXMatrixMultiply( &mViewToLightProj, &mViewToLightProj, &g_mShadowProj );
    V( g_pEffect->SetMatrix( "g_mViewToLightProj", &mViewToLightProj ) );
    CDXUTPerfEventGenerator g( DXUT_PERFEVENTCOLOR, L"Scene" );
    RenderScene( pd3dDevice, false, fElapsedTime, pmView, g_VCamera.GetProjMatrix() );

上一段代码渲染好了阴影图,那么这一段代码就是利用阴影图渲染场景。

3RenderScene

    if( bRenderShadow )
        V( g_pEffect->SetTechnique( "RenderShadow" ) );

    // Begin the scene
    if( SUCCEEDED( pd3dDevice->BeginScene() ) )
    {
        if( !bRenderShadow )
            V( g_pEffect->SetTechnique( "RenderScene" ) );
注意,这里的代码写得有点不清楚,对比两个if语句,我们可以得知,要不渲染阴影,要不渲染场景。

下面还有渲染灯光的,就省略了。下一节分析着色器。




DirectX9 SDK 下载、安装、VC++开发环境配置、跑通第一个例子 一 可在 http://download.microsoft.com/download/F/1/7/F178BCE4-FA19-428F-BB60-F3DEE1130BFA/DXSDK_Feb10.exe 下载   也可在我的网盘下载: http://pan.baidu.com/s/1pJmMLHh   双击DXSDK_Feb10.exe进行安装,   协议, 阅读详情

相关推荐

DirectX9阴影映射实例

阴影映射,DirectX,Shadow,书本源码,很不错,VS下调试通过!

DirectX SDK 中Samples遇到的问题

在安装Direct SDK选择安装路径时,如果选择默认路径,那么,打开例程可以直接运行。如果选择其他路径,就需要在工程属性中设置包含目录Include和库目录Lib/x86(x64)如果提示无法解析的外部符号,解决方法:https://blog.youkuaiyun.com/just0kk/article/details/51583218...

wanglantian1的博客 450

D3D9SDK开发引用库

该压缩包内只含有从完整SDK中分离出来的Developer Runtime文件和Include头文件和Lib链接库,而不需要下载完整的SDK安装包

DirectX SDK下载安装及开发环境设置

DirectX(Direct eXtension,简称DX)是由微软公司创建的多媒体编程接口,是一种应用程序接口(API)。DirectX可以让以windows为平台的游戏或多媒体程序获得更高的执行效率,加强3D图形和声音效果,并提供设计人员一个共同的硬件驱动标准,让游戏开发者不必为每一品牌的硬件来写不同的驱动程序,也降低用户安装及设置硬件的复杂度。——

hangl_ciom的博客 1万+

D3D9 SDK 易语言

易语言的D3D9 SDK DLL支持库易语言的D3D9 SDK DLL支持库

立创开源TinyAWG:基于ZYNQ7010的35MHz带宽200MSa/s任意波形发生器设计与实现

本文详细解析了立创开源TinyAWG的设计与实现,这是一款基于ZYNQ7010芯片的低成本高性能任意波形发生器。项目实现了35MHz带宽和200MSa/s采样率,核心采用ARM+FPGA协同架构,FPGA负责高速DDS信号生成,ARM运行Linux并搭载LVGL图形界面。文章涵盖了硬件选型、电路设计、软件逻辑及性能测试,为复刻和学习ZYNQ系统设计、高速DAC应用提供了完整参考。

weixin_42576467的博客 433

Directx 9中shadowmap 的解析

1.  ShadowMap原理:    首先准备一张纹理贴图,和一个深度模版。 准备深度模版的作用是为了进行深度测试,使得纹理贴图只用记录每个像素深度最小的值。 1:.将世界坐标系下的顶点转换到光源视点下,再投影,最后渲染一遍场景,得到一张带深度缓冲区的纹理贴图(以纹理贴图为渲染目标),但是纹理贴图中的记录的不是颜色值,而是深度值,由于使用了深度测试模版所以该贴图里得到的深度值是每个

Neversaydie_D的专栏 1365

ansys命令流力磁耦合仿真

文章目录前言一、力磁耦合仿真流程二、静力学仿真三、力磁耦合模型构建四、静磁学仿真总结 前言 一、力磁耦合仿真流程 力磁耦合有限元仿真流程中,首先进行静力学仿真,经过前处理模块、分析计算模块和后处理模块提取三维模型单元应力,然后根据力磁耦合方程中,通过matlab将单元应力导入到磁导率与应力的关系式中,得到单元的相对磁导率。最后采用载荷传递耦合方式,进行静磁学模拟仿真,分析计算得到该载荷下试件的磁场分布。,如下图所示为力磁耦合仿真流程图: 二、静力学仿真 下图为中心预制条形缺陷的Q235钢板试..

wsfwsf128的博客 2661

第二章 DirectX 基础(上)

首先,我们需要下载DirectX的SDK包,并安装到本地电脑上。 Download DirectX SDK from Official Microsoft Download Center 从Windows 8操作系统开始,DirectX SDK已经集成到Windows SDK了,不需要单独安装!安装Visual Studio的时候勾上Windows SDK即可!也就是说我们刚刚下载的只适用于Windows XP, Windows 7系统。这个DXSDK_Jun10已经包含了9,10,11三个版.

konkon2012的博客 2542

从个体到群体:Cartool实战静息态EEG微状态聚类全解析

本文详细解析了使用Cartool软件进行静息态EEG微状态聚类的完整实战流程。从个体水平聚类到群体模板提取,再到指标量化,文章深入探讨了k-means算法的应用、GFP峰值数据的使用技巧以及关键参数设置,为脑电信号处理研究者提供了从数据准备到结果解读的全方位指南。

weixin_29062671的博客 290

Mac上快速部署DeepSeek模型:Ollama终端操作全指南

本文详细介绍了在Mac上使用Ollama终端快速部署DeepSeek模型的完整指南。从硬件要求、Ollama安装、模型下载运行,到高级配置、可视化界面及常见问题解决,提供了全流程操作步骤与优化技巧,帮助开发者高效搭建本地AI助手,实现稳定、私密的离线使用体验。

weixin_29251567的博客 550

DirectX9 SDK Samples(16) ShadowMap Sample(2)

这一节阅读FX文件。阅读顺序基本和程序执行情况一致。 首先执行的是渲染阴影图。 //----------------------------------------------------------------------------- // Technique: RenderShadow // Desc: Renders the shadow map //-----------------

819

CST Studio Suite安装详细教程(附安装包)CST Studio Suite 2024超详细安装教程

CST Studio Suite 2024安装指南摘要:本文详细介绍了CST Studio Suite 2024电磁仿真软件的下载与安装流程,包含23个图文步骤说明,从解压安装包到配置许可证服务器。重点提示了以管理员身份运行、自定义安装路径等关键步骤,并提供了常见问题解决方案和入门技巧。该软件适用于天线设计、PCB分析等高频电磁场仿真,安装后需通过localhost:27000连接许可证服务器完成激活。

pythonqiang9的博客 1万+

DirectX11学习笔记九 平面阴影 简易代码框架

本来说这节打算自己搞一个D3D框架的,但是跟了外网的教程走了半个月后发现Chili的框架对于我这种初学者而言太过于事无巨细,如果只想学习d3d api以及用其要达到什么效果的话,有些“重量级”,所以我打算两手抓了,相比沉浸在c++新特性和指针、泛型里,我相信龙书的教程更有指向性。拿龙书与Chili的教程相互比较学习,还是不错的,有了Chili的基础,再看龙书的代码感觉就快多了。 ...

MaxLykoS的博客 485

告别版本冲突!在Ubuntu 20.04上优雅实现ROS Noetic与ROS2 Foxy双环境切换

本文详细介绍了在Ubuntu 20.04系统上实现ROS Noetic(ROS1)与ROS2 Foxy双环境共存与切换的完整方案。通过智能脚本设计和工作空间隔离,解决了版本冲突问题,帮助开发者高效管理不同ROS版本项目。特别适合需要同时开发ROS1和ROS2应用的机器人开发者。

weixin_28452161的博客 407

图像处理入门007:图像处理中的数学基础:线性代数与卷积

一种:把 OpenCV 当黑盒,调用,效果不对就乱调参数;另一种:理解每个像素是怎么被周围邻域"加权平均"的,理解核翻转、边界填充、stride 的含义。前者能干活,后者能解难题。一旦遇到自定义核(比如 ISP 上的锐化)、深度学习反向传播、医学图像重建,你就必须把卷积、相关、矩阵乘法这些基本功捡回来。线性代数三件套:向量点积、矩阵乘法、线性变换;2D 卷积的数学定义:核翻转、滑动窗口、边界填充。并手写一个,验证它与和的结果完全一致(误差 < 1e-9)。f∗gn∑m−∞∞f。

专注:太空算力、AI infra、异构调度、大模型成本工程 385

C++directx基本模板完整代码

C++directx基本模板完整代码

Solitairs的博客 825

【ARMv8 异常模型入门及渐进7 - GIC及安全中断介绍】

GIC-v3中,引入了支持2种安全状态(secure state),也就是对于中断,根据secure状态,分为安全中断和非安全中断。当然也可以只支持一种安全状态。这里的2种安全状态和1种安全状态,主要是影响中断分组,所使用IRQ和FIQ管脚的映射,以及gic中的寄存器访问。

CodingCos的博客 2116

DirectX 9.0 C++ 教程 开发环境设定

1.开发工具 我一般使用Visual C++ 6.0来编译和调试DirectX,比较轻量级。 也可以用VS2005 或 VS2010。推荐使用Visual C++ 6.0时安装Visual Assist X。这样Visual C++ 6.0下代码提示会好些。 2.安装 DirectX 9.0 玩游戏的话是安装个DirectX 9.0 软件。这里我们开发要安装DirectX 9.0 SDK。下

易水寒 1万+

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

D3D9 SDK文档笔记3---一切从头开始(2)

    先给一个粗粗的流程,让初学者解开萦绕在心底的谜团。    基本上每一本图形的书,在讲述3D的渲染流程时,无不从顶点及其变换等讲起,直到输出屏幕像素。大家看得多了可能也腻了。这里,不妨换一个角度从最后显示在屏幕上的像素讲起。既然要讲屏幕像素,就跑不掉先要唠叨下屏幕坐标系了,我们从小屁孩开始学起的坐标系,其实说白了就是一个参照系统,有了这个参照系,我们就可以将物体的相对位置搞得很清楚了

okdou的专栏 1065

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

ShadowMap DX9

ShadowMap基本的思想很简单,首先从聚光灯角度对场景建立并保存场景深度。然后在正常渲染场景中,比较每个渲染点到灯的距离值(或者说到灯的深度值)是否比对应的已经建立在场景深度中的值要大,也就是说要远,如果远证明从当前视点观察的此点在灯角度中看不见,所以该渲染点处于阴影中,否则,不然。   首先分析一下ShadowMap的优劣: 优点: ShadowMap只适合较近距离的阴影投射,由于3

xujiezhige的专栏 1618

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

一个DirectX的Sample引发的学习(1)

  这个例子描述了怎么使用D3DX的SHPRTSimulation,一个per vertex precomputed radiance transfer (PRT)的simulator。使用了low-order spherical harmonics (SH)并把结果记录到文件中。然后描述了怎么使用 clustered principal component analysis (CPCA)

NetGhost的专栏 2446

性能优化:(From D3D9 SDK)

性能优化:(From D3D9 SDK) 常规技巧1 只在必须的时候Clear。   IDirect3DDevice9::Clear函数通常需要花费较多的时间,因此要尽量少调用,而且只清空的确需要清空的缓存。2 尽量减少状态切换。并且将需要进行的状态切换组合在一起设置。   状态包括RenderState,SamplerState,TextureStageState等3 纹理尺寸尽可能小4 从

cglover的专栏 1459

DirectX9 SDK Samples(17) StateManager Sample

在渲染不同的材质中,我们往往需要设置不同的状态。其中一种办法是在每一个FX文件中最后添加一个PASS,把状态设置回原来的默认值。另一个方法就是本次例子所用到的,使用ID3DXEffectStateManager。 OnRenderState内调用SortRenderables对可渲染对象进行排序。 void SortRenderables() { if( g_bSortOrderD

894

DirectX Sample-Blobs实现原理

DirectX Sample-Blobs实现详解

buck84的专栏 1400
上一篇: DirectX9 SDK Samples(15) OptimizedMesh Sample
下一篇: DirectX9 SDK Samples(16) ShadowMap Sample(2)
HowdChow
博客等级 码龄15年 10粉丝 10原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值