我使用的是EffectComposer:
renderer = new THREE.WebGLRenderer();
renderer.setDepthTest(false);
...
composer = new THREE.EffectComposer( renderer);
Run Code Online (Sandbox Code Playgroud)
所以我想禁用深度测试,但是当我这样做时:
composer.render();
var gl = renderer.context;
alert(gl.getParameter(gl.DEPTH_TEST));
Run Code Online (Sandbox Code Playgroud)
值为true而不是false.如何禁用深度测试?
谢谢.
我想使用c/c ++将大的双数(> 1e6)舍入到最接近但更大的浮点数.我尝试了这个,但我不确定它是否总是正确的,并且可能有一种最快的方法:
int main() {
// x is the double we want to round
double x = 100000000005.0;
double y = log10(x) - 7.0;
float a = pow(10.0, y);
float b = (float)x;
//c the closest round up float
float c = a + b;
printf("%.12f %.12f %.12f\n", c, b, x);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
谢谢.
我使用对数深度缓冲区:在我的着色器中,我写了代码描述在这里.
在顶点着色器中:
void main()
{
vec4 vertexPosClip = gl_ModelViewProjectionMatrix * gl_Vertex;
gl_Position = vertexPosClip;
gl_TexCoord[6] = vertexPosClip;
}
Run Code Online (Sandbox Code Playgroud)
在片段着色器中:
void main()
{
gl_FragColor = ...
const float C = 1.0;
const float far = 1000000000.0;
const float offset = 1.0;
gl_FragDepth = (log(C * gl_TexCoord[6].z + offset) / log(C * far + offset));
}
Run Code Online (Sandbox Code Playgroud)
现在我的一个算法(SSAO适用于经典的深度缓冲区),我想恢复我的片段的深度.这是我使用的公式:
const float C = 1.0;
const float far = 1000000000.0;
const float offset = 1.0;
//depth
z=(pow(C*far+offset,depth_in_depth_buffer)-offset)/C;
Run Code Online (Sandbox Code Playgroud)
但是它不起作用,算法不再起作用.你知道我计算的z是否是正确的深度?
我想创建一个带有可选参数的函数,该参数取另一个参数的值.在函数的声明中,以下方法不起作用,但这正是我想要做的:
void function(int a, int b=a) //error
Run Code Online (Sandbox Code Playgroud)
我尝试将变量b的默认值设置为a的值.最干净的方法是什么?我们可以在不改变功能签名的情况下这样做吗?