我是OpenGL新手,并将其与python一起用于一个项目。我试图画多个东西只是创建一个缓冲区。我只是想知道这是否是一个好的方法,如果不是,我错过了什么。另外,我想知道多个缓冲区是否有用。此外,我在这段代码中没有看到glEnable(GL_MULTISAMPLE)的任何效果,这是为了改善视觉效果。当我试图关闭窗口时,程序显示有点滞后
我只是介绍这两个函数,而不是整个代码,只是为了保持简单。initialize()函数创建着色器程序并绑定缓冲区。在render()函数中,将执行实际的绘图操作。顶点数组包含圆的坐标,三角形数组包含三角形的坐标。我正在做三次抽签手术
VERTEX_SHADER = """
#version 330
layout (location = 0) in vec4 position;
uniform vec4 MVP;
void main() {
gl_Position = position;
}
"""
FRAGMENT_SHADER = """
#version 330
out vec4 FragColor;
uniform vec4 ourColor;
void main() {
FragColor = ourColor;
}
"""
#global varialbles
shaderProgram = None
VBO = None
triangles = []
vertices = []
def initialize():
global VERTEXT_SHADER
global FRAGMENT_SHADER
global shaderProgram
global triangles
global vertices
#compiling shaders
vertexshader = shaders.compileShader(VERTEX_SHADER, GL_VERTEX_SHADER)
fragmentshader = shaders.compileShader(FRAGMENT_SHADER, GL_FRAGMENT_SHADER)
#creating shaderProgram
shaderProgram = shaders.compileProgram(vertexshader, fragmentshader)
a = 5
vertices = []
for t in np.arange(-4,4,0.01):
x = a*math.cos(t)
y = a*math.sin(t)
vertices.append(x)
vertices.append(y)
vertices.append(0.0)
vertices = np.array(vertices, dtype=np.float32)
vertices = vertices/10
triangles = [-0.5, -0.5, 0.0,
0.5, -0.5, 0.0,
0.0, 0.5, 0.0]
triangles = np.array(triangles, dtype=np.float32)
VBO = glGenBuffers(1)
glBindBuffer(GL_ARRAY_BUFFER, VBO)
def render(window):
global shaderProgram
global triangles
global vertices
#accessing ourColor variable from shaderProgram
vertexColorLoc = glGetUniformLocation(shaderProgram, "ourColor")
#####draw figures in screen####
glClearColor(0, 0, 0, 1)
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
glEnable(GL_MULTISAMPLE);
glUseProgram(shaderProgram)
#draw 1 - circle with fill color
glBufferData(GL_ARRAY_BUFFER, vertices.nbytes, vertices, GL_STATIC_DRAW)
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, None)
glEnableVertexAttribArray(0)
glUniform4f(vertexColorLoc, 100/255.0, 28/255.0, 20/255.0, 1);
glDrawArrays(GL_TRIANGLE_FAN, 0, 800)
#draw 2 - circle border
glUniform4f(vertexColorLoc, 1, 0, 0, 1);
glLineWidth(3)
glDrawArrays(GL_LINES, 0, 800)
#draw 3 - triangle from different vertex array
glBufferData(GL_ARRAY_BUFFER, triangles.nbytes, triangles, GL_STATIC_DRAW)
glEnableVertexAttribArray(0)
glUniform4f(vertexColorLoc, 1, 1, 0, 1);
glDrawArrays(GL_TRIANGLES, 0, 3)
glUseProgram(0)
glfw.swap_buffers(window)
目前没有回答
相关问题 更多 >
编程相关推荐