C++ OpenGL-像素颜色错误

C++ OpenGL-像素颜色错误,c++,opengl,C++,Opengl,我画了一个红色三角形,它是屏幕的一半(屏幕是1024*768,背景色是黑色)。然后,我使用glReadPixels读取每个像素的颜色。应该有1024*768/2个像素(r=255,g=0,b=0),因为红色三角形是屏幕大小的一半,剩余的像素应该是(r=0,g=0,b=0)。但是,有少量像素既不是(r=255,g=0,b=0)也不是(r=0,g=0,b=0): 有些是(r=64,g=0,b=0) 有些是(r=128,g=0,b=0) 有些是(r=191,g=0,b=0) 你知道会发生什么吗 这

我画了一个红色三角形,它是屏幕的一半(屏幕是1024*768,背景色是黑色)。然后,我使用glReadPixels读取每个像素的颜色。应该有1024*768/2个像素(r=255,g=0,b=0),因为红色三角形是屏幕大小的一半,剩余的像素应该是(r=0,g=0,b=0)。但是,有少量像素既不是(r=255,g=0,b=0)也不是(r=0,g=0,b=0):

  • 有些是(r=64,g=0,b=0)

  • 有些是(r=128,g=0,b=0)

  • 有些是(r=191,g=0,b=0)

你知道会发生什么吗

这是我的片段着色器:

in vec3 fragmentColor;

out vec3 color;

void main(){

        color = vec3(1,0.,0.);
}
这是我如何读取像素颜色的:

unsigned char *mycolor = (unsigned char *)malloc(3*width_here*height_here*sizeof(unsigned char *));

glReadPixels(0, 0, width_here, height_here, GL_RGB, GL_UNSIGNED_BYTE, (GLvoid*)(mycolor));

抗锯齿?不同颜色的像素是那些接近理想线的像素,但绘制的颜色不同,因此人眼看起来这条线更像是一条线而不是一个楼梯。听起来好像您启用了多重采样(请参见MS与非MS),您使用的
sizeof
操作符有误
sizeof(sometype*)
返回指向该类型的指针的大小,而不是类型本身的大小。并且
sizeof(char)
被定义为1。因此,您分配的内存超过了保存数据读取所需的内存。抗锯齿/多采样解决方案有效。谢谢