コード例 #1
0
ファイル: RTEngine.py プロジェクト: iras/RayTracing_DebugTool
 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
コード例 #2
0
ファイル: RTEngine.py プロジェクト: iras/RayTracing_DebugTool
    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
コード例 #3
0
 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 ()
コード例 #4
0
    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()