Beispiel #1
0
	def getMouseRay(self, x, y):
		if self._viewport is None:
			return numpy.array([0,0,0],numpy.float32), numpy.array([0,0,1],numpy.float32)

		p0 = openglHelpers.unproject(x, self._viewport[1] + self._viewport[3] - y, 0, self._modelMatrix, self._projMatrix, self._viewport)
		p1 = openglHelpers.unproject(x, self._viewport[1] + self._viewport[3] - y, 1, self._modelMatrix, self._projMatrix, self._viewport)
		if type(p0)!=type(None) and type(p1)!=type(None):
			p0 -= self._viewTarget
			p1 -= self._viewTarget
			return p0, p1
		else:
			return numpy.array([0,0,0],numpy.float32), numpy.array([0,0,1],numpy.float32)
Beispiel #2
0
	def getMouseRay(self, x, y):
		if self._viewport is None:
			return numpy.array([0,0,0],numpy.float32), numpy.array([0,0,1],numpy.float32)

		p0 = openglHelpers.unproject(x, self._viewport[1] + self._viewport[3] - y, 0, self._modelMatrix, self._projMatrix, self._viewport)
		p1 = openglHelpers.unproject(x, self._viewport[1] + self._viewport[3] - y, 1, self._modelMatrix, self._projMatrix, self._viewport)
		if type(p0)!=type(None) and type(p1)!=type(None):
			p0 -= self._viewTarget
			p1 -= self._viewTarget
			return p0, p1
		else:
			return numpy.array([0,0,0],numpy.float32), numpy.array([0,0,1],numpy.float32)
Beispiel #3
0
    def OnPaint(self, e):
        if self._animView is not None:
            self._viewTarget = self._animView.getPosition()
            if self._animView.isDone():
                self._animView = None
        if self._animZoom is not None:
            self._zoom = self._animZoom.getPosition()
            if self._animZoom.isDone():
                self._animZoom = None
        if self._objectShader is None:  #TODO: add loading shaders from file(s)
            if openglHelpers.hasShaderSupport():
                self._objectShader = openglHelpers.GLShader(
                    """
					varying float light_amount;

					void main(void)
					{
						gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
						gl_FrontColor = gl_Color;

						light_amount = abs(dot(normalize(gl_NormalMatrix * gl_Normal), normalize(gl_LightSource[0].position.xyz)));
						light_amount += 0.2;
					}
									""", """
					varying float light_amount;

					void main(void)
					{
						gl_FragColor = vec4(gl_Color.xyz * light_amount, gl_Color[3]);
					}
				""")
                self._objectShaderNoLight = openglHelpers.GLShader(
                    """
					varying float light_amount;

					void main(void)
					{
						gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
						gl_FrontColor = gl_Color;

						light_amount = 1.0;
					}
									""", """
					varying float light_amount;

					void main(void)
					{
						gl_FragColor = vec4(gl_Color.xyz * light_amount, gl_Color[3]);
					}
				""")
                self._objectLoadShader = openglHelpers.GLShader(
                    """
					uniform float intensity;
					uniform float scale;
					varying float light_amount;

					void main(void)
					{
						vec4 tmp = gl_Vertex;
						tmp.x += sin(tmp.z/5.0+intensity*30.0) * scale * intensity;
						tmp.y += sin(tmp.z/3.0+intensity*40.0) * scale * intensity;
						gl_Position = gl_ModelViewProjectionMatrix * tmp;
						gl_FrontColor = gl_Color;

						light_amount = abs(dot(normalize(gl_NormalMatrix * gl_Normal), normalize(gl_LightSource[0].position.xyz)));
						light_amount += 0.2;
					}
			""", """
				uniform float intensity;
				varying float light_amount;

				void main(void)
				{
					gl_FragColor = vec4(gl_Color.xyz * light_amount, 1.0-intensity);
				}
				""")
            if self._objectShader is None or not self._objectShader.isValid(
            ):  #Could not make shader.
                self._objectShader = openglHelpers.GLFakeShader()
                self._objectLoadShader = None

        self._init3DView()
        glTranslate(0, 0, -self._zoom)
        glRotate(-self._pitch, 1, 0, 0)
        glRotate(self._yaw, 0, 0, 1)
        glTranslate(-self._viewTarget[0], -self._viewTarget[1],
                    -self._viewTarget[2] - self._offset)

        self._viewport = glGetIntegerv(GL_VIEWPORT)
        self._modelMatrix = glGetDoublev(GL_MODELVIEW_MATRIX)
        self._projMatrix = glGetDoublev(GL_PROJECTION_MATRIX)

        glClearColor(1, 1, 1, 1)
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT
                | GL_STENCIL_BUFFER_BIT)

        if self._mouseX > -1:  # mouse has not passed over the opengl window.
            glFlush()
            n = glReadPixels(self._mouseX,
                             self.GetSize().GetHeight() - 1 - self._mouseY, 1,
                             1, GL_RGBA, GL_UNSIGNED_INT_8_8_8_8)[0][0] >> 8
            self._focusObj = self._object
            f = glReadPixels(self._mouseX,
                             self.GetSize().GetHeight() - 1 - self._mouseY, 1,
                             1, GL_DEPTH_COMPONENT, GL_FLOAT)[0][0]
            #self.GetTopLevelParent().SetTitle(hex(n) + " " + str(f))
            self._mouse3Dpos = openglHelpers.unproject(
                self._mouseX,
                self._viewport[1] + self._viewport[3] - self._mouseY, f,
                self._modelMatrix, self._projMatrix, self._viewport)
            self._mouse3Dpos -= self._viewTarget

        self._init3DView()
        glTranslate(0, 0, -self._zoom)
        glRotate(-self._pitch, 1, 0, 0)
        glRotate(self._yaw, 0, 0, 1)
        glTranslate(-self._viewTarget[0], -self._viewTarget[1],
                    -self._viewTarget[2] - self._offset)

        glStencilFunc(GL_ALWAYS, 1, 1)
        glStencilOp(GL_INCR, GL_INCR, GL_INCR)

        if self._object is not None:

            if self._object.isPointCloud():
                self._objectShaderNoLight.bind()
            else:
                self._objectShader.bind()

            brightness = 1.0
            """if self._focusObj == self._object:
				brightness = 1.2
			elif self._focusObj is not None or self._selectedObj is not None and self._object != self._selectedObj:
				brightness = 0.8"""

            if self._selectedObj == self._object or self._selectedObj is None:
                glStencilOp(GL_INCR, GL_INCR, GL_INCR)
                glEnable(GL_STENCIL_TEST)
            self._renderObject(self._object, brightness)

            glDisable(GL_STENCIL_TEST)
            glDisable(GL_BLEND)
            glEnable(GL_DEPTH_TEST)
            glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE)

            if self._object.isPointCloud():
                self._objectShaderNoLight.unbind()
            else:
                self._objectShader.unbind()

        self._drawMachine()
Beispiel #4
0
	def OnPaint(self,e):
		if self._animView is not None:
			self._viewTarget = self._animView.getPosition()
			if self._animView.isDone():
				self._animView = None
		if self._animZoom is not None:
			self._zoom = self._animZoom.getPosition()
			if self._animZoom.isDone():
				self._animZoom = None
		if self._objectShader is None: #TODO: add loading shaders from file(s)
			if openglHelpers.hasShaderSupport():
				self._objectShader = openglHelpers.GLShader("""
					varying float light_amount;

					void main(void)
					{
						gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
						gl_FrontColor = gl_Color;

						light_amount = abs(dot(normalize(gl_NormalMatrix * gl_Normal), normalize(gl_LightSource[0].position.xyz)));
						light_amount += 0.2;
					}
									""","""
					varying float light_amount;

					void main(void)
					{
						gl_FragColor = vec4(gl_Color.xyz * light_amount, gl_Color[3]);
					}
				""")
				self._objectShaderNoLight = openglHelpers.GLShader("""
					varying float light_amount;

					void main(void)
					{
						gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
						gl_FrontColor = gl_Color;

						light_amount = 1.0;
					}
									""","""
					varying float light_amount;

					void main(void)
					{
						gl_FragColor = vec4(gl_Color.xyz * light_amount, gl_Color[3]);
					}
				""")
				self._objectLoadShader = openglHelpers.GLShader("""
					uniform float intensity;
					uniform float scale;
					varying float light_amount;

					void main(void)
					{
						vec4 tmp = gl_Vertex;
						tmp.x += sin(tmp.z/5.0+intensity*30.0) * scale * intensity;
						tmp.y += sin(tmp.z/3.0+intensity*40.0) * scale * intensity;
						gl_Position = gl_ModelViewProjectionMatrix * tmp;
						gl_FrontColor = gl_Color;

						light_amount = abs(dot(normalize(gl_NormalMatrix * gl_Normal), normalize(gl_LightSource[0].position.xyz)));
						light_amount += 0.2;
					}
			""","""
				uniform float intensity;
				varying float light_amount;

				void main(void)
				{
					gl_FragColor = vec4(gl_Color.xyz * light_amount, 1.0-intensity);
				}
				""")
			if self._objectShader is None or not self._objectShader.isValid(): #Could not make shader.
				self._objectShader = openglHelpers.GLFakeShader()
				self._objectLoadShader = None

		self._init3DView()
		glTranslate(0,0,-self._zoom)
		glRotate(-self._pitch, 1,0,0)
		glRotate(self._yaw, 0,0,1)
		glTranslate(-self._viewTarget[0],-self._viewTarget[1],-self._viewTarget[2]-self._zOffset)

		self._viewport = glGetIntegerv(GL_VIEWPORT)
		self._modelMatrix = glGetDoublev(GL_MODELVIEW_MATRIX)
		self._projMatrix = glGetDoublev(GL_PROJECTION_MATRIX)

		glClearColor(1,1,1,1)
		glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT)

		if self._mouseX > -1: # mouse has not passed over the opengl window.
			glFlush()
			n = glReadPixels(self._mouseX, self.GetSize().GetHeight() - 1 - self._mouseY, 1, 1, GL_RGBA, GL_UNSIGNED_INT_8_8_8_8)[0][0] >> 8
			f = glReadPixels(self._mouseX, self.GetSize().GetHeight() - 1 - self._mouseY, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT)[0][0]
			#self.GetTopLevelParent().SetTitle(hex(n) + " " + str(f))
			self._mouse3Dpos = openglHelpers.unproject(self._mouseX, self._viewport[1] + self._viewport[3] - self._mouseY, f, self._modelMatrix, self._projMatrix, self._viewport)
			self._mouse3Dpos -= self._viewTarget
			self._mouse3Dpos[2] -= self._zOffset

		self._init3DView()
		glTranslate(0,0,-self._zoom)
		glRotate(-self._pitch, 1,0,0)
		glRotate(self._yaw, 0,0,1)
		glTranslate(-self._viewTarget[0],-self._viewTarget[1],-self._viewTarget[2]-self._zOffset)

		glStencilFunc(GL_ALWAYS, 1, 1)
		glStencilOp(GL_INCR, GL_INCR, GL_INCR)

		if self._object is not None:

			if self._object.isPointCloud() and openglHelpers.hasShaderSupport():
				self._objectShaderNoLight.bind()
			else:
				self._objectShader.bind()

			brightness = 1.0
			glStencilOp(GL_INCR, GL_INCR, GL_INCR)
			glEnable(GL_STENCIL_TEST)
			self._renderObject(self._object, brightness)

			glDisable(GL_STENCIL_TEST)
			glDisable(GL_BLEND)
			glEnable(GL_DEPTH_TEST)
			glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE)

			if self._object.isPointCloud() and openglHelpers.hasShaderSupport():
				self._objectShaderNoLight.unbind()
			else:
				self._objectShader.unbind()

		self._drawMachine()