深度缓存
1. opengl中glreadpixels读取深度缓存的值为啥都是零呀谢谢
WebGL1.0的文档中对于readPixels方法有明确的说明:The data returned from readPixels must be up-to-date as of the most recently sent drawing command.
也就是说该方法必须在渲染完一帧的页面之后立即调用才有效果,否则取不到值,比如这样调用:
gl.viewport(0,0,World.canvas.width,World.canvas.height);
gl.clear(gl.COLOR_BUFFER_BIT|gl.DEPTH_BUFFER_BIT);
scene.draw(camera);
var a = new Uint8Array(4);
gl.readPixels(0,0,1,1,gl.RGBA,gl.UNSIGNED_BYTE,a);
console.log(a);
此处一帧的绘制(scene.draw(camera))完全完成之后再读取就可以获取准确值了,你自己可以试一下。
2. 深度缓存算法的算法描述
该算法需要两个缓存器,一个是用来存放颜色的颜色缓存器,另一个是用来存放深度的深度缓存器。利用深度缓存器,可以进行可见性的判断,消除隐藏对象。其具体做法是:
首先对深度缓存器和颜色缓存器进行初始化,把深度缓存器中所有单元置成一个最大可能的深度值,把颜色缓存器中各单元置成背景颜色。然后将场景中的物体不分次序地投影到象平面上去。对于每个投影点(象素),把投影物体在该点处的深度与深度缓存器中相应位置上的深度值进行比较,如果前者小于后者,那么就把当前被投影物体的颜色写到颜色缓存器中去,同时用当前投影物体的深度去更新深度缓存器中相应象素的深度,否则不做任何操作。
3. 深度缓存算法的介绍
深度缓存算法(depth—buffer method)是一种常用的判定对象表面可见性的物空间算法,它在投影面上的每一像素位置比较场景中所有面的深度。由于通常沿着观察系统的z轴来计算各对象距观察平面的深度,该算法也称为z缓存(z-buffer)算法。
4. 深度缓存算法包括哪些步骤
深度缓存(Z-buffer)算法是一种典型的、简单的图象空间面消隐算法。该算法需要一个深度缓存数组 ZB,此外还 需要一个颜色属性数组 CB ,它们的大小与屏幕上像素点的个数相同。 Z-buffer 算法的步骤如下:
(1)初始化 ZB 和 CB,使得 ZB(i,j)=Zmax,CB(i,j)=背景色,i=1,…, m; j=1,…,n。
(2)对多边形 P,计算它在点(i,j)处的深度值 zi,j。
(3)若 zi,j< ZB(i,j),则 ZB(i,j)=zi,j,CB(i,j)=多边形 P 的颜色。
(4)对每个多边形重复(2) 、 (3)两步,最终在 CB 中存放的就是消隐后的图形。 这个算法的关键在第(2)步,要尽快判断出哪些点落在一个多边形内,并尽快求出一个点的深度值。这里需要应用 多边形点与点之间的相关性,包括水平相关性和垂直相关性。
5. openGL里面那个深度缓存是什么东西啊.. 还有那个深度测试又是什么呢
深度缓存中存储着每个象素点(绘制在屏幕上的)的深度值! 深度测试决定了是否绘制较远的象素点(或较近的象素点),通常选用较近的, 而较远优先能实现透视的效果! 补充: 如同在真实的世界中,我们只能看见距离自己较近的东西,而较远的东西会被较近的东西掩盖,使我们无法看见! 追问: 如果我不启用深度测试 被覆盖的东西能被显示出来么~?~? 回答: 不能,因为OpenGl本身为你开启了较近优先的深度检测,除非你自己开启较远优先的深度检测,
6. directx深度缓存计算过程中深度值保存么
只记录最接近,就是最小的一个值。如果新像素比他大,那么忽略,如果比他小,那么渲染到屏幕,并且更新深度缓存为自己的值(最小值)
7. 请问Direct3D中模板缓存 和深度缓存的检测顺序
深度缓存先检测。
8. 下面关于深度缓存消隐算法的论断哪一条不正确
算法(Algorithm)是指完成一个任务所需要的具体步骤和方法。也就是说给定初始状态或输入数据,能够得出所要求或期望的终止状态或输出数据。
算法常常含有重复的步骤和一些比较或逻辑判断。不同的算法可能用不同的时间、空间或效率来完成同样的任务。一个算法的优劣可以用空间复杂度与时间复杂度来衡量。
凭我的直觉,选c好啦!