【发布时间】:2019-04-24 14:07:34
【问题描述】:
我想在我的应用程序中显示一些雾/鸟瞰图。但我只想使用从相机到模型的 x,y 世界距离来确定外观。
我已经设法通过calculation 获得了从相机到模型的签名 z 距离。
红色对象与相机的 z 距离为正,蓝色对象为负,而 implementation 的所有值似乎都是正的。
顶点着色器:
uniform mat4 u_mvp; // Model-View-Projection-Matrix
uniform mat4 u_mv; // Model-View-Matrix
uniform vec4 u_color; // Object color
attribute vec4 a_pos; // Vertex position
varying vec4 color; // Out color
// Fog
const float density = 0.007;
const float gradient = 1.5;
void main() {
gl_Position = u_mvp * a_pos;
// Fog
float distance = -(u_mv * a_pos).z; // Direct distance from camera
// 4000 is some invented constant to bring distance to ~[-1,1].
float visibility = clamp((distance / 4000.0), 0.0, 1.0);
color = mix(vec4(1.0, 0.0, 0.0, 1.0), u_color, visibility);
if(distance < 0){
color = vec4(0.0, 0.0, 1.0, 1.0);
}
}
片段着色器:
varying vec4 color;
void main() {
gl_FragColor = color;
}
- 为什么会有负 z 值?还是很常见?
- 如何计算 x,y 世界到相机的距离?
【问题讨论】:
-
你确定
u_mv是模型视图矩阵而不是模型视图投影矩阵吗? -
也不确定
u_mv矩阵是否跟踪正确的值,但它肯定与其他值不同。可能在这里忘记了翻译(有点难以调试其他人的工作)。
标签: opengl glsl shader perspectivecamera opengl-2.0