2014-01-21 46 views
0

我試圖讓每頂點基礎上某些浮點值到我的頂點着色器 - 浮動值將定義gl_PointSize的大小呈現OpenGL的緩衝區,以屬性

這裏是我的着色器:

attribute float vSpacial; 

void main(void) 
{ 
    gl_FrontColor = gl_Color; 
    gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; 
    gl_PointSize = vSpacial; 
} 

這裏是我設置緩衝區的綠黨,顏色和「空間」點大小信息:

GLint spacial = glGetAttribLocation(program, "vSpacial"); 
float spacialData[] = {11.0f, 50.0f, 100.0f}; 

GLuint VBO; 
glGenBuffers(1, &VBO); 
glBindBuffer(GL_ARRAY_BUFFER, VBO); 
glBufferData(GL_ARRAY_BUFFER, sizeof(positions), &positions, GL_STATIC_DRAW); 
glBindBuffer(GL_ARRAY_BUFFER, 0); 

GLuint CBO; 
glGenBuffers(1, &CBO); 
glBindBuffer(GL_ARRAY_BUFFER, CBO); 
glBufferData(GL_ARRAY_BUFFER, sizeof(colors), &colors, GL_STATIC_DRAW); 
glBindBuffer(GL_ARRAY_BUFFER, 0); 

GLuint SPO; 
glGenBuffers(1, &SPO); 
glBindBuffer(GL_ARRAY_BUFFER, SPO); 
glBufferData(GL_ARRAY_BUFFER, sizeof(spacial), &spacial, GL_STATIC_DRAW); 
glBindBuffer(GL_ARRAY_BUFFER, 0); 

,這裏是我如何渲染:

 // Set up projection 
     glMatrixMode(GL_PROJECTION); 
     glLoadIdentity(); 
     gluPerspective(45, 1024.0/768.0, 1, 1000); 
     // Set up camera view 
     glMatrixMode(GL_MODELVIEW); 
     glLoadIdentity(); 
     gluLookAt(0,0,-5, 
        0,0,0, 
        0,1,0); 

     glClearColor(0.0f, 0.0f, 0.0f, 0.0f); 
     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

     // --- 
     glUseProgram(program); 

     glPushMatrix(); 
     glRotatef(theta, 0.0f, 0.0f, 1.0f); 

     glEnableClientState(GL_VERTEX_ARRAY); 
     glEnableClientState(GL_COLOR_ARRAY); 
     glEnable(GL_PROGRAM_POINT_SIZE); 


     glBindBuffer(GL_ARRAY_BUFFER, VBO); 
     glVertexPointer(3, GL_FLOAT, 0, BUFFER_OFFSET(0)); 
     glBindBuffer(GL_ARRAY_BUFFER, CBO); 
     glColorPointer(3, GL_FLOAT, 0, BUFFER_OFFSET(0)); 

     glBindBuffer(GL_ARRAY_BUFFER, SPO); 
     glEnableVertexAttribArray(spacial); 
     glVertexAttribPointer(spacial, 1, GL_FLOAT, GL_FALSE, 0, BUFFER_OFFSET(0)); 

     glDrawArrays(GL_POINTS, 0, 3); 

     glDisableVertexAttribArray(spacial); 

     glDisable(GL_PROGRAM_POINT_SIZE); 
     glDisableClientState(GL_COLOR_ARRAY); 
     glDisableClientState(GL_VERTEX_ARRAY); 

     glBindBuffer(GL_ARRAY_BUFFER, 0); 

     glPopMatrix(); 

     // --- 

     glFlush(); 
     SwapBuffers(hDC); 

     theta += 1.0f; 

目前我看不到任何渲染 - 如果我註釋掉線 glBindBuffer(GL_ARRAY_BUFFER,SPO); 我會看到一個點本身被渲染(不使用我傳入的空間值)。

回答

1

諷刺立即注意到我應該使用spacialData在BufferData呼叫沒有空間這個問題::

故事的道理:名稱變量很好,不要編程累(沒有咖啡)。