webgl围绕X轴旋转相机

时间:2016-05-24 18:08:13

标签: opengl-es camera rotation webgl opengl-es-2.0

我在绕X轴旋转相机时遇到了一些麻烦。我在相机的场景中放置了一个图像,当我用相机查看时,我想在场景中保留一个图像。

首先,我构建了一些函数来创建矩阵:

mat4 makeTranslation(float tx, float ty, float tz) {
    return mat4(
         1.,  0.,  0.,  0.,
         0.,  1.,  0.,  0.,
         0.,  0.,  1.,  0.,
         tx, ty, tz, 1.
    );
}
mat4 makeXRotation(float angleInDegrees) {
    float angleInRadians = angleInDegrees * M_PI / 180.;
    float c = cos(angleInRadians);
    float s = sin(angleInRadians);

    return mat4(
        1., 0., 0., 0.,
        0., c, s, 0.,
        0., -s, c, 0.,
        0., 0., 0., 1.
    );
}
mat4 makeZRotation(float angleInDegrees) {
    float angleInRadians = angleInDegrees * M_PI / 180.;
    float c = cos(angleInRadians);
    float s = sin(angleInRadians);
    return mat4(
         c, s, 0., 0.,
        -s, c, 0., 0.,
         0., 0., 1., 0.,
         0., 0., 0., 1.
    );
}
// camera
mat4 myW2N(float ax, float ay, float zNear, float zFar) {
    float cx = 1.0 / ax;
    float cy = 1.0 / ay;
    float z0 = -zNear;
    float z1 = -zFar;
    float az = (z0 + z1) / (z0 - z1);
    float bz = (1. - az) * z0;
    return mat4(
        cx, 0., 0., 0.,
        0., cy, 0., 0.,
        0., 0., az, bz,
        0., 0., -1., 0.
    );
}
// transpose
mat3 rotationW2R() {
    return mat3(
        0., 0., 1.,
        1., 0., 0.,
        0., 1., 0.
    );
}

不仅仅是在Y轴上翻译相机位置

float ax = tan(hFOV * M_PI);
float ay = ax / aspectRatio;
mat4 res = makeTranslation(0., move_y, 0.) * myW2N(ax,ay,6.,2.);

但我不想翻译我想要的相机位置绕轴旋转并将图像保留在场景中

这就是我尝试这样做的方式:

float ax = tan(hFOV * M_PI);
float ay = ax / aspectRatio;
mat4 res = makeXRotation(pitch) * makeZRotation(roll) * makeTranslation(0., move_y, 0.) * myW2N(ax,ay,6.,2.);

但是最后我的图像没有向上移动它上下两侧不仅向上或向下扩展,而是向上扩展它我需要围绕X轴旋转相机,当我旋转它时在Y轴周围,它会水平扩展。

你有什么建议怎么解决它?

1 个答案:

答案 0 :(得分:1)

Billboard是常常面向相机的四边形的通用名称。

广告牌网格数据是面向相机的平面(z = 0)。

您可以通过将模型视图矩阵的旋转部分设置为0来渲染广告牌,只留下翻译部分:gl_Position = projection * zeroRotationAndScaling(view * model) * attr_position;在顶点着色器中。

如果你谷歌搜索"广告牌"我相信你会找到很多像this这样的参考文献。