标签: pyopengl

从Python调用OpenGL扩展

我在Ubuntu Natty上使用PyOpenGL 3.

我想使用这个glDrawElementsBaseVertex功能.

我可以看到它列在我的glxinfo输出中,所以我知道我的卡有它.

但是,我找不到如何实际调用它.如果我尝试使用它,当我import OpenGL.GL得到NameError它.(与它不同None).

python opengl pyopengl

2
推荐指数
1
解决办法
1013
查看次数

glsl pyOpenGL数组传递

我现在正在玩glsl.为此,我需要将一个数组从opengl代码传递给gsls,然后返回gsls计算出一个新的颜色.但不知何故,这对我不起作用.而不是获得整个阵列我总是只停留在第一个条目.你能帮我说一下我做错了什么吗?

import numpy as np
\\...
array = np.array([1.2,2.5,3.8,4.3,5.6, #....])
location = glGetUniformLocation(program,"arrayInShader")
glUniform1fv(location,1,array)
Run Code Online (Sandbox Code Playgroud)

并在着色器中:

uniform float arrayInShader[5];
varying vec3 color;
void main()
{
    color.r=arrayInShader[0]+arrayInShader[1];
    color.g=arrayInShader[2];
    color.b=arrayInShader[3]+arrayInShader[4];
}
Run Code Online (Sandbox Code Playgroud)

非常感谢!

glsl pyopengl

2
推荐指数
1
解决办法
899
查看次数

PyQt5 的 OpenGL 模块和版本控制问题(调用不正确的 _QOpenGLFunctions_(ver))

我一直在尝试编译PyQt5 helloGL 示例代码。当我尝试构建解决方案时,我得到:

Traceback (most recent call last):
  File "C:\Users\\-PATH-\trunk\view\test.py", line 142, in initializeGL
    self.gl = self.context().versionFunctions()
ImportError: No module named 'PyQt5._QOpenGLFunctions_4_3_Compatibility'
[Finished in 0.3s]
Run Code Online (Sandbox Code Playgroud)

在我的 PyQt5 文件夹中,我有:

_QOpenGLFunctions_4_1_Core.pyd
_QOpenGLFunctions_2_0.pyd
_QOpenGLFunctions_2_1.pyd
Run Code Online (Sandbox Code Playgroud)

作为我的不同版本的 QOpenGLFunctions 集。我试图搜索所有调用 versionFunctions() 的工作方式,以查看是否可以强制它使用 4_1_Core 文件,但无济于事。在几次重新启动后,我现在重新安装了 PyQt5 两次,看看它是否是奇怪的注册表恶作剧 - 这是在我确保更新我的图形驱动程序以便正确版本的 OpenGL 甚至在我的系统上之后(如果那是某种方式)导致问题)

PyOpenGL 已安装并更新,我也重新安装了它。

我的最终目标是将 OpenGL 渲染器嵌入到 Qt 窗口中,但我没有找到很多关于如何在 python 中执行此操作的示例。我使用 Vispy 有一段时间了,但也遇到了很多问题,因为他们的旧 Qt 示例也不再工作了。

python opengl pyqt pyopengl

2
推荐指数
1
解决办法
2276
查看次数

PyOpenGL 透视投影

我对 PyOpenGL 比较陌生,开始学习转换和模型、视图和投影矩阵。这很好,直到我编译并运行我的代码,然后发现我的对象突然消失了,老实说我不知道​​ OpenGL 是否正在剪辑我的对象,或者只是因为某些相机错误而没有显示它,但我相信它有一些东西与在我的代码中实现的投影矩阵有关,因为当我从我的代码中删除投影矩阵并运行我的程序时,除了我不会实现透视投影这一事实之外,一切都突然再次工作。无论如何,任何人都会非常感激:D

这是我的 PyOpenGL 代码。

import OpenGL, PIL, pygame, numpy, pyrr, math, sys, os

from OpenGL.GL import *
from PIL import Image
from pyrr import Matrix44, Vector4, Vector3, Quaternion

VERT_DATA = numpy.array([0.5, 0.5, 0.0,
                         0.5, -0.5, 0.0,
                        -0.5, -0.5, 0.0,
                        -0.5, 0.5, 0.0],
                        dtype="float32")

COLOR_DATA = numpy.array([1.0, 0.0, 0.0, 1.0,
                          0.0, 1.0, 0.0, 1.0,
                          0.0, 0.0, 1.0, 1.0,
                          0.0, 1.0, 1.0, 1.0],
                          dtype="float32")

TEXTURE_COORD_DATA = numpy.array([0.5, 0.5,
                                  0.5, -0.5,
                                 -0.5, -0.5,
                                 -0.5, 0.5],
                                 dtype="float32")

INDICES = numpy.array([0, …
Run Code Online (Sandbox Code Playgroud)

python opengl 3d pyopengl matrix

2
推荐指数
1
解决办法
2691
查看次数

运行pyOpenGL时出现NameError

我有兴趣设置一个环境来使用 pyOpenGL 编写粒子模拟器。我已经安装了 pyOpenGL。这是测试代码,只是为了确保 opengl 正常工作。

from OpenGL import *
from OpenGL.GLUT import *
from OpenGL.GLU import *


window = 0 
width, height = 500,400

def draw():
    glClear(GL_COLOR_BUFFER_BIT |GL_DEPTH_BUFFER_BIT)           
    glLoadIdentity()

glutDwapBuffers()                                           




#initialization
glutInit()
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_ALPHA | GLUT_DEPTH)
glutInitWindowSize(width,height)
glutInitWindowPosition(0,0)
window = glutCreateWindow(b"noobtute")
glutDisplayFunc(draw)                                                                       
glutIdleFunc(draw)  
glutMainLoop()              
Run Code Online (Sandbox Code Playgroud)

但是,当我从命令运行脚本时,出现以下错误:

NameError: name 'glClear' is not defined
GLUT Display callback <function draw at 0x0000000002F8CB70> with (),{} failed: 
returning None name 'glClear' is not defined
Run Code Online (Sandbox Code Playgroud)

我尝试重新安装 pyOpengl 但没有成功。

我在 Windows 8.1 上运行 Python …

python pyopengl nameerror python-3.x windows-8.1

1
推荐指数
1
解决办法
2094
查看次数

GL_QUAD绘制三角形

我正在尝试填充由4行生成的四边形GL_LINES.但是,当我尝试填充四边形时,它只填充三角形.这是绘制线条的代码:

def SurfaceContour(self, vertices, edges):
     glBegin(GL_LINES)
     for edge in edges:
         for vertex in edge:
             glColor3fv((1.0, 0.0, 0.0))
             glVertex3fv(vertices[vertex])
     glEnd()
Run Code Online (Sandbox Code Playgroud)

这是绘制填充四边形的代码:

def Surfaces(self,  vertices):
     glBegin(GL_QUADS)
     for i in range(4):
        glColor4f(1, 1, 1, 0.3)
        glVertex3fv(vertices[i ,:])
     glEnd()
Run Code Online (Sandbox Code Playgroud)

这是我传入的顶点矩阵:

[[   0.    -20.23    7.  ]
 [   0.    -20.23   -7.  ]
 [ 100.    -10.      5.  ]
 [ 100.    -10.     -5.  ]]
Run Code Online (Sandbox Code Playgroud)

这是我得到的结果:

python opengl pyopengl opengl-compat

1
推荐指数
1
解决办法
287
查看次数

如何在python PyOpenGL中旋转Rubik's Cube的切片?

我正在尝试用Python创建Rubik's Cube,我已经从视觉上表示了这个立方体。如何实施轮换方面有些困难。

我想我正在寻求有关如何执行此操作的反馈。我首先想到的是旋转每个多维数据集的顶点,但是运气不好。

我基本上想从一组多维数据集对象(大小不同)中选择一个切片,对每个对象执行旋转和平移。

import pygame
import random
from pygame.locals import *

from OpenGL.GL import *
from OpenGL.GLU import *

vertices = (
    (1, -1, -1),
    (1, 1, -1),
    (-1, 1, -1),
    (-1, -1, -1),
    (1, -1, 1),
    (1, 1, 1),
    (-1, -1, 1),
    (-1, 1, 1)
    )

edges = (
    (0,1),
    (0,3),
    (0,4),
    (2,1),
    (2,3),
    (2,7),
    (6,3),
    (6,4),
    (6,7),
    (5,1),
    (5,4),
    (5,7)
    )

surfaces = (
    (0,1,2,3),
    (3,2,7,6),
    (6,7,5,4),
    (4,5,1,0),
    (1,5,7,2),
    (4,0,3,6)
    )

colors = (
    (1,0,0), #Red
    (0,1,0), …
Run Code Online (Sandbox Code Playgroud)

python opengl pygame pyopengl python-3.x

1
推荐指数
1
解决办法
582
查看次数

有人可以帮助我解决PyCharm和导入模块错误吗?

所以我试图运行此:

import pygame
from pygame.locals import *
from OpenGL.GL import *
from OpenGL.GLU import *
Run Code Online (Sandbox Code Playgroud)

但是出现错误并说:

import pygame
ImportError: No module named pygame
Run Code Online (Sandbox Code Playgroud)

有时它说:

Traceback (most recent call last):
  File "/Users/Abood/Documents/lol.py", line 3, in <module>
    from OpenGL.GL import *
ModuleNotFoundError: No module named 'OpenGL.GL'
Run Code Online (Sandbox Code Playgroud)

但是,即使我尝试将PyCharm的“设置”更改为python 2.7.16并添加了Anaconda,这也适用于IDLE 2.7.16版和Sublime文本。

我今年13岁,对Coding还是陌生的,任何事情都会有所帮助。

谢谢

python macos pygame pyopengl pycharm

1
推荐指数
1
解决办法
34
查看次数

如何使用鼠标在PyOpenGL中控制相机?

我们需要在python中制作3D游戏,所以在我的研究中我发现了PyOpenGL.经过一段时间的游戏,我变得难以理解如何移动相机.给我一些示例代码和解释.

python opengl mouse view pyopengl

0
推荐指数
1
解决办法
4254
查看次数

OpenGL:如何将纹理应用于此立方体?

我正在尝试学习OpenGL,并且我已经经历了许多关于加载纹理的教程,但是每一个教程似乎都错过了最重要的一步:我如何实际在某些东西上放置纹理?

我正在使用Python,这是我加载纹理的函数:

def loadTexture():
    textureSurface = pygame.image.load('test_image.png')
    textureData = pygame.image.tostring(textureSurface,"RGBA",1)
    width = textureSurface.get_width()
    height = textureSurface.get_height()

    glEnable(GL_TEXTURE_2D)
    texid = glGenTextures(1)

    glBindTexture(GL_TEXTURE_2D, texid)
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, textureData)

    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT)
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT)
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST)
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST)

    return texid
Run Code Online (Sandbox Code Playgroud)

这是加载我的多维数据集的函数:

vertices = (
        # x  y  z
        ( 1,-1,-1),
        ( 1, 1,-1),
        (-1, 1,-1),
        (-1,-1,-1),
        ( 1,-1, 1),
        ( 1, 1, 1),
        (-1,-1, 1),
        (-1, 1, 1)
        )

edges = (
         (0,1),
         (0,3),
         (0,4), …
Run Code Online (Sandbox Code Playgroud)

python opengl pygame pyopengl

0
推荐指数
1
解决办法
4782
查看次数

OpenGL glUniform1i无效操作

因此,我一直在使用learnopengl.com书,并且一直无法让纹理单元工作.起初我在主循环中调用glGetUniform1i,就像他在书中所做的那样,但是建议(通过#learnprogramming IRC)将任何纹理操作限制在主循环之前.使用本书的代码时,问题是纹理不会像片段着色器中那样正确混合,只会渲染绑定到GL_TEXTURE_2D的第二个纹理(在本例中为"faceTexture").翻转渲染顺序可以渲染出先前使用的纹理.

但是,在主循环之前放置纹理单元代码会导致glUniform1i调用上的无效操作:

File "C:/Users/1117254/Documents/Python Experiments/OpenGL/OpenGL Testing/main.py", line 171, in main
     glUniform1i(wood_texture_loc, 0)
File "C:\Users\1117254\AppData\Local\Programs\Python\Python36\lib\site-packages\OpenGL\platform\baseplatform.py", line 402, in __call__
     return self( *args, **named )
File "errorchecker.pyx", line 53, in 
     OpenGL_accelerate.errorchecker._ErrorChecker.glCheckError (src\errorchecker.c:1218)
     OpenGL.error.GLError: GLError(
err = 1282,
description = b'invalid operation',
baseOperation = glUniform1i,
cArguments = (23724032, 0)
)
Run Code Online (Sandbox Code Playgroud)

我的错误似乎与frag着色器中统一变量的位置有关,但我不确定glGetUniformLocation给出的位置(似乎是23724032)是否有效.

下面的相关源以及顶点和片段着色器:

# Shader
shader = shader_loader.Shader("vertex.vs", "fragment.fs")

# Vertex Buffering
vao = GLuint(0)
vbo = GLuint(0)
ebo = GLuint(0)

glGenVertexArrays(1, vao)
glGenBuffers(1, vbo)
glGenBuffers(1, ebo)

glBindVertexArray(vao)
glBindBuffer(GL_ARRAY_BUFFER, vbo)
glBufferData(GL_ARRAY_BUFFER, …
Run Code Online (Sandbox Code Playgroud)

python opengl textures pyopengl

0
推荐指数
1
解决办法
879
查看次数

缓冲区是否在两个GLSL程序之间共享?

在我的应用程序中,我需要通过glUseProgram(程序)在两个GLSL程序之间切换.我想知道我是否写道:

glUseProgram(program1)
buf1 = glGenBuffers(1)
glUseProgram(program2)
buf2 = glGenBuffers(1)
Run Code Online (Sandbox Code Playgroud)

buf1和buf2可以是相同的值吗?即每个程序都有自己的缓冲区,还是共享缓冲区?

opengl pyopengl

-1
推荐指数
1
解决办法
39
查看次数

如何将 PYopenGL 写入 JPG 图像

我是 PYopenGL 的新手,实际上,我也不确定 PYopenGL 是否适合我的任务。

我有一个 Wavefront obj 文件格式的 3D 模型。我需要从给定的视图中获取模型的“打印屏幕”。换句话说,我需要渲染模型而不是显示模型将其保存为图像(jpg)

我的想法是使用 PYopenGL 来完成这项任务。但是,谷歌搜索我找不到如何做到这一点的建议或示例。因此,我开始怀疑 PYopenGL 是否适合我的任务。

你们中有人已经有了这样的东西,或者知道一个我可以用来学习的例子吗?

提前致谢。

python image pyopengl wavefront

-1
推荐指数
2
解决办法
5608
查看次数