[Zz] DX depth buffer】的更多相关文章

声明:本文完全翻译自DX SDK Documentation depth buffer,通常被称为z-buffer或者w-buffer,是设备的一个属性,用来存储深度信息,被D3D使用.当D3D渲染一个场景到target surface的时候,它会使用depth-buffer surface上的数据,来决定被rasterized三角面片的pixel间的遮挡关系. 当depth buffer被开启,rendering surface上的每一个点都会被检测.depth buffer上的值可以是点的z…
在使用D3D开发游戏的过程中,很多情况下都会用到depth buffer来完成特定的效果,比如DOF,Shadows,SSAO等等.在这些情况下我们就可能需要预览depth buffer来确定它是正确的,以免导致后续运算渲染出错.此时有一个问题就出现了,因为原始的depth buffer中保存的depth不是线性的.我们知道,世界坐标系下的顶点在经过视图变换后会被转换到视图空间,此时摄像机在原点,并且我们为摄像机定义了一个近平面和一个远平面: 在经过视图变换后,接着执行的就是投影变换,D3D的透…
观察透视投影矩阵: 对于x和y,矩阵变换只是一个缩放系数,那么逆变换就是缩放系数的倒数,所以 设Xndc Yndc为NDC空间中的XY坐标,Xview Yview Zview为view space中的坐标,则 所以 所以已知XY的NDC坐标和view space z,就能求出view space position,写成代码就是: float M = tan(fov*0.5f)*aspect; float N = tan(fov*0.5f); float3 GetViewSpacePos(floa…
这篇文章主要是参考MJP的“Attack of The Depth Buffer”,测试不同格式下depth buffer的精度. 测试的depth buffer包含两类: 一是非线性的depth buffer,存储着perspective z(也就是最常用的,透视投影后归一化的z/w的buffer),二是线性的depth buffer,存储着view space z(这里的线性指的是在view space 中是否线性).测试的格式包括16位浮点数,32位浮点数,16位定点数,还有最常用的24位…
当 Cesium 单个模型过长时,会遇到某些视角模型显示不完整的问题,如下图所示: 经过在官方论坛上询问,该问题由 viewer.scene.logarithmicDepthBuffer 开启造成,关闭即可修复,代码如下: viewer.scene.logarithmicDepthBuffer = false; 修复后的模型如图所示: Logarithmic Depth Buffer 相关说明可参见 Hybrid Multi-Frustum Logarithmic Depth Buffer…
Up until now there is only one type of output buffer you've made use of, the color buffer. This chapter will discuss two additional types, the depth buffer and the stencil buffer. For each of these a problem will be presented and subsequently solved…
深度缓冲是可选的,比如渲染一个3D的立方体的时候,就需要用到深度缓冲.Swapchain就算有多个images,此时深度缓冲区也只需要一个.vkCreateSwapchainKHR 会创建所有需要的images, 深度缓冲的image需要你手动创建和分配内存,流程如下: Create the depth buffer image object Allocate the depth buffer device memory Bind the memory to the image object C…
在D3D11中,有depth/stencil buffer,它们和framebuffer相对应,如下图所示,framebuffer中一个像素,有相对应的depth buffer和stencil buffer值: D3D11中,depth buffer和stencil buffer一起定义,比如DXGI_FORMAT_D24_UNORM_S8_UINT,是指用一个无符号24位的值做为像素的深度缓冲值,并把它映射到[0,1],用一个8位的值表示像素stencil值,并把它映射到[0,255].注意:…
我们现在需要创建深度/模板缓冲区. 如§4.1.5所述,深度缓冲区只是一个2D纹理,用于存储最近的可见对象的深度信息(如果使用模板(stencil),则也会存储模板信息). 纹理是一种GPU资源,因此我们通过填写描述纹理资源的D3D12_RESOURCE_DESC结构,然后调用ID3D12Device :: CreateCommittedResource方法来创建一个. D3D12_RESOURCE_DESC结构定义如下: typedef struct D3D12_RESOURCE_DESC {…
原文:Directx11教程(48) depth/stencil buffer的作用      在D3D11中,有depth/stencil buffer,它们和framebuffer相对应,如下图所示,framebuffer中一个像素,有相对应的depth buffer和stencil buffer值:         D3D11中,depth buffer和stencil buffer一起定义,比如DXGI_FORMAT_D24_UNORM_S8_UINT,是指用一个无符号24位的值做为像素…
使用Depth Textures: 可以将depth信息渲染到一张texture,有些效果的制作会需要scene depth信息,此时depth texture就可以派上用场了. Depth Texture在不同平台上有不同的实现,并且原生的支持也不一样. UnityCG.cginc里面定义了一些使用depth texture的帮助宏定义: UNITY_TRANSFER_DEPTH(o) 计算eye space的深度值,并写入变量o(float2).当需要渲染到一张深度贴图时,在vertex s…
Deferred lighting separate lighting rendering and make lighting a completely image-space technique. This is very different the forward rendering. At first as the limitation of the hardware, we could make per-object lit by max number of 8 lights at on…
http://www.behardware.com/art/lire/845/ --> Understanding 3D rendering step by step with 3DMark11 - BeHardware>> Graphics cards Written by Damien Triolet Published on November 28, 2011 URL: http://www.behardware.com/art/lire/845/ Page 1 Introduct…
http://www.cppblog.com/lovedday/archive/2008/03/25/45334.html http://www.cppblog.com/lovedday/ D3D中的模板缓存(3) 8.3实例程序:平面阴影 在场景中被灯光照射的地方会产生阴影,这将使场景变的更真实.在这一部分我们将演示怎样实现平面阴影,即在平面上的阴影(如图8.5). 使用这种阴影只是一种权宜之计,虽然它增强了场景的真实效果,但是这并不是现实中的阴影. 为了实现平面阴影,我们首先必须找到物体投射…
https://developer.nvidia.com/content/interactive-order-independent-transparency Correctly rendering non-refractive transparent surfaces with core OpenGL functionality [9] has the vexing requirements of depth-sorted traversal and nonintersecting polyg…
一.预备知识 1.表面 表面就是Direct3D用于储存2D图像数据的一个像素矩阵.width和height以像素为单位,pitch以字节单位,用接口IDirect3DSurface来描述表面 LockRect:该方法用于获取指向表面存储区的指针,通过通过指针运算,可对每个像素进行读写操作: UnlockRect:配对使用,调用lock必须unlock,解除对表面存储区的锁定: GetDesc: 获取表面的描述信息,通过填充D3DSURFACE_DESC; //Assume _surface i…
操作系统:Windows8.1 显卡:Nivida GTX965M 开发工具:Visual Studio 2017 Introduction 到目前为止,我们所使用的几何图形为3D,但仍然完全扁平的.在本章节中我们添加Z坐标到3D模型数据中.我们将使用这个第三个坐标在当前平面上放置一个正方形,以查看几何图形没有进行深度排序造成的问题. 3D geometry 修改 Vertex 结构体使用3D vector作为位置,并且更新对应VkVertexInputAttributeDescription的…
用途1: 半透明材质中实现遮挡Mesh自己其他部分的效果. 不遮挡效果如下: 遮挡后效果如下: 实现方法: 深度信息是越远值越大,使用两个Mesh,一个正常渲染,另一个渲染到custom depth buffer 即勾选Render Custom Depth Buffer,注意这个用来渲染到custom depth buffer的mesh不能使用Translucent的材质,因为透明物体不会写入深度缓冲.当custom depth buffer跟每个像素对应的深度信息比较时,pixeldepth…
问题汇总 1.Light support for Editor编辑器加入了灯光工具, 可以添加和修改灯光. 问题1. light object的用户互交.point light可以把对应的volume (wireframe sphere/cone)画出来用于用户选中, 但是光源太多的时候, 球就有点凌乱了. 所以使用了HUD, 只要选中HUD就会选中灯光, 只有灯光被选中的时候才显示volume. 另外, 编辑器里面的很多"不可见"的逻辑对象都有这种需求, 虽然现在还没有. 另外, 可…
片段操作图 这篇文章将介绍从写入帧缓冲和读取帧缓冲的方式. Buffers(缓冲) OpenGL ES支持三种缓冲: OpenGL ES •• Color buffer颜色缓冲 •• Depth buffer深度缓冲 •• Stencil buffer模板缓冲 创建缓冲区 OpenGL ES 是一个交互式的渲染系统,假设每帧的开始,你希望初始化所有缓冲区中数据的默认值.调用glClear 函数来清除缓冲区内容,参数mask 指定清除的缓冲区. 你可能不要求清除每一个缓冲区,不在同时清除它们.但如…
写在前面 上一节我们使用AssImp载入了3d模型,效果已经令人激动了.可是绘制效率和场景真实感还存在不足,接下来我们还是要保持耐心,继续学习一些高级主题,等学完后面的高级主题,我们再次来改进我们载入模型的过程. 本节将会学习深度測试.文中演示样例程序源码均能够在我的github下载. 本节内容整理自 1.www.learnopengl.com Depth testing 2.depth buffer faq 3.Z buffer 和 W buffer 簡介 通过本节能够了解到 为什么须要深度缓…
http://www.cnblogs.com/salam/p/4957250.html 片段操作图 这篇文章将介绍从写入帧缓冲和读取帧缓冲的方式. Buffers(缓冲) OpenGL ES支持三种缓冲: OpenGL ES •• Color buffer颜色缓冲 •• Depth buffer深度缓冲 •• Stencil buffer模板缓冲 创建缓冲区 OpenGL ES 是一个交互式的渲染系统,假设每帧的开始,你希望初始化所有缓冲区中数据的默认值.调用glClear 函数来清除缓冲区内容…
http://blog.csdn.net/xiajun07061225/article/details/7283929/ OpenGL Frame BufferObject(FBO) Overview: 在OpenGL渲染管线中,几何数据和纹理经过多次转化和多次测试,最后以二维像素的形式显示在屏幕上.OpenGL管线的最终渲染目的地被称作帧缓存 (framebuffer).帧缓冲是一些二维数组和OpenG所使用的存储区的集合:颜色缓存.深度缓存.模板缓存和累计缓存.一般情况下,帧缓存完全 由wi…
本节我们将尝试利用三角形制作一个“走马灯”效果. 一个三角形如图示方式,从左向右依次移动. 先看一下代码: MyGlWindow.cpp #include <gl\glew.h> #include "MyGlWindow.h" #include <iostream> #include <fstream> float triangleWidth = 0.1f; ; ; ; void MyGlWindow::sendDataToOpenGL() { //…
1.区域视频增强 FFmpeg滤镜功能十分强大,用滤镜可以实现视频的区域增强功能. 用eq滤镜就可以实现亮度.对比度.饱和度等的常用视频增强功能. 推荐两篇写得不错的博文: (1)ffmpeg综合应用示例(二)——为直播流添加特效 - 张晖的专栏 - 博客频道 - CSDN.NET: (2)ffmpeg 滤镜及其效果 - 党玉涛 - 博客频道 - CSDN.NET 第(1)篇博客对于如何用代码来写滤镜讲得比较清楚,第(2)篇则列出了许多滤镜写法的例子. 参考第(1)篇博客,滤镜的代码如下: 设置…
因为某些原因,不想用过于臃肿的VS了,转而使用常用的jetbrains的CLion,Clion沿袭了jetbrans的优良传统,基本代码提示功能还是比较好的,不过就是对于windows不熟悉cmake(像我这样)的朋友可能不是太友好,经过了2个小时的查资料,终于正常运行了一个简单示例. 下面谈谈如何在Windows下配置这个开发环境. 起始,我是参考了我的前一篇OpenGL+VS开发环境的搭建,实际上除了freeglut重新下载的是MinGW版本之外,其他的文件并无区别,当然为了方便引用,我把所…
转自:http://www.cnblogs.com/graphics/archive/2009/11/25/1583682.html DirectX 总结 DDS DirectXDraw Surface file format, .dds.这是微软从DirectX7开始引进的一种文件格式,它用来存储压缩的或未压缩的纹理,该格式支持mimaps cube maps和volume maps, D3DX和许多其他的DX工具都支持这种格式,比如DirectX Texture Editor(dxtex.e…
通过上篇文章,我们了解了在视频图像从kinect开发包传输到应用程序之前的一系列初始化工作,那么这篇文章主要来叙述,如何将一帧图像数据获取到,并显示出来的. 更新窗口是在Run函数消息处理中,当KinectSDK触发了m_hNextDepthFrameEvent之后,上层收到这个Event就调用Update函数去更新窗口了.关键代码如下图,Run函数的全部代码也可以从上一篇博文中找到: Update函数: void CDepthBasics::Update() { if (NULL == m_p…
三维图形的这是opengl的强项,大型3D游戏都会把它作为首选.图像处理,是opencv的锁定的目标,大多都是C的api,也有少部分是C++的,工业图像表现,图像识别,都会考虑opencv的.webgl,这是3维向web延伸的方案,它可以直接调用支持opengl的接口,硬件加速或者软件模拟,很强大,结和html5....blender,可以完成三维模型制作,3D动画制作了. http://www.2cto.com/kf/201305/210028.html PC 游戏还是 DirectX 开发?…
引自:http://blog.csdn.net/itcastcpp/article/details/20282667 Depth在kinect中经常被翻译为深度图,指的是图像到摄像头的距离,这些距离数据能让机器知道物理距离有多远.kinect通过两个红外摄像头来实现这个功能的.在这个例子里,就实现了深度图的提取和现实功能. 下面我们来研究下这个例子的代码,让我们对kinect for windows的开发包有个粗浅的认识. 代码结构:…