PDA

View Full Version : Missing pixels while drawing on the screen



rahul_kumar
11-30-2012, 03:13 AM
I am trying to draw new shapes by setting the buffer for each pixel and the corresponding values for each pixel i.e red,green,alpha.blue.
but to my dismay i have been noticing many times that always few pixels miss in the shapes..
can anyone provide the reason for this..

Following are the code snipets:-

i
nt DrawGLScene(GLvoid) // Here's Where We Do All The Drawing
{
glClear(GL_COLOR_BUFFER_BIT); // Clear Screen And Depth Buffer
float varray[]={0.0,-200.0,-50.0,50,-40,-50};
p1=MyCalculations(20,0,-20);
p2=MyCalculations(20,40,-40);
p3=MyCalculations(-20,40,-40);
p4=MyCalculations(-20,0,-20);
p5=MyCalculations(0,80,-30);
//new Vertices(varray);

Draw_Line(p1,p5);
Draw_Line(p2,p5);
Draw_Line(p3,p5);
Draw_Line(p4,p5);
Draw_Line(p1,p2);
Draw_Line(p2,p3);
Draw_Line(p3,p4);
Draw_Line(p4,p1);


DrawBuffer *obj= new DrawBuffer((int)screenWidth,(int)screenHeight,colo urbuffer);
obj->Draw();

return TRUE;

}

//Drawline function



void Draw_Line(point p1,point p2)
{
point pl=(p1.x<p2.x?p1:p2);
point pr=(p1.x>p2.x?p1:p2);
float m=(pr.y-pl.y)/(pr.x-pl.x);
int k=0;

for(k=pl.x;k<pr.x;k++)
{
int y=pl.y+(m*(k-pl.x));
colourbuffer[(int)(y*screenWidth + k)*4 + 0]=1;
colourbuffer[(int)(y*screenWidth + k)*4 + 1]=0;
colourbuffer[(int)(y*screenWidth + k)*4 + 2]=1;
colourbuffer[(int)(y*screenWidth + k)*4 + 3]=1;
}

}

//Drawbufferfunction


void DrawBuffer::Draw()
{
int SCREEN_WIDTH = _screenWidth;
int SCREEN_HEIGHT = _screenHeight;

glClearColor(1,1,1,0);
glClear(GL_COLOR_BUFFER_BIT);

glBegin(GL_POINTS);

for(int y=0;y<_screenHeight;y++)
{
for(int x=0;x<_screenWidth;x++)
{
unsigned char r = 255*_colorBuffer[ (y*SCREEN_WIDTH + x)*4 + 0];
unsigned char g = 255*_colorBuffer[ (y*SCREEN_WIDTH + x)*4 + 1];
unsigned char b = 255*_colorBuffer[ (y*SCREEN_WIDTH + x)*4 + 2];
unsigned char a = 255*_colorBuffer[ (y*SCREEN_WIDTH + x)*4 + 3];

if(b == 0)
{
int c = 10;
}

glColor4ub(r,g,b,a);
glVertex2i(x,y);
}
}

tonyo_au
11-30-2012, 05:56 PM
You don't show the view matrix settings. You may be getting a scaling problem when the vertex is converted from integer to float.