问题标签 [pyopengl]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
157 浏览

python - pyopengl 在运行时平均两个以上的纹理

我有一个 pyopengl 程序,它在运行时混合了一些图像,然后将它们应用于一些简单的几何图形,它可以工作,但是非常慢,比我知道的要慢。以下代码是我在运行时 image'n'_weight 变化时使用的代码。

...

...

有谁知道我应该怎么做才能加快速度

更新:我几乎可以肯定我应该与多纹理进行混合,有人对如何做到这一点有任何指示吗?

0 投票
1 回答
208 浏览

python - pyopengl 改变纹理的亮度

我有一个程序,我在其中渲染两个绑定到某些多边形的纹理并使用以下方法添加结果:

这工作得很好而且很快,但我想要一种在添加它们之前改变每个纹理的亮度的方法,比如增益值。这个值需要在运行时改变,所以我不能只将亮度烘焙到我的纹理中。

此外,我的程序的性质意味着直到运行时我才会知道要混合多少纹理,所以我需要一个可以处理 n 个纹理的解决方案。

有谁知道我会怎么做?

0 投票
0 回答
654 浏览

python - 在 wxPython OpenGL 上下文中启用多重采样

我正在尝试在我正在编写的 OpenGL 程序中启用多重采样。该应用程序将需要大量的 GUI,因此我使用的是 wxPython(我不太熟悉)而不是 PyGame (SDL)。

我真的需要对主要的 GLCanvas 进行硬件多重采样。我知道这在 wx 的 C++ 版本中是可能的,例如,如何为 wxWidgets OpenGL 程序启用多重采样?. 但是,我尝试了类似的方法,但它不适用于 wx Python

那么,我想知道的是,使用 wxPython 是否可以进行多重采样?

我已经想到的想法:

  • 在 wx.Frame 中使用 PyGame 上下文。使用 SDL 的硬件多重采样。不知道这是否真的有效。IIRC,调整 SDL OpenGL 上下文的大小会破坏它们的内容,这对这个应用程序来说有点问题。虽然 。. . 我想这可能是可行的。
  • 使用更高分辨率的 FBO 进行渲染,然后使用多重采样进行下采样。这个 。. . 工作,有点。但是超级采样比多重采样要慢得多,而且该技术对于 GL_LINE 之类的东西效果不佳。我已经尝试过这个解决方案。
  • 使用带有多重采样渲染目标的 FBO。这将涉及大量更改,并且会限制跨系统可移植性。
  • 理想情况下:使用 wxPython 的内置支持(如果存在)。

谢谢,
伊恩

0 投票
1 回答
1970 浏览

python - PyOpenGL、Pygame 和着色器似乎不合作

我一直在学习这个关于现代 OpenGL 编程的优秀教程,并且我正在慢慢适应它以在 PyOpenGL 和 pygame 上工作。但是,我最难获得使用透视几何的“微不足道”示例。代码如下所示:

根据我的理解,我应该得到一个红色方块来覆盖屏幕的右上象限,但我所做的一切似乎都不会影响完全灰色的屏幕。任何对错误的见解将不胜感激!

0 投票
1 回答
7534 浏览

opengl - OpenGL GLSL 采样器是否总是返回从 0.0 到 1.0 的浮点数?

我创建了几个浮点 RGBA 纹理......

然后我在着色器程序中交替地对它们进行双缓冲渲染/采样

...

...

...

注意检查sample.r是否大于 1.1。这永远不会发生。似乎texture2D片段着色器的调用或输出将 sample.rgb 的值钳制为 [0.0..1.0]。然而,我的理解是纹理本身具有完整的浮点类型。

有什么办法可以避免这种夹紧?

更新:

按照下面的说明,我已经修复glTexImage2D()了使用 GL_RGBA32F_ARB 的调用,但我仍然没有从采样器中得到大于 1.0 的值。

更新 2:

我刚刚尝试将纹理初始化为大于 1.0 的值,它可以工作!texture2d()返回初始值 > 1.0。所以也许这意味着问题出在片段着色器中,写入纹理?

更新 3:

我试过改变着色器,这很有效:

...

为什么使用自定义可变工作,但使用内置可变 gl_FrontColor/gl_Color 不起作用?

0 投票
1 回答
3410 浏览

python - 为什么这段代码不能在 pyopenGL 中显示我的纹理

我正在尝试为我进行多通道纹理工作,但现在我可以让简单的纹理工作,任何人都可以用下面的代码来解决问题。此示例仅将多边形显示为白色,而不是纹理。

……

……

0 投票
1 回答
811 浏览

python - pyopengl 设置多通道纹理混合模式

我试图让多重纹理工作并且到目前为止已经使用这个功能加载了多重纹理

我可以设置纹理以使用此代码

我的第一次尝试是这样的:

所以我渲染多边形两次并每次选择不同的纹理,这似乎与调用 glBindTexture(GL_TEXTURE_2D, n) 将选择相关纹理并渲染但本身没有混合,我只是查看渲染中最后选择的纹理。我试过添加 glEnable(GL_BLEND),但这似乎没有任何作用。

我想做的是将两个通道的像素加在一起

我该怎么办?

0 投票
3 回答
2820 浏览

python - 使用 GLSL 进行纹理处理(在 PyOpenGL 和 Pygame 中)

在对 Python 中的固定功能管道速度很慢感到沮丧之后,我开始研究着色器来绘制游戏的视差背景。但是,我找不到任何简单的方法来纹理绘制的顶点。

我目前有一个带有顶点数组的 PyOpenGL 顶点缓冲区对象,每个顶点都是这样的: [x, y, z, texX, texY, texID]

我使用 getAttribLocation/glEnableVertexAttribArray 将这些传递给着色器。我不确定它是否有效,因为着色器当前没有编译,但是在我添加我可能很糟糕的纹理代码之前,彩色顶点的工作一直正常。

我想要的是用着色器绘制一个纹理模型,具有多个纹理,但模型是平面背景。这是一个大的(1600x800 左右)图像,分为 256x256 纹理和四边形。(附带的问题:是有更多的小多边形更好,所以屏幕外的多边形更少,还是大多边形更好,所以纹理绑定更少?)

因为它是多个相关的纹理,所以我想在着色器中完成这一切,而不必为 CPU 上的每个块绑定纹理,所以我认为发送带有顶点数据的纹理数据是最好的,但我无法做到工作。

有人可以给我一个简单的例子,说明顶点和片段着色器相互作用以制作具有不同纹理的多个多边形吗?

编辑:着色器、vbo 和这里的东西:http://pastebin.com/3LaYiyvh着色器现在可以编译,但三角形是不可见的。

编辑:到了!不知道最后是什么破解了它,但这是程序: http: //pastebin.com/k87sfiEf 我认为这有点像,只要你在开始时绑定所有纹理,着色器就可以在它们之间交换。但我不确定。另外值得注意的是,将大背景分割成更小的块来绘制是个坏主意,因为在绘制时会交换纹理。浪费空间的大纹理很好,地图集更好!

0 投票
3 回答
11598 浏览

opengl - OpenGL中一个纹理有多少个mipmap

没关系,我是第一个创建纹理的人,我应该非常清楚我为它加载/生成了多少个 mipmap。我这样做是为了进行单元测试。似乎没有glGetTexParameter参数可以找出这一点。我最接近的是这样的:

无论如何,glGetTexLevelParameter()如果我使用 NVidia GPU,将为不存在的 mipmap 返回 0 宽度,但使用 Mesa,它会返回GL_INVALID_VALUE,这让我相信这是非常错误的事情

如何找出我填充了纹理的 mipmap 级别?

0 投票
1 回答
641 浏览

pyopengl - 找不到记录器“OpenGL.arrays.arraydatatype”的处理程序

在我的 Windows 7 机器上,我使用 pyinstaller 将我的 python 程序转换为 exe。

但是,在尝试运行 exe 时出现上述错误。

关于如何解决这个问题的任何想法?

谢谢