我不知道爲什麼,但似乎我的z軸竊聽(現在看來,這是加倍的價值或東西)投影在OpenGL(臭蟲以Z軸)
這應該是一個立方體
但是現在看來似乎是 「深」 說的什麼似乎是錯誤的
我pr_Matrix:
mat4 mat4::prespective(float fov, float aspectRatio, float near, float far){
mat4 result;
float yScale = 1.0f/tan(toRadians(fov/2.0f));
float xScale = yScale/aspectRatio;
float frustumLength = far - near;
result.elements[0 + 0 * 4] = xScale;
result.elements[1 + 1 * 4] = yScale;
result.elements[2 + 2 * 4] = -(far + near)/frustumLength;
result.elements[3 + 2 * 4] = -1.0f;
result.elements[2 + 3 * 4] = -(2.0f * far * near)/frustumLength;
return result;
}
我ml_Matrix:
maths::mat4 &ProjectionMatrix(){
maths::mat4 m_ProjM = maths::mat4::identity();
m_ProjM *= maths::mat4::translation(m_Position);
m_ProjM *= maths::mat4::rotation(m_Rotation.x, maths::vec3(1, 0, 0));
m_ProjM *= maths::mat4::rotation(m_Rotation.y, maths::vec3(0, 1, 0));
m_ProjM *= maths::mat4::rotation(m_Rotation.z, maths::vec3(0, 0, 1));
maths::mat4 scale_matrix = maths::mat4(m_Scale);
scale_matrix.elements[3 + 3 * 4] = 1.0f;
m_ProjM *= scale_matrix;
return m_ProjM;
}
我vw_matrix(相機)
void update(){
maths::mat4 newMatrix = maths::mat4::identity();
newMatrix *= maths::mat4::rotation(m_Pitch, maths::vec3(1, 0, 0));
newMatrix *= maths::mat4::rotation(m_Yaw, maths::vec3(0, 1, 0));
newMatrix *= maths::mat4::translation(maths::vec3(-m_Pos.x, -m_Pos.y, -m_Pos.z));
m_ViewMatrix = newMatrix;
}
我的矩陣乘法在GLSL代碼:
vec4 worldPosition = ml_matrix * vec4(position, 1.0);
vec4 positionRelativeToCamera = vw_matrix * worldPosition;
gl_Position = pr_matrix * positionRelativeToCamera;
編輯:我想我明白了! (一旦我獲得時間,會仔細檢查數學)大多數教程(所以,我的代碼的來源)使用mat4 :: prespective(float fov,float aspectRatio,float near,float far),他們沒有說的是「視野」是指「fovy」(所以「垂直視場」),結果似乎複製「通常FOV遊戲」現在有了這個簡單的變化:
float xScale = 1.0f/tan(toRadians(fov/2.0f));
float yScale = xScale * aspectRatio;
感謝您指出它作爲一個FOV問題Henk De Boer
你在預期函數中通過了什麼「fov」。 –
這是我的函數調用「mat4 proj = mat4 :: prespective(80.0f,16.0f/9.0f,0.1f,100.0f);」所以80.0f –
嘗試把它放在更低的位置,應該有所幫助。說45-60。 –