EMI: Rotate overworld sprites again
This commit is contained in:
parent
b1a910c800
commit
46e7cf29cd
2 changed files with 36 additions and 12 deletions
|
@ -601,17 +601,30 @@ void GfxOpenGL::drawSprite(const Sprite *sprite) {
|
|||
GLdouble modelview[16];
|
||||
glGetDoublev(GL_MODELVIEW_MATRIX, modelview);
|
||||
|
||||
// We want screen-aligned sprites so reset the rotation part of the matrix.
|
||||
for (int i = 0; i < 3; i++) {
|
||||
for (int j = 0; j < 3; j++) {
|
||||
if (i == j) {
|
||||
modelview[i * 4 + j] = 1.0f;
|
||||
} else {
|
||||
modelview[i * 4 + j] = 0.0f;
|
||||
if (g_grim->getGameType() == GType_MONKEY4) {
|
||||
const Math::Quaternion quat =
|
||||
_currentActor->isInOverworld()
|
||||
? Math::Quaternion::fromEuler(0, 0, _currentActor->getYaw())
|
||||
: Math::Quaternion::fromEuler(0, 0, _currentActor->getRoll());
|
||||
Math::Matrix4 act = quat.toMatrix();
|
||||
act.transpose();
|
||||
act(3,0) = modelview[12];
|
||||
act(3,1) = modelview[13];
|
||||
act(3,2) = modelview[14];
|
||||
glLoadMatrixf(act.getData());
|
||||
} else {
|
||||
// We want screen-aligned sprites so reset the rotation part of the matrix.
|
||||
for (int i = 0; i < 3; i++) {
|
||||
for (int j = 0; j < 3; j++) {
|
||||
if (i == j) {
|
||||
modelview[i * 4 + j] = 1.0f;
|
||||
} else {
|
||||
modelview[i * 4 + j] = 0.0f;
|
||||
}
|
||||
}
|
||||
}
|
||||
glLoadMatrixd(modelview);
|
||||
}
|
||||
glLoadMatrixd(modelview);
|
||||
|
||||
glAlphaFunc(GL_GREATER, 0.5);
|
||||
glEnable(GL_ALPHA_TEST);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue