【发布时间】:2019-03-05 20:46:27
【问题描述】:
目前我正在开发一个小型游戏引擎。我已经完成了转换,但是包括正交投影会破坏程序,然后精灵根本不会渲染。 Transformation 类只是平移和缩放对象,单独使用它就可以完美地工作。
正交矩阵创建:
Matrix Matrix::orthographic(const float & left, const float & right, const float & top, const float & bottom, const float & near, const float & far)
{
Matrix m(0.0f);
m.value[0][0] = 2 / (right - left);
m.value[1][1] = 2 / (top - bottom);
m.value[2][2] = 2 / (far - near);
m.value[3][0] = -(right + left) / (right - left);
m.value[3][1] = -(top + bottom) / (top - bottom);
m.value[3][2] = -(far + near) / (far - near);
m.value[3][3] = 1;
return m;
}
创造转化:
transformable = new Transformable(Vector3(10.0f, 10.0f, 0.0f), Vector3(64.f, 64.f, 0.0f));
使用这个矩阵:
shaderProgram->setMatrixUniform("projection", Matrix::orthographic(0.0f, 800.0f, 600.0f, 0.0f, -1.0f, 1.0f));
使用转换:
shaderProgram->setMatrixUniform("transformation", transformable->getMatrix());
有人可以帮帮我吗?我不知道我的错在哪里。
【问题讨论】:
-
你说透视破坏了程序但你给出了正交投影的代码,这令人困惑?
-
@Rabbid76 我的错误命名法。
-
通常它必须是
-2 / (far - near)而不是2 / (far - near)。在right handed system 中,视图空间 z 轴通常指向视口之外。 -
@Rabbid76 真的吗?感谢提示
-
“Transformation 类只是平移和缩放对象,单独它就可以完美地工作。” 不同之处在于,由于正交投影,您必须在窗口坐标中绘制模型.如果您使用这样的正交投影是否有效:
Matrix::orthographic(-1.0f, 1.0f, -1.0f, 1.0f, -1.0f, 1.0f));,与完全不使用投影应该是一样的吗?
标签: c++ opengl matrix orthographic