def RenderToDrawBuffer_SceneBoxWire(self, vpMat: QMatrix4x4, boxSize: QVector3D): with uglw.VAOBound(self._vao_blank): with uglw.ProgBound(self._sceneBoxWireProgramInfo.__progHandle__): glUniform3fv(self._sceneBoxWireProgramInfo.boxSize, 1, utyp.GetTuple(boxSize)) glUniformMatrix4fv(self._sceneBoxWireProgramInfo.vpMat, 1, GL_FALSE, vpMat.data()) glDrawArrays(GL_LINES, 0, 24)
def RenderToDrawBuffer_VelocityLine(self, vpMat: QMatrix4x4, tex3DName_velocity: GLuint, cellScale: float, lineScale: float): with uglw.VAOBound(self._vao_blank): with uglw.TextureBound(GL_TEXTURE_3D, tex3DName_velocity): with uglw.ProgBound( self._velocityLineProgramInfo.__progHandle__): cellNx2 = self._fieldSize[0] * self._fieldSize[ 1] * self._fieldSize[2] * 2 glUniform1fv(self._velocityLineProgramInfo.lineScale, 1, lineScale) glUniform1fv(self._velocityLineProgramInfo.cellScale, 1, cellScale) glUniformMatrix4fv(self._velocityLineProgramInfo.vpMat, 1, GL_FALSE, vpMat.data()) glDrawArrays(GL_LINES, 0, cellNx2) glDrawArrays(GL_POINTS, 0, cellNx2)
def GetSceneBoxCursorIntersection(self, vpMat: QMatrix4x4, boxSize: QVector3D, winspaceCursorPos: QPoint, winspaceDimension: QPoint) -> QVector3D: """ :param winspaceCursorPos: lower-left corner as origin :return: 3D world position of cursor interaction """ # render depthImage and get depthValue ------------------------------------------------------------------------- self._depthInteractionBuffer.RequestBindFBO(winspaceDimension) glViewport(0, 0, winspaceDimension.x(), winspaceDimension.y()) with uglw.VAOBound(self._vao_blank): with uglw.ProgBound(self._sceneBoxSurfProgramInfo.__progHandle__): with uglw.EnableScope(GL_DEPTH_TEST): glClearBufferfv(GL_DEPTH, 0, (1., )) glUniform3fv(self._sceneBoxSurfProgramInfo.boxSize, 1, utyp.GetTuple(boxSize)) glUniformMatrix4fv(self._sceneBoxSurfProgramInfo.vpMat, 1, GL_FALSE, vpMat.data()) glDrawArrays(GL_TRIANGLES, 0, 3 * 2 * 6) winspaceCursorDepthValue = glReadPixels(winspaceCursorPos.x(), winspaceCursorPos.y(), 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT)[0][0] # print( winspaceCursorDepthValue ) glBindFramebuffer(GL_FRAMEBUFFER, 0) # unproject cursor into worldCoord ----------------------------------------------------------------------------- if winspaceCursorDepthValue == 1.0: raise ValueError # cursor ray hit background, no object to manipulate return self.GetUnprojection(winspaceCursorPos, winspaceCursorDepthValue, winspaceDimension, vpMat)