nuclear@3: #include "disc.h" nuclear@3: #include "opengl.h" nuclear@3: #include "simworld.h" nuclear@3: nuclear@3: Disc::Disc() nuclear@3: { nuclear@3: radius = 1.0f; nuclear@3: } nuclear@3: nuclear@3: Disc::Disc(const Vector3 &pt, const Vector3 &norm, float rad) nuclear@3: : Plane(pt, norm) nuclear@3: { nuclear@3: radius = rad; nuclear@3: } nuclear@3: nuclear@3: bool Disc::collision(const Ray &ray, float rad, Collision *col) const nuclear@3: { nuclear@3: if(!Plane::collision(ray, rad, col)) { nuclear@3: return false; nuclear@3: } nuclear@3: Vector3 pt = this->pt - normal * rad; nuclear@3: float dist_sq = (col->pos - pt).length_sq(); nuclear@3: if(dist_sq > radius * radius) { nuclear@3: return false; nuclear@3: } nuclear@3: return true; nuclear@3: } nuclear@3: nuclear@3: void Disc::draw() const nuclear@3: { nuclear@3: Matrix4x4 rot_matrix = calc_rot_matrix(); nuclear@3: nuclear@3: glMatrixMode(GL_MODELVIEW); nuclear@3: glPushMatrix(); nuclear@3: glMultTransposeMatrixf(rot_matrix[0]); nuclear@3: nuclear@3: glBegin(GL_TRIANGLE_FAN); nuclear@3: glNormal3f(normal.x, normal.y, normal.z); nuclear@3: glVertex2f(0, 0); nuclear@3: const int segm = 42; nuclear@3: for(int i=0; i