2016-02-26 241 views
0

我對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。 (我知道這是主題稍微偏離,但任何幫助,將不勝感激)

+0

哪個OpenGL?可編程管道(桌面或ES上的2.0;任何Web GL)還是舊的固定管道?你是否在使用諸如'glPushMatrix'之類的東西?另外:您提供的所有座標都將浮動,無論如何,這只是一個範圍問題。 – Tommy

+0

不,我使用頂點着色器和glm作爲矩陣 –

+0

我的深度座標是介於0和最大無符號整數這個項目,所以我想知道如何得到這個畫,我能做到這一點的唯一途徑是將其更改爲在-1和1之間浮動,但這樣不方便且耗時,因爲我希望能夠繪製數百萬個點。 –

回答

0

該問題似乎與cols變量,它需要倒轉工作,否則它是在屏幕之外。