def initialize(self): print("Initializing...") # shaders vsCode = """ in vec3 position; uniform mat4 projectionMatrix; uniform mat4 modelMatrix; void main() { gl_Position = projectionMatrix * modelMatrix * vec4(position, 1.0); } """ fsCode = """ out vec4 fragColor; void main() { fragColor = vec4(1.0, 1.0, 0.0, 1.0); } """ self.programRef = OpenGLUtils.initializeProgram(vsCode, fsCode) # render settings glClearColor(0.0, 0.0, 0.0, 1.0) glEnable(GL_DEPTH_TEST) # vao vaoRef = glGenVertexArrays(1) glBindVertexArray(vaoRef) # vertex attribute positionData = [[0.0, 0.2, 0.0], [0.1, -0.2, 0.0], [-0.1, -0.2, 0.0]] self.vertexCount = len(positionData) positionAttribute = Attribute("vec3", positionData) positionAttribute.associateVariable(self.programRef, "position") # uniforms mMatrix = Matrix.makeTranslation(0, 0, -1) self.modelMatrix = Uniform("mat4", mMatrix) self.modelMatrix.locateVariable(self.programRef, "modelMatrix") pMatrix = Matrix.makePersepctive() self.projectionMatrix = Uniform("mat4", pMatrix) self.projectionMatrix.locateVariable(self.programRef, "projectionMatrix")
def __init__(self, vertexShaderCode, fragmentShaderCode): self.programRef = OpenGLUtils.initializeProgram( vertexShaderCode, fragmentShaderCode) # store Uniform objects self.uniforms = {} # standard Uniform objects (matrices) self.uniforms["modelMatrix"] = Uniform("mat4", None) self.uniforms["viewMatrix"] = Uniform("mat4", None) self.uniforms["projectionMatrix"] = Uniform("mat4", None) # store OpenGL render settings self.settings = {} self.settings["drawStyle"] = GL_TRIANGLES
def initialize(self): print("initializing program...") vsCode = """ in vec3 position; uniform vec3 translation; void main() { vec3 pos = position + translation; gl_Position = vec4(pos.x, pos.y, pos.z, 1.0); } """ fsCode = """ uniform vec3 baseColor; void main() { gl_FragColor = vec4(baseColor.r, baseColor.g, baseColor.b, 1.0); } """ self.programRef = OpenGLUtils.initializeProgram(vsCode, fsCode) # render settings glClearColor(0.6, 0.6, 0.8, 1.0) # vertex array object vaoRef = glGenVertexArrays(1) glBindVertexArray(vaoRef) # set up attribute positionData = [[ 0.0, 0.2, 0.0], [ 0.2, -0.2, 0.0], [-0.2, -0.2, 0.0]] positionAttribute = Attribute("vec3", positionData) positionAttribute.associateVariable(self.programRef, "position") self.vertexCount = len(positionData) # set up uniforms self.translation1 = Uniform("vec3", [-0.5, 0.0, 0.0]) self.translation1.locateVariable(self.programRef, "translation") self.translation2 = Uniform("vec3", [ 0.5, 0.0, 0.0]) self.translation2.locateVariable(self.programRef, "translation") self.baseColor1 = Uniform("vec3", [1.0, 0.0, 0.0]) self.baseColor1.locateVariable(self.programRef, "baseColor") self.baseColor2 = Uniform("vec3", [0.0, 0.0, 1.0]) self.baseColor2.locateVariable(self.programRef, "baseColor") self.time = 0
def initialize(self): print("Initializing program...") vsCode = """ in vec3 position; uniform vec3 translation; void main() { vec3 pos = position + translation; gl_Position = vec4(pos.x, pos.y, pos.z, 1.0); } """ fsCode = """ out vec4 fragColor; void main() { fragColor = vec4(1.0, 1.0, 0.0, 1.0); } """ self.programRef = OpenGLUtils.initializeProgram(vsCode, fsCode) # vertex array object vaoRef = glGenVertexArrays(1) glBindVertexArray(vaoRef) # attributes positionData = [[ 0.0, 0.2, 0.0], [ 0.2,-0.2, 0.0], [-0.2,-0.2, 0.0]] positionAttribute = Attribute("vec3", positionData) positionAttribute.associateVariable(self.programRef, "position") self.vertexCount = len(positionData) # uniforms self.translationUniform = Uniform("vec3", [0.0, 0.0, 0.0]) self.translationUniform.locateVariable(self.programRef, "translation")
class Test(Base): def initialize(self): print("Initializing program...") vsCode = """ in vec3 position; uniform vec3 translation; void main() { vec3 pos = position + translation; gl_Position = vec4(pos.x, pos.y, pos.z, 1.0); } """ fsCode = """ out vec4 fragColor; void main() { fragColor = vec4(1.0, 1.0, 0.0, 1.0); } """ self.programRef = OpenGLUtils.initializeProgram(vsCode, fsCode) # vertex array object vaoRef = glGenVertexArrays(1) glBindVertexArray(vaoRef) # attributes positionData = [[ 0.0, 0.2, 0.0], [ 0.2,-0.2, 0.0], [-0.2,-0.2, 0.0]] positionAttribute = Attribute("vec3", positionData) positionAttribute.associateVariable(self.programRef, "position") self.vertexCount = len(positionData) # uniforms self.translationUniform = Uniform("vec3", [0.0, 0.0, 0.0]) self.translationUniform.locateVariable(self.programRef, "translation") def update(self): glUseProgram(self.programRef) glClear(GL_COLOR_BUFFER_BIT) # amount to move triangle distance = 0.01 if self.input.isKeyPressed("left"): self.translationUniform.data[0] -= distance if self.input.isKeyPressed("right"): self.translationUniform.data[0] += distance if self.input.isKeyPressed("down"): self.translationUniform.data[1] -= distance if self.input.isKeyPressed("up"): self.translationUniform.data[1] += distance self.translationUniform.uploadData() glDrawArrays(GL_TRIANGLES, 0, self.vertexCount)
class Test(Base): def initialize(self): print("Initializing...") # shaders vsCode = """ in vec3 position; uniform mat4 projectionMatrix; uniform mat4 modelMatrix; void main() { gl_Position = projectionMatrix * modelMatrix * vec4(position, 1.0); } """ fsCode = """ out vec4 fragColor; void main() { fragColor = vec4(1.0, 1.0, 0.0, 1.0); } """ self.programRef = OpenGLUtils.initializeProgram(vsCode, fsCode) # render settings glClearColor(0.0, 0.0, 0.0, 1.0) glEnable(GL_DEPTH_TEST) # vao vaoRef = glGenVertexArrays(1) glBindVertexArray(vaoRef) # vertex attribute positionData = [[0.0, 0.2, 0.0], [0.1, -0.2, 0.0], [-0.1, -0.2, 0.0]] self.vertexCount = len(positionData) positionAttribute = Attribute("vec3", positionData) positionAttribute.associateVariable(self.programRef, "position") # uniforms mMatrix = Matrix.makeTranslation(0, 0, -1) self.modelMatrix = Uniform("mat4", mMatrix) self.modelMatrix.locateVariable(self.programRef, "modelMatrix") pMatrix = Matrix.makePersepctive() self.projectionMatrix = Uniform("mat4", pMatrix) self.projectionMatrix.locateVariable(self.programRef, "projectionMatrix") def update(self): moveAmount = 0.005 turnAmount = 0.01 # global translations if self.input.isKeyPressed("z"): m = Matrix.makeTranslation(0, moveAmount, 0) self.modelMatrix.data = m @ self.modelMatrix.data if self.input.isKeyPressed("s"): m = Matrix.makeTranslation(0, -moveAmount, 0) self.modelMatrix.data = m @ self.modelMatrix.data if self.input.isKeyPressed("q"): m = Matrix.makeTranslation(-moveAmount, 0, 0) self.modelMatrix.data = m @ self.modelMatrix.data if self.input.isKeyPressed("d"): m = Matrix.makeTranslation(moveAmount, 0, 0) self.modelMatrix.data = m @ self.modelMatrix.data if self.input.isKeyPressed("w"): m = Matrix.makeTranslation(0, 0, moveAmount) self.modelMatrix.data = m @ self.modelMatrix.data if self.input.isKeyPressed("x"): m = Matrix.makeTranslation(0, 0, -moveAmount) self.modelMatrix.data = m @ self.modelMatrix.data # global rotations if self.input.isKeyPressed("a"): m = Matrix.makeRotationZ(turnAmount) self.modelMatrix.data = m @ self.modelMatrix.data if self.input.isKeyPressed("e"): m = Matrix.makeRotationZ(-turnAmount) self.modelMatrix.data = m @ self.modelMatrix.data # local translations if self.input.isKeyPressed("i"): m = Matrix.makeTranslation(0, moveAmount, 0) self.modelMatrix.data = self.modelMatrix.data @ m if self.input.isKeyPressed("k"): m = Matrix.makeTranslation(0, -moveAmount, 0) self.modelMatrix.data = self.modelMatrix.data @ m if self.input.isKeyPressed("j"): m = Matrix.makeTranslation(-moveAmount, 0, 0) self.modelMatrix.data = self.modelMatrix.data @ m if self.input.isKeyPressed("l"): m = Matrix.makeTranslation(moveAmount, 0, 0) self.modelMatrix.data = self.modelMatrix.data @ m # local rotations if self.input.isKeyPressed("u"): m = Matrix.makeRotationZ(turnAmount) self.modelMatrix.data = self.modelMatrix.data @ m if self.input.isKeyPressed("o"): m = Matrix.makeRotationZ(-turnAmount) self.modelMatrix.data = self.modelMatrix.data @ m # render glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) glUseProgram(self.programRef) self.projectionMatrix.uploadData() self.modelMatrix.uploadData() glDrawArrays(GL_TRIANGLES, 0, self.vertexCount) print(self.modelMatrix.data)
class Test(Base): def initialize(self): print("initializing program...") vsCode = """ in vec3 position; uniform vec3 translation; void main() { vec3 pos = position + translation; gl_Position = vec4(pos.x, pos.y, pos.z, 1.0); } """ fsCode = """ uniform vec3 baseColor; void main() { gl_FragColor = vec4(baseColor.r, baseColor.g, baseColor.b, 1.0); } """ self.programRef = OpenGLUtils.initializeProgram(vsCode, fsCode) # render settings glClearColor(0.6, 0.6, 0.8, 1.0) # vertex array object vaoRef = glGenVertexArrays(1) glBindVertexArray(vaoRef) # set up attribute positionData = [[ 0.0, 0.2, 0.0], [ 0.2, -0.2, 0.0], [-0.2, -0.2, 0.0]] positionAttribute = Attribute("vec3", positionData) positionAttribute.associateVariable(self.programRef, "position") self.vertexCount = len(positionData) # set up uniforms self.translation1 = Uniform("vec3", [-0.5, 0.0, 0.0]) self.translation1.locateVariable(self.programRef, "translation") self.translation2 = Uniform("vec3", [ 0.5, 0.0, 0.0]) self.translation2.locateVariable(self.programRef, "translation") self.baseColor1 = Uniform("vec3", [1.0, 0.0, 0.0]) self.baseColor1.locateVariable(self.programRef, "baseColor") self.baseColor2 = Uniform("vec3", [0.0, 0.0, 1.0]) self.baseColor2.locateVariable(self.programRef, "baseColor") self.time = 0 def update(self): glUseProgram(self.programRef) # clear the screen glClear(GL_COLOR_BUFFER_BIT) self.time += 1/60 # draw first triangle self.translation1.data[1] += 0.01 self.translation1.uploadData() self.baseColor1.uploadData() glDrawArrays(GL_TRIANGLES, 0, self.vertexCount) # draw second triangle self.baseColor2.data[2] = (sin(self.time) + 1) / 2 self.translation2.uploadData() self.baseColor2.uploadData() glDrawArrays(GL_TRIANGLES, 0, self.vertexCount)
def addUniform(self, dataType, variableName, data): self.uniforms[variableName] = Uniform(dataType, data)