def intersect (self, orig_v, dir_v, pl): ''' method performing ray-triangle intersection (Moller-Trumbore algorithm) @param orig QVector3D @param dir QVector3D @return isect_t float or None ''' e1 = pl[1] - pl[0] e2 = pl[2] - pl[0] p = QVector3D.crossProduct (dir_v, e2) p_dot_e1 = QVector3D.dotProduct (p, e1) if p_dot_e1 == 0: return None inv_p_dot_e1 = 1.0 / p_dot_e1 t = orig_v - pl[0] isect_u = inv_p_dot_e1 * QVector3D.dotProduct (p, t) if isect_u<0 or isect_u>1: return None q = QVector3D.crossProduct (t, e1) isect_v = inv_p_dot_e1 * QVector3D.dotProduct (q, dir_v) if isect_v<0 or isect_u + isect_v>1: return None isect_t = inv_p_dot_e1 * QVector3D.dotProduct (e2, q) return isect_t
def intersect(self, orig_v, dir_v, pl): ''' method performing ray-triangle intersection (Moller-Trumbore algorithm) @param orig QVector3D @param dir QVector3D @return isect_t float or None ''' e1 = pl[1] - pl[0] e2 = pl[2] - pl[0] p = QVector3D.crossProduct(dir_v, e2) p_dot_e1 = QVector3D.dotProduct(p, e1) if p_dot_e1 == 0: return None inv_p_dot_e1 = 1.0 / p_dot_e1 t = orig_v - pl[0] isect_u = inv_p_dot_e1 * QVector3D.dotProduct(p, t) if isect_u < 0 or isect_u > 1: return None q = QVector3D.crossProduct(t, e1) isect_v = inv_p_dot_e1 * QVector3D.dotProduct(q, dir_v) if isect_v < 0 or isect_u + isect_v > 1: return None isect_t = inv_p_dot_e1 * QVector3D.dotProduct(e2, q) return isect_t
def displayObjects (self): glClear (GL_COLOR_BUFFER_BIT) glEnable (GL_DEPTH_TEST) glDepthMask (GL_TRUE) #glEnable (GL_CULL_FACE) for poly in self.__poly_list: p0 = poly[0]; p1 = poly[1]; p2 = poly[2] glBegin (GL_TRIANGLES) col = .4 + 0.5*QVector3D.dotProduct (poly[3], self.__compo_light_pos) glColor3f (col, col, col) glVertex3f (p0.x(), p0.y(), p0.z()) glVertex3f (p1.x(), p1.y(), p1.z()) glVertex3f (p2.x(), p2.y(), p2.z()) glEnd ()
def displayObjects(self): glClear(GL_COLOR_BUFFER_BIT) glEnable(GL_DEPTH_TEST) glDepthMask(GL_TRUE) #glEnable (GL_CULL_FACE) for poly in self.__poly_list: p0 = poly[0] p1 = poly[1] p2 = poly[2] glBegin(GL_TRIANGLES) col = .4 + 0.5 * QVector3D.dotProduct(poly[3], self.__compo_light_pos) glColor3f(col, col, col) glVertex3f(p0.x(), p0.y(), p0.z()) glVertex3f(p1.x(), p1.y(), p1.z()) glVertex3f(p2.x(), p2.y(), p2.z()) glEnd()