从一个角度看,我的灌木看起来像这样:

另一方面,它们看起来像这样:

我的理论是,当从第一个角度观察灌木时,灌木后面的所有块都已经被抽出,所以当它来绘制灌木时,它只是将它们拉到上面.
然而,从另一个角度来看,它基本上是先尝试绘制灌木,然后当它在灌木丛后面绘制块时,它会检查深度缓冲区并看到已经阻挡了块的视图,所以它没有渲染它,导致海军蓝色方块(我的颜色清晰).
我真的不知道如何解决这个问题.禁用深度测试会导致各种其他错误.有没有办法将顶点或多边形标记为具有透明度,以便它知道它仍然需要渲染后面的内容?
发现了这个.这是唯一的解决方案吗?要分离我的透明和不透明块,然后在CPU上手动对它们进行几乎每一帧的排序,因为玩家可以四处移动?必须有一种方法将其委托给GPU ......
我希望能够将Perl限制File::Find到目录深度(在指定搜索下面)到指定目录以及它下面的1和2子目录.
我希望能够同时枚举文件,如果可能的话.
它必须与绝对路径一起工作.
我目前正在构建一个as3等距游戏,但我在深度排序方面遇到了很多问题.我搜索了一个解决方案,但没有找到任何符合我的问题(矩形对象).
这是我的游戏截图:

如您所见,深度排序在1x1 tile对象之间运行良好.我只是使用他们的x和y坐标(相对于等轴测图)来对它们进行排序.
当我有更大的对象时,问题就出现了,例如2x2或1x4或4x1.
知道如何处理深度排序呢?
我正在尝试学习OpenCV,我想应用这个简单的公式:

这是一个每像素操作,并将像素从r转换为s.
这是我的代码:
int main(int /*argc*/, char** /*argv*/) {
Mat _img = imread("lena.jpg");
cvtColor(_img, img, CV_32F);
cout << "original image size: " << img.rows << " " << img.cols << endl;
cout << "original type: " << img.type() << endl;
cout << "original depth: " << img.depth() << endl;
Mat _src = img.clone();
_src += 1;
log(_src, logContrast);
logContrast *= log_c;
/// ...
Run Code Online (Sandbox Code Playgroud)
我收到这个错误:
OpenCV Error: Assertion failed (depth == CV_32F || depth == CV_64F) in …Run Code Online (Sandbox Code Playgroud) 我使用了WEBKIT_WEBGL_depth_texture扩展.并初始化缓冲区.但是我怎么能画这个帧缓冲?我现在总是被困住了.-.-
function InitDepthtextures (){
var size = 256;
// Create a color texture
var colorTexture = gl.createTexture();
gl.bindTexture(gl.TEXTURE_2D, colorTexture);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, size, size, 0, gl.RGBA, gl.UNSIGNED_BYTE, null);
// Create the depth texture
depthTexture = gl.createTexture();
gl.bindTexture(gl.TEXTURE_2D, depthTexture);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
gl.texImage2D(gl.TEXTURE_2D, 0, gl.DEPTH_COMPONENT, size, size, 0, gl.DEPTH_COMPONENT, gl.UNSIGNED_SHORT, null);
framebuffer = gl.createFramebuffer();
gl.bindFramebuffer(gl.FRAMEBUFFER, framebuffer);
gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, colorTexture, …Run Code Online (Sandbox Code Playgroud) 我在 chrome 中使用 WEBGL_depth_texture 将场景渲染到具有颜色和深度纹理的帧缓冲区。当我显示我的颜色纹理时效果很好,但我的深度纹理全是白色的。不应该像灰色吗?
我的绘制纹理功能:
this.drawTexture = function() {
//gl.viewport(0, 0, this.canvas.width, this.canvas.height);
gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
gl.bindBuffer(gl.ARRAY_BUFFER, this.vertBuffer);
gl.vertexAttribPointer(this.VertexPosition, 2, gl.FLOAT, false, 0, 0);
gl.bindBuffer(gl.ARRAY_BUFFER, this.vertTexCoordBuffer);
gl.vertexAttribPointer(this.VertexTexture, 2, gl.FLOAT, false, 0, 0);
gl.bindTexture(gl.TEXTURE_2D, this.depthTexture);
gl.drawArrays(gl.TRIANGLES, 0, 6);
gl.bindTexture(gl.TEXTURE_2D, null);
Run Code Online (Sandbox Code Playgroud)
在里面:
this.colorTexture = gl.createTexture();
gl.bindTexture(gl.TEXTURE_2D, this.colorTexture);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, size, size, 0, gl.RGBA, gl.UNSIGNED_BYTE, null);
this.depthTexture = gl.createTexture();
gl.bindTexture(gl.TEXTURE_2D, this.depthTexture);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, …Run Code Online (Sandbox Code Playgroud) 假设我已将工作副本目录的“粘性深度”更改为,'immediates'
svn update --set-depth immediates my_dir
Run Code Online (Sandbox Code Playgroud)
(与稀疏目录有关的东西。)
我如何确定 的这种状态my_dir?例如。我忘记了设置的深度,如何检查/测试它?我尝试svn info -v .在父级中使用exclude-d dir,但我根本看不到任何有关它的信息。
好吧,我现在尝试了一切,但我真的迷失了......
ID3D11Texture2D* depthStencilTexture;
D3D11_TEXTURE2D_DESC depthTexDesc;
ZeroMemory (&depthTexDesc, sizeof(D3D11_TEXTURE2D_DESC));
depthTexDesc.Width = set->mapSettings["SCREEN_WIDTH"];
depthTexDesc.Height = set->mapSettings["SCREEN_HEIGHT"];
depthTexDesc.MipLevels = 1;
depthTexDesc.ArraySize = 1;
depthTexDesc.Format = DXGI_FORMAT_D32_FLOAT;
depthTexDesc.SampleDesc.Count = 1;
depthTexDesc.SampleDesc.Quality = 0;
depthTexDesc.Usage = D3D11_USAGE_DEFAULT;
depthTexDesc.BindFlags = D3D11_BIND_DEPTH_STENCIL;
depthTexDesc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE | D3D11_CPU_ACCESS_READ;
depthTexDesc.MiscFlags = 0;
mDevice->CreateTexture2D(&depthTexDesc, NULL, &depthStencilTexture);
D3D11_DEPTH_STENCIL_DESC dsDesc;
// Depth test parameters
dsDesc.DepthEnable = true;
dsDesc.DepthWriteMask = D3D11_DEPTH_WRITE_MASK_ALL;
dsDesc.DepthFunc = D3D11_COMPARISON_LESS;//LESS
// Stencil test parameters
dsDesc.StencilEnable = false;
dsDesc.StencilReadMask = 0xFF;
dsDesc.StencilWriteMask = 0xFF;
// Stencil operations if pixel is …Run Code Online (Sandbox Code Playgroud) 我一直在尝试将SSAO(基于这里的教程:http://john-chapman-graphics.blogspot.co.nz/2013/01/ssao-tutorial.html)添加到我的项目中,我已经坚持正确渲染深度.
我创建了一个帧缓冲纹理来绘制每个帧的深度.当我将它绘制到四边形时,纹理本身看起来正确,但我无法弄清楚如何正确地将它应用于整个场景.
这是常规场景的样子:

这是应用的深度纹理:

目前在我的片段着色器中,我只使用常规纹理坐标(TexCoord0)来绘制深度纹理.我猜我需要改变它,但我不知道要改变它.这是相关的片段着色器代码:
#version 330 core
in vec2 TexCoord0;
smooth in vec3 vNormal;
smooth in vec3 vWorldPos;
in mat4 ProjectionMatrix;
uniform sampler2D uDepthTex;
layout(location = 0) out vec4 FragColor;
void main()
{
FragColor = texture(uDepthTex, TexCoord0);
}
Run Code Online (Sandbox Code Playgroud)
关于如何解决这个问题,我有点不知所措.我在网上看了很多示例代码,似乎使用常规纹理坐标来绘制深度.
编辑:这是我的帧缓冲设置代码:
glGenFramebuffers(1, &ssaoFramebufferID);
glBindFramebuffer(GL_FRAMEBUFFER, ssaoFramebufferID);
glGenTextures(1, &ssaoDepthTextureID);
glBindTexture(GL_TEXTURE_2D, ssaoDepthTextureID);
glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT24, 1024, 1024, 0, GL_DEPTH_COMPONENT, GL_FLOAT, 0);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE, GL_NONE);
glFramebufferTexture(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, …Run Code Online (Sandbox Code Playgroud) 我正在尝试将深度图像 (RGBD) 转换为 3d 点云。我目前使用的解决方案来自这篇文章,其中:
cx = 图像中心高度cy = 图像中心宽度fx和fy= 250,通过迭代几个选项来选择深度测量是从针孔相机拍摄的,点云从中心向外投射(下面的示例图像)。谁能帮助我理解为什么以及如何解决这个问题?
depth ×10
framebuffer ×2
opengl ×2
textures ×2
webgl ×2
3d ×1
buffer ×1
depth-buffer ×1
direct3d ×1
directory ×1
directx ×1
file-find ×1
image ×1
isometric ×1
javascript ×1
opencv ×1
perl ×1
point-clouds ×1
python ×1
rendering ×1
sorting ×1
svn ×1
working-copy ×1