www.pudn.com > simpleraytracer_v1_0.zip > graphics2d.cpp


/*===================================================================== 
Code By Nicholas Chapman. 
 
  nickamy@paradise.net.nz 
 
You may use this code for any non-commercial project, 
as long as you do not remove this description. 
 
You may *not* use this code for any commercial project. 
=====================================================================*/ 
#include "graphics2d.h" 
 
#include "../maths/plane2.h" 
 
 
void Graphics2d::drawLine(const Vec2& startpos, const Vec2& endpos, const Vec3& colour) 
{ 
	//----------------------------------------------------------------- 
	//try early out 
	//----------------------------------------------------------------- 
	if(	startpos.x > 0 && startpos.x < getWidth() - 1 && 
		startpos.y > 0 && startpos.y < getHeight() - 1 && 
		endpos.x > 0 && endpos.x < getWidth() - 1 && 
		endpos.y > 0 && endpos.y < getHeight() - 1) 
		doDrawLine(startpos, endpos, colour); 
 
 
 
 
 
		//	inline Plane2(const Vec2& normal, float dist_from_origin); 
		Vec2 clipped_startpos(startpos); 
		Vec2 clipped_endpos(endpos); 
 
		if(endpos.y < 0) 
		{ 
			int a = 9; 
		} 
 
		Plane2 top(Vec2(0.0f,-1.0f), -0.1f); 
 
		if(top.clipLineInPlane(clipped_startpos, clipped_endpos)) 
			return; 
 
 
		Plane2 right(Vec2(1.0f,0.0f), getWidth() - 1.1f);//right 
 
		if(right.clipLineInPlane(clipped_startpos, clipped_endpos)) 
			return; 
 
 
 
		Plane2 bottom(Vec2(0.0f, 1.0f), getHeight() - 1.1f);//bottom 
 
		if(bottom.clipLineInPlane(clipped_startpos, clipped_endpos)) 
			return; 
 
 
 
		Plane2 left(Vec2(-1.0f, 0.0f), -0.1f);//left 
 
		if(left.clipLineInPlane(clipped_startpos, clipped_endpos)) 
			return; 
 
 
 
		assert(clipped_startpos.y >= -0.1 && clipped_endpos.y >= -0.1); 
		assert(clipped_startpos.x >= -0.1 && clipped_endpos.x >= -0.1); 
 
		assert(clipped_startpos.y < getHeight() - 1 && clipped_endpos.y < getHeight() - 1); 
		assert(clipped_startpos.x < getWidth() - 1 && clipped_endpos.x < getWidth() - 1); 
 
 
		doDrawLine(clipped_startpos, clipped_endpos, colour); 
}