Part of the Khronos Group
OpenGL.org

The Industry's Foundation for High Performance Graphics

from games to virtual reality, mobile phones to supercomputers

Results 1 to 2 of 2

Thread: Missing pixels while drawing on the screen

  1. #1
    Newbie Newbie
    Join Date
    Oct 2012
    Posts
    1

    Missing pixels while drawing on the screen

    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
    Code :
    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,colourbuffer);
    	obj->Draw();
     
    	return TRUE;	
     
    }

    //Drawline function
    Code :
     
    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
    Code :
    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);
    		}
    	}

  2. #2
    Senior Member OpenGL Pro
    Join Date
    Jan 2012
    Location
    Australia
    Posts
    1,107
    You don't show the view matrix settings. You may be getting a scaling problem when the vertex is converted from integer to float.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •