我對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之間浮動,但這樣不方便且耗時,因爲我希望能夠繪製數百萬個點。 –