我对openGL很陌生,我正在做一个小型项目,在这里我用深度缓冲区进行实验。我到了将它显示在屏幕上的阶段。但是我想绘制它作为屏幕坐标而不是转换为浮动。我在某处读到我需要使用投影矩阵。我已经寻找年龄和测试不同选项的负载,但我似乎无法做到正确。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));
EDIT 2
有了一些摆弄我发现的cols必须为阴性一些奇怪的原因之前,它会显示。我现在斜纹正确地显示在屏幕上,但由于某种原因,他在与原点相对的两侧有一个间隙,为什么?即使在相机位置和目标的一小步移动,它的所有消失,所以我不认为这会是问题。
像素艺术表现形式!
OOOO !!
OOOO !!
OOOO !!
!!!!!!!!!!!!!!
新代码
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个像素,我无法摆脱的,任何帮助一个缺口在此将不胜感激,但感谢您的兴趣。
UPDATE
根据要求我的拉伸代码
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);
我VBO:
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等)。有没有办法做到这一点,它将其存储为unsigned int。 (我知道这是主题稍微偏离,但任何帮助,将不胜感激)
哪个OpenGL?可编程管道(桌面或ES上的2.0;任何Web GL)还是旧的固定管道?你是否在使用诸如'glPushMatrix'之类的东西?另外:您提供的所有坐标都将浮动,无论如何,这只是一个范围问题。 – Tommy
不,我使用顶点着色器和glm作为矩阵 –
我的深度坐标是介于0和最大无符号整数这个项目,所以我想知道如何得到这个画,我能做到这一点的唯一途径是将其更改为在-1和1之间浮动,但这样不方便且耗时,因为我希望能够绘制数百万个点。 –