Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Python OpenGL绘制多个对象并找到好的方法_Python_Opengl_Shader_Pyopengl - Fatal编程技术网

使用Python OpenGL绘制多个对象并找到好的方法

使用Python OpenGL绘制多个对象并找到好的方法,python,opengl,shader,pyopengl,Python,Opengl,Shader,Pyopengl,我是OpenGL新手,并将其与python一起用于一个项目。我试图画多个东西只是创建一个缓冲区。我只是想知道这是否是一个好的方法,如果不是,我错过了什么。另外,我想知道多个缓冲区是否有用。此外,我在代码中没有看到glEnable(GL_MULTISAMPLE)的任何效果,这是为了改善视觉效果。当我试图关闭窗口时,程序显示有点滞后 我只是介绍这两个函数,而不是整个代码,只是为了保持简单。函数的作用是:创建一个着色器程序并绑定一个缓冲区。在render()函数中,实际的绘图操作发生。顶点数组包含圆的

我是OpenGL新手,并将其与python一起用于一个项目。我试图画多个东西只是创建一个缓冲区。我只是想知道这是否是一个好的方法,如果不是,我错过了什么。另外,我想知道多个缓冲区是否有用。此外,我在代码中没有看到glEnable(GL_MULTISAMPLE)的任何效果,这是为了改善视觉效果。当我试图关闭窗口时,程序显示有点滞后

我只是介绍这两个函数,而不是整个代码,只是为了保持简单。函数的作用是:创建一个着色器程序并绑定一个缓冲区。在render()函数中,实际的绘图操作发生。顶点数组包含圆的坐标,三角形数组包含三角形的坐标。我正在做三次抽签手术

VERTEX_着色器=”“”
#330版
vec4位置的布局(位置=0);
均匀vec4-MVP;
void main(){
gl_位置=位置;
}
"""
片段_着色器=“”
#330版
out vec4 FragColor;
颜色均匀;
void main(){
FragColor=我们的颜色;
}
"""
#全局变量
着色器程序=无
VBO=无
三角形=[]
顶点=[]
def初始化():
全局VERTEXT_着色器
全局片段着色器
全局着色器程序
全局三角形
全局顶点
#编译着色器
vertexshader=shaders.compileShader(顶点着色器、GL顶点着色器)
fragmentshader=shaders.compileShader(片段着色器,GL片段着色器)
#创建着色器程序
shaderProgram=shaders.compileProgram(vertexshader,fragmentshader)
a=5
顶点=[]
对于np.arange中的t(-4,4,0.01):
x=a*math.cos(t)
y=a*math.sin(t)
顶点。追加(x)
顶点。追加(y)
顶点。追加(0.0)
顶点=np.array(顶点,dtype=np.float32)
顶点=顶点/10
三角形=[-0.5,-0.5,0.0,
0.5, -0.5, 0.0,
0.0, 0.5, 0.0]
三角形=np.array(三角形,dtype=np.float32)
VBO=glGenBuffers(1)
glBindBuffer(GL_数组_缓冲区,VBO)
def渲染(窗口):
全局着色器程序
全局三角形
全局顶点
#从着色器程序访问ourColor变量
vertexColorLoc=glGetUniformLocation(着色器程序,“ourColor”)
#####在屏幕上画图####
glClearColor(0,0,0,1)
glClear(GL_颜色_缓冲区_位| GL_深度_缓冲区_位)
glEnable(GL_多样本);
glUseProgram(着色器程序)
#绘制1-使用填充颜色绘制圆
glBufferData(GL\U数组\U缓冲区、顶点.n字节、顶点、GL\U静态\U绘制)
GLVertexAttributePointer(0,3,GL\u浮点,GL\u假,0,无)
GlenableVertexAttributeArray(0)
glUniform4f(vertexColorLoc,100/255.0,28/255.0,20/255.0,1);
GLDRAW阵列(GLU三角形风扇,0800)
#绘制2-圆形边框
glUniform4f(vertexColorLoc,1,0,0,1);
glLineWidth(3)
GLDrawArray(GLU线,0800)
#从不同的顶点阵列绘制3个三角形
glBufferData(GL_数组_缓冲区、triangles.n字节、三角形、GL_静态图)
GlenableVertexAttributeArray(0)
glUniform4f(vertexColorLoc,1,1,0,1);
GLDrawArray(GLU三角形,0,3)
glUseProgram(0)
glfw.交换缓冲区(窗口)

你的问题是什么?实际上我想知道我采取的方法是好是坏。他们意识到有几种方法可以做同样的事情。哪一个更专业?这不是个好主意。将数据上传到缓冲区是一个缓慢的操作,应该避免。或者为每个对象创建一个缓冲区,或者创建一个大缓冲区并将所有三个对象放入。只上传一次数据(除非更改)。关于问题:你必须关注一个问题。第一段已经问了三个不同(不相关)的问题。关于某事物是否是一个好主意的问题可能也是基于观点的。谢谢@BDL,所以我应该为所有对象创建一个顶点数组?关于这个问题,我很困惑这个方法是否好,是否可以在这里提问。我应该删除这个帖子吗?