openGL - 正交投影矩阵
openGL - orthogonal projection matrix
我对openGL很陌生,我正在做一个迷你项目,在那里我尝试了深度缓冲区。我到了将其显示在屏幕上的阶段。但是我想将其绘制为屏幕坐标而不是转换为浮点数。我在某处读到我需要使用投影矩阵。我已经寻找了很长时间并测试了大量不同的选项,但我似乎无法正确处理。
谁能指出我一个有用的资源或解释我将如何做到这一点?
编辑目前我的矩阵如下所示:
projectionMat = glm::ortho(0.0f, (float)_cols, 0.0f, (float)_rows, 0.0f, (float)_maxDepthVal);
projection = glGetUniformLocation(_program, "Projection");
glUniformMatrix4fv(projection, 1, GL_FALSE, glm::value_ptr(projectionMat));
编辑 2
经过一些摆弄,我发现 cols 必须出于某种奇怪的原因为负数才能显示。我现在在屏幕上正确显示,但由于某种原因,它在原点对面的两侧周围有一个间隙,这是为什么?即使是相机位置和目标的微小移动也会导致所有目标消失,所以我认为这不是问题所在。
像素艺术表现!!
呜呜!!
呜呜!!
呜呜!!
!!!!!!!!!!!!!!
新代码
glm::mat4 Projection = glm::ortho(0.0f, -static_cast<float>(_cols), 0.0f, static_cast<float>(_rows), 0.0f, static_cast<float>(_maxDepthVal));
projection = glGetUniformLocation(_program, "Projection");
glm::mat4 View = glm::lookAt(
glm::vec3(0.0f, 0.0f, -0.1f),
glm::vec3(0.0f , 0.0f, 0.0f), // and looks at the origin
glm::vec3(0,1,0) // Head is up (set to 0,-1,0 to look upside-down)
);
// Model matrix : an identity matrix (model will be at the origin)
glm::mat4 Model = glm::mat4(1.0f);
projectionMat = Projection * View * Model;
glUniformMatrix4fv(projection, 1, GL_FALSE, glm::value_ptr(projectionMat));
编辑 3
我可以使用模型矩阵翻译它,但它周围有 5 个像素的间隙,我无法摆脱,任何帮助将不胜感激,但感谢您的兴趣。
更新
根据要求我的绘图代码
glUseProgram(_program);
glDepthMask(GL_TRUE);
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_ALWAYS);
glBindBuffer(GL_ARRAY_BUFFER, _vbo);
SDL_GL_SwapWindow(_window);
glPointSize(1);
glEnableVertexAttribArray(0);
//Insert matrix here
glVertexAttribPointer(0, 3, GL_UNSIGNED_INT, GL_FALSE, 0, 0);
glDrawArrays(GL_POINTS, 0, _dataCount)
glDisableVertexAttribArray(0);
我的虚拟电话:
glGenBuffers(1, &_vbo);
glBindBuffer(GL_ARRAY_BUFFER, _vbo);
glBufferData(GL_ARRAY_BUFFER, _dataCount * 4 * sizeof(unsigned int), NULL, GL_STATIC_DRAW);
if(_vbo == 0 || glGetError() != GL_NO_ERROR)
{
_errorMessage = "VBO COULD NOT BE CREATED";
error();
}
checkCudaErrors(cudaGraphicsGLRegisterBuffer(&vbo, _vbo, cudaGraphicsMapFlagsNone));
glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindBuffer(GL_ARRAY_BUFFER, 0);
glUseProgram(0);
我在写入时也遇到了问题,因为当它转换为浮点数(用于绘图)时,它会失去精度,因此如果我再次读出该值,它会四舍五入到最接近的因子(0、256、512 等)。有没有另一种方法可以将其存储为未签名的int.(我意识到这有点偏离主题,但任何帮助将不胜感激)
问题似乎出在 cols 变量上,它需要反转才能工作,否则它会不在屏幕上。
相关文章:
- 在 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投影的固有相机矩阵.意想不到的比例因子