OpenGL正交投影
OpenGL Orthographic Projections
我试图在OpenGL中设置一个正交投影,但似乎找不到为什么这个三角形不能正确渲染(它不可见)。我使用相同的代码透视投影(除了我的顶点坐标和投影矩阵,当然),它工作得很好。我将三角形顶点构造为:
Vertex vertices[] = { Vertex(glm::vec3(0, 600, 0.0), glm::vec2(0.0, 0.0)),
Vertex(glm::vec3(300, 0, 0.0), glm::vec2(0.5, 1.0)),
Vertex(glm::vec3(800 , 600, 0.0), glm::vec2(1.0, 0.0)) };
我的相机构造函数是:
Camera::Camera(const glm::vec3& pos, int width, int height) {
ortho = glm::ortho(0, width, height, 0, 0, 1000);
this->position = pos;
this->up = glm::vec3(0.0f, 1.0f, 0.0f);
this->forward = glm::vec3(0.0f, 0.0f, 1.0f);
}
我称之为:
camera = Camera(glm::vec3(0, 0, 2), window->getSize().x, window->getSize().y);
其中窗口是800 * 600像素。我正在上传一个转换到着色器通过函数:
void Shader::update(const Transform& transform, const Camera& camera) {
glm::mat4 model = camera.getProjection() * transform.getModel();
glUniformMatrix4fv(uniforms[TRANSFORM_U], 1, GL_FALSE, &model[0][0]);
}
其中camera.getProjection()
为:
glm::mat4 Camera::getProjection() const {
return ortho * glm::lookAt(position, glm::vec3(0, 0, 0), up);
}
, transform.getModel()
为
glm::mat4 Transform::getModel() const {
glm::mat4 posMat = glm::translate(pos);
glm::quat rotQuat = glm::quat(glm::radians(rot));
glm::mat4 rotMat = glm::toMat4(rotQuat);
glm::mat4 scaleMat = glm::scale(scl);
return posMat * rotMat * scaleMat;
}
虽然我怀疑问题在于我的正射影设置,而不是我的变换,因为这对透视投影很好。有人知道为什么用这些坐标渲染的三角形是不可见的吗?在渲染网格之前,我绑定了我的着色器并上传了投影矩阵。如果有帮助的话,我的顶点着色器是:
#version 120
attribute vec3 position;
attribute vec2 texCoord;
varying vec2 texCoord0;
uniform mat4 transform;
void main()
{
gl_Position = transform * vec4(position, 1.0);
texCoord0 = texCoord;
}
对这个问题感兴趣的人,它是:
ortho = glm::ortho(0, width, height, 0, 0, 1000);
参数以整数形式提供,而不是浮点数。因此,在glm::ortho
中应用的整数除法创建了一个不正确的正射影矩阵。
相关文章:
- 在 OpenGL 中使用透视与正交投影时的光线投射(鼠标拾取)
- OpenGL 透视投影裁剪多边形与顶点在视锥体之外 = 错误的纹理映射?
- 现代Opengl:同时正投影和透视投影
- OpenGL,具有正交投影的几何着色器
- OpenGL投影/矩阵混乱
- 绕Y轴旋转二维正方形,并使用DirectX或openGL以透视投影方式显示
- 透视投影 OPENGL 和计算着色器
- QMatrix4x4 模型视图投影 OpenGL 无法获取要渲染的场景
- 鼠标按下投影 (C++ OpenGL)
- 在 C++/OpenGL 中围绕另一个对象旋转投影一个对象
- 如何在 opengl 中翻译屏幕中的投影对象
- openGL - 正交投影矩阵
- 在C++中的OpenGL中将坐标从三维透视投影映射到二维正投影
- 着色器GLSL OpenGL上的投影矩阵问题
- OpenGL透视投影来映射屏幕像素
- OpenGL ES 2.0 2D投影矩阵,将GLfloat(*)[4]转换为GLfloat时出错
- 利用现代OpenGL进行二维绘制的正交投影
- OpenGL 3.3投影矩阵错误
- OpenGL正交投影
- OpenGL投影的固有相机矩阵.意想不到的比例因子