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):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) 你知道会发生什么吗 这
- 有些是(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。因此,您分配的内存超过了保存数据读取所需的内存。抗锯齿/多采样解决方案有效。谢谢