Opengl es webgl绕X轴旋转摄影机

Opengl es webgl绕X轴旋转摄影机,opengl-es,camera,rotation,webgl,opengl-es-2.0,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

我在绕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轴旋转相机时,它会水平扩展


你对如何修复它没有任何建议吗?

公告牌是始终面向相机的四元屏幕的常用名称

布告牌网格数据是面向摄影机的平面(z=0)

通过将模型视图矩阵的旋转部分设置为0,只保留平移部分,可以渲染广告牌:
gl\u Position=投影*零旋转和缩放(视图*模型)*属性位置


如果你在谷歌上搜索“billboard”,我相信你会找到很多类似的参考资料。

那么你想要什么样的billboard呢?始终面向摄影机的四边形?@WacławJasper不确定你所说的广告牌是什么意思,但是的,我想要一个始终面向摄影机的四边形,无论摄影机场景移动到哪里,我也想将我的图像移动到那里。我想这是一个片段着色器问题。无论如何,我今天会试试,然后我会让你知道,谢谢你的回复!另一个问题,如果我用这种方式计算gl_位置,我会影响我3D世界的所有内容吗?因为我只想在我的图像上应用“公告牌”行为,并保持全景图像不变。你可以在我上面的图片上看到。是的。为公告牌使用不同的着色器或传入模型矩阵,以便
view*matrix==zerrotationandscaling(view*model)