我自己定义的一个画圆的类:
class glCircle :public glObject
{
private:
VERTEX* p;
....
};
其中glObject定义如下:
class glObject
{
protected:
GLuint vbuffer;
GLuint ibuffer;
...
};
VERTEX是我自己定义的一个顶点结构体:
struct VERTEX
{
GLfloat pos[3];
GLfloat color[3];
};
目的就是在那个p数组里存顶点数据,然后再存进vbuffer,ibuffer进行绘制。算是对opengl的渲染机制打了个包。
我的渲染函数glCircle::Draw()定义如下:
glBindVertexArray(vao[0]); //2D顶点属性
glBindBuffer(GL_ARRAY_BUFFER, vbuffer);
glVertexAttribPointer(0, 3, GL_FLOAT, false, sizeof(VERTEX),0);
glVertexAttribPointer(1, 3, GL_FLOAT, false, sizeof(VERTEX),(void*)12);
glEnableVertexAttribArray(0);
glEnableVertexAttribArray(1);
glDrawArrays(GL_TRIANGLE_FAN, 0, pnum);
顶点着色器如下:
#version 450 core
#pragma debug(on)
layout(location=0) in vec3 vertex;
layout(location=1) in vec3 pcolor;
out vec4 color;
uniform Matrix{
mat4 world;
mat4 view;
mat4 proj;
};
void main()
{
gl_Position=vec4(vertex.xy,0.0f,1.0f);
color=vec4(pcolor,1.0f);
}
像素着色器如下:
#version 450 core
#pragma debug(on)
in vec4 fcolor;
out vec4 color;
void main()
{
color=fcolor;
}
结果无论我的color设成什么那个圆都是黑色的:
图片中大家还看到了一些直线和矩形的边角对不对?没错,所有的渲染对象全部是黑色的,无论color的值为何。
我可以肯定我的vbuffer,ibuffer创建成功且数据在渲染时用glMapBuffer拷进去了。问题在于这些数据没有按预期地传到着色器里......
初学OpenGL,求求各位大神帮帮忙~~