示例#1
0
    def set_3d(self):
        """ Configure OpenGL to draw in 3d.

        """
        width, height = self.get_size()
        gl.enable(gl.DEPTH_TEST)
        gl.viewport(0, 0, width, height)
        gl.matrix_mode(gl.PROJECTION)
        gl.load_identity()
        glu.perspective(90.0, width / float(height), 0.1, 60.0)
        gl.matrix_mode(gl.MODELVIEW)
        gl.load_identity()
        x, y = self.rotation
        gl.rotatef(x, 0, 1, 0)
        gl.rotatef(-y, math.cos(math.radians(x)), 0, math.sin(math.radians(x)))
        gl.translatef(*mul(self.position, -1))
示例#2
0
def setup_fog():
    """ Configure the OpenGL fog properties.

    """
    # Enable fog. Fog "blends a fog color with each rasterized pixel fragment's
    # post-texturing color."
    gl.enable(gl.FOG)
    # Set the fog color.
    gl.fogfv(gl.FOG_COLOR, (gl.float * 4)(0.5, 0.69, 1.0, 1))
    # Say we have no preference between rendering speed and quality.
    gl.hint(gl.FOG_HINT, gl.DONT_CARE)
    # Specify the equation used to compute the blending factor.
    gl.fogi(gl.FOG_MODE, gl.LINEAR)
    # How close and far away fog starts and ends. The closer the start and end,
    # the denser the fog in the fog range.
    gl.fogf(gl.FOG_START, 20.0)
    gl.fogf(gl.FOG_END, 60.0)
示例#3
0
def setup():
    """ Basic OpenGL configuration.

    """
    # Set the color of "clear", i.e. the sky, in rgba.
    gl.clear_color(0.5, 0.69, 1.0, 1)
    # Enable culling (not rendering) of back-facing facets -- facets that aren't
    # visible to you.
    gl.enable(gl.CULL_FACE)
    # Set the texture minification/magnification function to gl.NEAREST (nearest
    # in Manhattan distance) to the specified texture coordinates. gl.NEAREST
    # "is generally faster than gl.LINEAR, but it can produce textured images
    # with sharper edges because the transition between texture elements is not
    # as smooth."
    gl.tex_parameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST)
    gl.tex_parameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST)

    gl.active_texture(gl.TEXTURE1)
    gl.tex_envi(gl.TEXTURE_ENV, gl.TEXTURE_ENV_MODE, gl.DECAL)
    gl.tex_parameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST)
    gl.tex_parameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST)
    gl.active_texture(gl.TEXTURE0)

    setup_fog()
示例#4
0
def main():
	glfw.setErrorCallback(error_callback)

	glfw.init()
	glfw.windowHint(glfw.CONTEXT_VERSION_MAJOR, 3)
	glfw.windowHint(glfw.CONTEXT_VERSION_MINOR, 3)
	glfw.windowHint(glfw.OPENGL_PROFILE, glfw.OPENGL_CORE_PROFILE)
	# glfw.windowHint(glfw.RESIZABLE, gl.FALSE)
	glfw.windowHint(glfw.OPENGL_FORWARD_COMPAT, 1)

	window = glfw.createWindow(WIDTH, HEIGHT, "LearnOpenGL")

	if window is None:
		print('could not open window.')
		glfw.terminate()
		sys.exit()


	inputMap = InputMap()

	window.makeContextCurrent()
	window.setKeyCallback(inputMap.key_callback)
	window.setCursorPosCallback(inputMap.mouse_callback)
	#window.setScrollCallback(inputMap.scroll_callback)
	window.setInputMode(glfw.CURSOR, glfw.CURSOR_DISABLED)

	err = gl.getError()
	if err:
		print("WINDOW OPEN ERROR:", err)

	camera = Camera(position=Vec3(0.0, 0.0, 3.0))
	lastX = 400
	lastY = 300
	firstMouse = True
	deltaTime = 0.0
	lastFrame = 0.0

	gl.enable(gl.DEPTH_TEST)

	lampShaderProgram = Shader(LAMP_VERTEX_SHADER_SOURCE, LAMP_FRAGMENT_SHADER_SOURCE)
	lightingShaderProgram = Shader(LIGHTING_VERTEX_SHADER_SOURCE, LIGHTING_FRAGMENT_SHADER_SOURCE)
	lightingShaderProgram.use()

	lightVAO, containerVAO = gl.genVertexArrays(2)
	vbo = gl.genBuffers(1)[0]

	# 1. Bind Vertex Array Object
	gl.bindVertexArray(containerVAO)

    # 2. Copy our vertices array in a buffer for OpenGL to use
	gl.bindBuffer(gl.ARRAY_BUFFER, vbo)
	gl.bufferData(gl.ARRAY_BUFFER, vertices, gl.STATIC_DRAW)

	# Position attribute
	gl.vertexAttribPointer(0, 3, gl.FLOAT, gl.FALSE, sizeof(Vertex), Vertex.position.offset)
	gl.enableVertexAttribArray(0)

	# Normal attribute
	gl.vertexAttribPointer(1, 3, gl.FLOAT, gl.FALSE, sizeof(Vertex), Vertex.normal.offset)
	gl.enableVertexAttribArray(1)

	# 4. Unbind the VAO
	gl.bindVertexArray(0)


	# 1. Bind Vertex Array Object
	gl.bindVertexArray(lightVAO)
	
	# Position attribute
	gl.vertexAttribPointer(0, 3, gl.FLOAT, gl.FALSE, sizeof(Vertex), Vertex.position.offset)
	gl.enableVertexAttribArray(0)

	# 4. Unbind the VAO
	gl.bindVertexArray(0)

	# 4. unbind the vbo
	gl.bindBuffer(gl.ARRAY_BUFFER, 0)

	lightPos = Vec3(1.2, 1.0, 2.0)

	lastFrame = time.perf_counter()
	while not window.shouldClose():
		inputMap.begin_frame()
		glfw.pollEvents()
		currentFrame = time.perf_counter()
		deltaTime = currentFrame - lastFrame
		lastFrame = currentFrame
		input = inputMap.get_input()
		camera.processInput(input, 1.0/30.0)

		framebuffer_width, framebuffer_height = window.getFramebufferSize()
		gl.viewport(0, 0, framebuffer_width, framebuffer_height)
		gl.clearColor(0.2, 0.3, 0.3, 1.0)
		gl.clear(gl.COLOR_BUFFER_BIT|gl.DEPTH_BUFFER_BIT)

		lightingShaderProgram.use()
		lightingShaderProgram.uniforms.light.position = lightPos
		lightingShaderProgram.uniforms.viewPos = camera.position


		lightColor = Vec3(math.sin(currentFrame) * 2.0, math.sin(currentFrame) * 0.7, math.sin(currentFrame) * 1.3)
		diffuseColor = lightColor * 0.3
		ambientColor = diffuseColor * 0.2
		lightingShaderProgram.uniforms.light.ambient = ambientColor
		lightingShaderProgram.uniforms.light.diffuse = diffuseColor
		lightingShaderProgram.uniforms.light.specular = Vec3(1.0, 1.0, 1.0)

		lightingShaderProgram.uniforms.material.ambient = Vec3(1.0, 0.5, 0.31)
		lightingShaderProgram.uniforms.material.diffuse = Vec3(1.0, 0.5, 0.31)
		lightingShaderProgram.uniforms.material.specular = Vec3(0.5, 0.5, 0.5) # Specular doesn't have full effect on this object's material
		lightingShaderProgram.uniforms.material.shininess = 32.0

		# create transformations
		view = camera.getViewMatrix()
		projection = Mat4.Perspective(45.0, float(WIDTH) / float(HEIGHT), 0.1, 100.0)

		# assign the transformations
		lightingShaderProgram.uniforms.view = view
		lightingShaderProgram.uniforms.projection = projection

		# draw the container
		gl.bindVertexArray(containerVAO)
		model = Mat4.Identity()

		lightingShaderProgram.uniforms.model = model
		gl.drawArrays(gl.TRIANGLES, 0, 36)
		gl.bindVertexArray(0)

		# draw the lamp
		lampShaderProgram.use()
		
		lampShaderProgram.uniforms.view = view
		lampShaderProgram.uniforms.projection = projection

		model = Mat4.Translation(lightPos) * Mat4.Scale(0.2)

		lampShaderProgram.uniforms.model = model

		gl.bindVertexArray(lightVAO)
		gl.drawArrays(gl.TRIANGLES, 0, 36)
		gl.bindVertexArray(0)

		window.swapBuffers()

	lampShaderProgram.delete()
	lightingShaderProgram.delete()

	gl.deleteVertexArrays([containerVAO, lightVAO])
	gl.deleteBuffers([vbo])
示例#5
0
def main():
	glfw.setErrorCallback(error_callback)

	glfw.init()
	glfw.windowHint(glfw.CONTEXT_VERSION_MAJOR, 3)
	glfw.windowHint(glfw.CONTEXT_VERSION_MINOR, 3)
	glfw.windowHint(glfw.OPENGL_PROFILE, glfw.OPENGL_CORE_PROFILE)
	# glfw.windowHint(glfw.RESIZABLE, gl.FALSE)
	glfw.windowHint(glfw.OPENGL_FORWARD_COMPAT, 1)

	window = glfw.createWindow(WIDTH, HEIGHT, "LearnOpenGL")

	if window is None:
		print('could not open window.')
		glfw.terminate()
		sys.exit()

	window.makeContextCurrent()
	window.setKeyCallback(key_callback)

	err = gl.getError()
	if err:
		print("WINDOW OPEN ERROR:", err)

	gl.enable(gl.DEPTH_TEST)

	shaderProgram = Shader(VERTEX_SHADER_SOURCE, FRAGMENT_SHADER_SOURCE)
	shaderProgram.use()

	vao = gl.genVertexArrays(1)[0]
	vbo, ebo = gl.genBuffers(2)

	# 1. Bind Vertex Array Object
	gl.bindVertexArray(vao)

    # 2. Copy our vertices array in a buffer for OpenGL to use
	gl.bindBuffer(gl.ARRAY_BUFFER, vbo)
	gl.bufferData(gl.ARRAY_BUFFER, vertices, gl.STATIC_DRAW)

    # 2. Copy our index array in a buffer for OpenGL to use
	#gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, ebo)
	#gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, indices, gl.STATIC_DRAW)

	# Position attribute
	gl.vertexAttribPointer(0, 3, gl.FLOAT, gl.FALSE, sizeof(Vertex), Vertex.position.offset)
	gl.enableVertexAttribArray(0)
	# Color attribute
	# gl.vertexAttribPointer(1, 3, gl.FLOAT, gl.FALSE, sizeof(Vertex), Vertex.color.offset)
	# gl.enableVertexAttribArray(1)
	# TexCoord attribute
	gl.vertexAttribPointer(2, 2, gl.FLOAT, gl.FALSE, sizeof(Vertex), Vertex.texcoord.offset)
	gl.enableVertexAttribArray(2)

	# 4. unbind the vbo
	gl.bindBuffer(gl.ARRAY_BUFFER, 0)

	# 4. Unbind the VAO
	gl.bindVertexArray(0)

	# create the texture object, load the texture
    # Load and create a texture 
	texture1, texture2 = gl.genTextures(2)

    # Texture 1
	load_texture(texture1, 'learningopengl/resources/textures/container.jpg')

	# Texture 2
	load_texture(texture2, 'learningopengl/resources/textures/awesomeface.png')

	sb = True
	while not window.shouldClose():
		glfw.pollEvents()

		framebuffer_width, framebuffer_height = window.getFramebufferSize()
		gl.viewport(0, 0, framebuffer_width, framebuffer_height)
		gl.clearColor(0.2, 0.3, 0.3, 1.0)
		gl.clear(gl.COLOR_BUFFER_BIT|gl.DEPTH_BUFFER_BIT)

		shaderProgram.use()
		shaderProgram.uniforms.ourTexture1 = texture1
		shaderProgram.uniforms.ourTexture2 = texture2

		# create transformations
		view = Mat4.Translation(Vec3(0.0, 0.0, -3.0))
		projection = Mat4.Perspective(45.0, float(WIDTH) / float(HEIGHT), 0.1, 100.0)

		# assign the transformations
		shaderProgram.uniforms.view = view
		shaderProgram.uniforms.projection = projection

		gl.bindVertexArray(vao)

		for i, position in enumerate(cubePositions):
            # Calculate the model matrix for each object and pass it to shader before drawing
			model = Mat4.Translation(position)
			angle = 20.0 * i;
			model = model * Mat4.Rotation(angle, Vec3(1.0, 0.3, 0.5))
			shaderProgram.uniforms.model = model
			gl.drawArrays(gl.TRIANGLES, 0, 36)

		gl.bindVertexArray(0)

		window.swapBuffers()

	shaderProgram.delete()
	gl.deleteVertexArrays([vao])
	gl.deleteBuffers([vbo, ebo])
示例#6
0
def main():
	glfw.setErrorCallback(error_callback)

	glfw.init()
	glfw.windowHint(glfw.CONTEXT_VERSION_MAJOR, 3)
	glfw.windowHint(glfw.CONTEXT_VERSION_MINOR, 3)
	glfw.windowHint(glfw.OPENGL_PROFILE, glfw.OPENGL_CORE_PROFILE)
	glfw.windowHint(glfw.RESIZABLE, gl.FALSE)
	glfw.windowHint(glfw.OPENGL_FORWARD_COMPAT, 1)

	window = glfw.createWindow(WIDTH, HEIGHT, "LearnOpenGL")

	if window is None:
		print('could not open window.')
		glfw.terminate()
		sys.exit()


	inputMap = InputMap()

	window.makeContextCurrent()
	window.setKeyCallback(inputMap.key_callback)
	window.setCursorPosCallback(inputMap.mouse_callback)
	# window.setScrollCallback(inputMap.scroll_callback)
	window.setInputMode(glfw.CURSOR, glfw.CURSOR_DISABLED)

	err = gl.getError()
	if err:
		print("WINDOW OPEN ERROR:", err)

	camera = Camera(Vec3(0.0, 0.0, 3.0))
	lastX = 400
	lastY = 300
	firstMouse = True
	deltaTime = 0.0
	lastFrame = 0.0

	gl.enable(gl.DEPTH_TEST)

	shaderProgram = Shader(VERTEX_SHADER_SOURCE, FRAGMENT_SHADER_SOURCE)
	shaderProgram.use()

	obj_model = generate_model(load_obj_file(io.StringIO(CUBE_OBJ), ""))
	vao, vbo, ebo = load_model_data(obj_model)

	# create the texture object, load the texture
    # Load and create a texture 
	texture1, texture2 = gl.genTextures(2)

    # Texture 1
	load_texture(texture1, 'learningopengl/resources/textures/container.jpg')

	# Texture 2
	load_texture(texture2, 'learningopengl/resources/textures/awesomeface.png')

	while not window.shouldClose():
		inputMap.begin_frame()
		glfw.pollEvents()
		input = inputMap.get_input()
		camera.processInput(input, 1.0/30.0)

		# TODO: see http://www.glfw.org/docs/latest/window.html#window_fbsize
		framebuffer_width, framebuffer_height = window.getFramebufferSize()
		gl.viewport(0, 0, framebuffer_width, framebuffer_height)
		gl.clearColor(0.2, 0.3, 0.3, 1.0)
		gl.clear(gl.COLOR_BUFFER_BIT|gl.DEPTH_BUFFER_BIT)

		shaderProgram.use()
		shaderProgram.uniforms.ourTexture1 = texture1
		shaderProgram.uniforms.ourTexture2 = texture2

		# create transformations
		# view = Mat4.Translation(Vec3(0.0, 0.0, -3.0))
		view = camera.getViewMatrix()
		projection = Mat4.Perspective(45.0, float(WIDTH) / float(HEIGHT), 0.1, 100.0)

		# assign the transformations
		shaderProgram.uniforms.view = view
		shaderProgram.uniforms.projection = projection

		gl.bindVertexArray(vao)
		gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, ebo)

		for i, position in enumerate(cubePositions):
            # Calculate the model matrix for each object and pass it to shader before drawing
			model = Mat4.Translation(position)
			angle = 20.0 * i;
			model = model * Mat4.Rotation(angle, Vec3(1.0, 0.3, 0.5))
			shaderProgram.uniforms.model = model
			dc = obj_model['meshes'][0]['draw_call']
			gl.drawElements(gl.TRIANGLES, dc['count'], gl.UNSIGNED_INT, dc['start'] * obj_model['vertex_buffer']['stride'])

		gl.bindVertexArray(0)

		window.swapBuffers()

	shaderProgram.delete()
	gl.deleteVertexArrays([vao])
	gl.deleteBuffers([vbo, ebo])
示例#7
0
def main():
	glfw.setErrorCallback(error_callback)

	glfw.init()
	glfw.windowHint(glfw.CONTEXT_VERSION_MAJOR, 3)
	glfw.windowHint(glfw.CONTEXT_VERSION_MINOR, 3)
	glfw.windowHint(glfw.OPENGL_PROFILE, glfw.OPENGL_CORE_PROFILE)
	# glfw.windowHint(glfw.RESIZABLE, gl.FALSE)
	glfw.windowHint(glfw.OPENGL_FORWARD_COMPAT, 1)

	window = glfw.createWindow(WIDTH, HEIGHT, "LearnOpenGL")

	if window is None:
		print('could not open window.')
		glfw.terminate()
		sys.exit()


	inputMap = InputMap()

	window.makeContextCurrent()
	window.setKeyCallback(inputMap.key_callback)
	window.setCursorPosCallback(inputMap.mouse_callback)
	#window.setScrollCallback(inputMap.scroll_callback)
	window.setInputMode(glfw.CURSOR, glfw.CURSOR_DISABLED)

	err = gl.getError()
	if err:
		print("WINDOW OPEN ERROR:", err)

	camera = Camera(position=Vec3(0.0, 0.0, 3.0))
	lastX = 400
	lastY = 300
	firstMouse = True
	deltaTime = 0.0
	lastFrame = 0.0

	gl.enable(gl.DEPTH_TEST)

	lampShaderProgram = Shader(LAMP_VERTEX_SHADER_SOURCE, LAMP_FRAGMENT_SHADER_SOURCE)
	colorShaderProgram = Shader(COLORS_VERTEX_SHADER_SOURCE, COLORS_FRAGMENT_SHADER_SOURCE)
	colorShaderProgram.use()

	lightVAO, containerVAO = gl.genVertexArrays(2)
	vbo, ebo = gl.genBuffers(2)

	# 1. Bind Vertex Array Object
	gl.bindVertexArray(containerVAO)

    # 2. Copy our vertices array in a buffer for OpenGL to use
	gl.bindBuffer(gl.ARRAY_BUFFER, vbo)
	gl.bufferData(gl.ARRAY_BUFFER, vertices, gl.STATIC_DRAW)

	# Position attribute
	gl.vertexAttribPointer(0, 3, gl.FLOAT, gl.FALSE, sizeof(Vertex), Vertex.position.offset)
	gl.enableVertexAttribArray(0)

	# 4. Unbind the VAO
	gl.bindVertexArray(0)


	# 1. Bind Vertex Array Object
	gl.bindVertexArray(lightVAO)
	
	# Position attribute
	gl.vertexAttribPointer(0, 3, gl.FLOAT, gl.FALSE, sizeof(Vertex), Vertex.position.offset)
	gl.enableVertexAttribArray(0)

	# 4. Unbind the VAO
	gl.bindVertexArray(0)

	# 4. unbind the vbo
	gl.bindBuffer(gl.ARRAY_BUFFER, 0)



	# create the texture object, load the texture
    # Load and create a texture 
	# texture1, texture2 = gl.genTextures(2)

    # Texture 1
	# load_texture(texture1, 'learningopengl/resources/textures/container.jpg')

	# Texture 2
	# load_texture(texture2, 'learningopengl/resources/textures/awesomeface.png')

	

	# window.setFrameBufferSizeCallback(lambda: )
	# glfwSetFramebufferSizeCallback(window, framebuffer_size_callback)

	sb = True
	while not window.shouldClose():
		inputMap.begin_frame()
		glfw.pollEvents()
		input = inputMap.get_input()
		camera.processInput(input, 1.0/30.0)

		framebuffer_width, framebuffer_height = window.getFramebufferSize()
		gl.viewport(0, 0, framebuffer_width, framebuffer_height)
		gl.clearColor(0.2, 0.3, 0.3, 1.0)
		gl.clear(gl.COLOR_BUFFER_BIT|gl.DEPTH_BUFFER_BIT)

		colorShaderProgram.use()
		colorShaderProgram.uniforms.objectColor = Vec3(1.0, 0.5, 0.31)
		colorShaderProgram.uniforms.lightColor = Vec3(1.0, 0.5, 1.0)

		# create transformations
		# view = Mat4.Translation(Vec3(0.0, 0.0, -3.0))
		view = camera.getViewMatrix()
		projection = Mat4.Perspective(45.0, float(WIDTH) / float(HEIGHT), 0.1, 100.0)

		# assign the transformations
		colorShaderProgram.uniforms.view = view
		colorShaderProgram.uniforms.projection = projection

		# draw the container
		gl.bindVertexArray(containerVAO)
		model = Mat4.Identity()

		colorShaderProgram.uniforms.model = model
		gl.drawArrays(gl.TRIANGLES, 0, 36)
		gl.bindVertexArray(0)

		# draw the lamp
		lampShaderProgram.use()
		
		lampShaderProgram.uniforms.view = view
		lampShaderProgram.uniforms.projection = projection

		lightPos = Vec3(1.2, 1.0, 2.0)
		model = Mat4.Translation(lightPos) * Mat4.Scale(0.2)

		lampShaderProgram.uniforms.model = model

		gl.bindVertexArray(lightVAO)
		gl.drawArrays(gl.TRIANGLES, 0, 36)
		gl.bindVertexArray(0)

		window.swapBuffers()

	lampShaderProgram.delete()
	colorShaderProgram.delete()

	gl.deleteVertexArrays([containerVAO, lightVAO	])
	gl.deleteBuffers([vbo, ebo])