【问题标题】:Reflection mapping in GLSLGLSL 中的反射映射
【发布时间】:2012-02-29 18:42:36
【问题描述】:

我正在尝试使用在 OpenGL ES 2.0 中工作的立方体贴图来获得反射贴图。我不确定我是否正确计算了反射方向以传递到片段着色器中的 samplerCube。

首先,我有投影、模型和视图矩阵以及组合的模型视图矩阵。这是我在 GLSL 中的顶点着色器的代码:

attribute vec4 Position;
attribute vec3 Normal;

uniform mat4 Projection;
uniform mat4 ModelView;
uniform mat3 Model;
uniform mat4 ModelViewProjectionMatrix;
uniform vec3 EyePosition;

varying vec3 ReflectDir;


void main()
{
    gl_Position = Projection * ModelView * Position;
    mediump vec3 EyeDir = normalize(Position.xyz - EyePosition);

    // Reflect eye direction by normal, and transform to world space
    ReflectDir = Model * reflect(EyeDir, Normal);
}

我的假设是 EyeDirection 必须在对象空间中。 (正确的?) 如何在对象空间中获取 EyePosition?我是否只是通过逆 ModelView 矩阵变换相机位置(即在 OpenGL 中始终位于 {0,0,0}?)?

我已经尝试过了,但是我的片段着色器将所有内容都染成了黑色,好像 ReflectDir 不正确。

有没有人有一个在 Xcode 中工作的 OpenGL ES 2.0 反射映射(带有 samplerCube)的工作示例?

【问题讨论】:

  • 什么是Model?当你这样做时发生了什么错误?
  • 模型是将对象空间坐标转换为世界空间坐标的变换矩阵。当我的对象渲染时,它是完全黑色的,但它应该使用片段着色器中的 ReflectDir 从 samplerCube 中采样颜色。所以,我认为我计算 ReflectDir 的方式有问题。

标签: ios reflection opengl-es glsl


【解决方案1】:

通常的方法是在世界坐标系中同时获取眼睛方向和法线。然后将查找向量计算为

vec3 lookup = normalize(reflect(EyeDir, Normal));

【讨论】:

    猜你喜欢
    • 2012-11-03
    • 2017-04-18
    • 1970-01-01
    • 2012-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多