问题标签 [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 投票
1 回答
1007 浏览

opengl - openGL 纹理初学者问题 - 1D 纹理创建?

编辑

好的,我在纹理渲染中添加了一些更改,现在我发现它看起来不像我想要的那样,但在我尝试更改任何内容之前,我只想确保我走在正确的道路上。我要解决的问题是:我有 180000 个顶点。它们中的每一个都可以来自 190 个“类”之一。每个类可以在不同的时间分配不同的颜色。所以我试图创建一个具有 190 种颜色的纹理,并且对于 180000 个顶点中的每一个顶点都有一个对应类的纹理坐标。所以对于一些代码:

所以 textureIndexes 是一个来自 [0..1] 的浮点数组。len(textureIndexes) 是我正在使用的顶点数(180000)。对于纹理,textureArray 包含 190 * 3 个浮点数,对应于我想要的每个类的颜色的 RBG。

绘图部分:

那么这种方法看起来对吗?结果不是我所期望的,但这可能是我选择的颜色编码,如果主要方法是一个好的方法,我会进一步研究。我认为索引很可能是错误的。为了构建它们,我有一个数字在 0 到 190 之间的文件,对应于每个索引的类。因此,到目前为止,我的索引构建只是读取索引,然后为每个顶点读取 index / 190 以获得 [0..1] 中的数字

EDIT2 所以我接受了你的建议,索引 + 0.5 / 190 来生成我的索引。我正在打印索引数组的长度和值。它是 60000 并且都是介于 0 和 1 之间的数字,主要是在 0.3 和 0.95 之间。但我所有的顶点仍然是相同的颜色。所以我唯一没有检查的是一维纹理生成。也许这是我弄错的地方:

这就是我生成纹理数组的方式。这不是实际的解决方案,而是出于测试原因。所以我的纹理应该是 1/6 red - 1/6 ... 。纹理生成如上:

这个纹理生成正确吗?因为即使我的索引范围就像我之前提到的那样,我所有的顶点都具有纹理中第一个颜色的颜色。有趣的是,如果我在绘图中“省略” glBindBufferARB(GL_ARRAY_BUFFER_ARB, self.bufferTextureIndex) 并让法线代替纹理索引,我确实会得到一些不同的颜色,但 textureIndexes 似乎都指向第一种颜色从我的质地。我已经上传了两个示例文件,其中包含纹理索引和法线的实际值。不知道为什么第一个不起作用,但第二个似乎起作用(无法真正验证它们是否是正确的颜色,但至少它们是不同的)。 http://www.megafileupload.com/en/file/315895/textureIndices-txt.html http://www.megafileupload.com/en/file/315894/normalsTest-txt.html

编辑3

所以现在我的索引似乎起作用了。这是一个示例图像:

http://i.stack.imgur.com/yvlV3.png

然而奇怪的是,正如您所看到的,边界没有正确定义。这是否会受到我传递给纹理的某些参数的影响,或者我应该三重检查我的 textureIndex 创建吗?

0 投票
1 回答
1051 浏览

opengl - glTexCoordPointer 似乎没有效果

我仍在尝试掌握使用纹理,现在我正在尝试使用 glTexCoordPointer 为每个顶点赋予特定于其类的颜色。我做了一些检查,情况如下:

所以我为顶点、法线、三角形和纹理索引生成我的 VBO。现在我想检查我得到的纹理索引值,所有这些值都来自区间 [0..1] 和纹理索引的长度 = 长度(顶点)/3。

对于纹理,我生成一个 textureArray,它是一个包含 190 个 [x,x,x] rgb 值的向量。我什至把它分成6等份。所以前 1/6 条目是一种颜色,然后是另一种颜色,以此类推,只是为了简化我的测试。

现在画图:

但是所有的点都变成了相同的颜色,对应于我纹理的前 1/6 部分的颜色。任何输入将不胜感激。

0 投票
1 回答
781 浏览

opengl - OpenGL着色器问题

我有一个正在运行的程序,它使用 glVertexPointer、glNormalPointer 等来绘制大量元素。这工作在 30 FPS 左右。现在我已经达到了集成着色器将是一个可行的选择的地步(每个顶点都需要有一个基于特定类计算的颜色)。1. 现在我的第一个问题是使用着色器对我的 FPS 有多大影响?我当前的实现(我 99.99% 至少在某些方面存在缺陷,将在下面发布代码)将 FPS 大幅降低到 3 FPS。如果这种 FPS 下降是正常的,那么就没有必要与之抗争了。

现在来看一些代码。我的着色器看起来像:

所以我返回位置和法线,因为稍后我将使用它们来传递实际的顶点和法线。从这里我有一个问题。如果没有着色器,我只需使用 VertexPointer 和 NormalPointer 传递法线和顶点数组,其余部分由 OpenGL 处理。2. 我已经读到着色器内置了 gl_Vertex 和 gl_Normal 属性。如何将值从我的 VBO 传递给这些?正如您所看到的,目前我将顶点位置传递给属性位置,将法线传递给法线,但我没有对法线做任何事情,因为我不知道是什么。

绘图是这样完成的:

这里 self.bufferVertices,self.bufferNormals 是 VBO 包含我的顶点和法线。self.triangles 索引数组。到目前为止,它绘制了正确的索引,但如前所述,我的 FPS 非常低。

  1. 这个绘图顺序正确吗?还有其他东西在启用时可能与着色器冲突吗?( GL_LIGHTNING,GL_DEPTH_TEST等等)
0 投票
1 回答
1757 浏览

opengl - OpenGL - 纹理如何影响阴影/闪电?

所以问题是:当我从 ColorPointers 切换到 Textures 时,闪电/阴影效果似乎大大减少了。我发现但没有做那么多的一些解决方案是设置 glLightModeli( GL_LIGHT_MODEL_COLOR_CONTROL, GL_SEPARATE_SPECULAR_COLOR )。我还能做些什么来获得更接近没有纹理的效果吗?

这就是我初始化灯光/场景的方式:

而对于实际绘图。

对于每个顶点的颜色,我使用法线作为虚拟颜色,因为这只是整合纹理的一个步骤。纹理是自生成的,基本上值来自:

实际创作:

问候, 博格丹

编辑

好的,我接近了我想要的效果,但这纯粹是通过在下一部分中尝试 glColor4f 与材料和光照的不同组合。

是否有某种公式说明所有这些(glColor4f + 材质 + 灯光 + 纹理)如何影响最终的颜色/阴影/光泽效果?

0 投票
2 回答
6022 浏览

python - 尝试在 pyOpenGL 中绘制一个简单的正方形

我正在尝试使用 pyopengl 自学 OpenGL,我对尝试渲染以原点为中心的简单 2D 正方形感到震惊。每当我将数组值设置为大于或等于 1 时,形状就会占据整个屏幕,就好像我只查看轴的一小部分一样。我试图以用 pyopengl 重写的 NeHe 教程为基础,但我找不到我做错了什么。

0 投票
2 回答
1212 浏览

python - 从 Python 调用 OpenGL 扩展

我在 Ubuntu Natty 上使用 PyOpenGL 3。

我想使用该glDrawElementsBaseVertex功能。

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

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

0 投票
1 回答
660 浏览

python - 在 PyOpenGL 调用中使用缓冲区的偏移量

在 OpenGL 中,indices参数 forglDrawElements有两种不同的含义,具体取决于您是否使用GL_ELEMENT_ARRAY_BUFFER

如果您有一个 VBO 界限,那么它是从该缓冲区开始的偏移量,而不是缓冲区本身。

使用 PyOpenGL 时,如何指定在glDrawElements调用中开始的偏移量?如何在glMultiDrawElements调用中指定多个起始偏移量?

0 投票
1 回答
1318 浏览

python - 如何在桌面上绘制 PyOpengl 或 pyglet?

我正在编写一个应用程序,它希望使用 OpenGL 在 Windows 7 桌面上绘制基本的多边形和椭圆。根据this previous question,这可能是通过获取桌面的窗口句柄,我知道该怎么做。 在没有窗口的windows桌面上绘制OpenGL

但是,我有两个问题:

  1. 您实际上在哪里告诉 OpenGL 要绘制到哪个窗口?我一直在查看示例 1,但我根本无法弄清楚它到底在哪里通过 openGL 的 hwnd。我是否给 openGL 一个窗口句柄或设备上下文?

  2. 是否可以使用 PyOpenGL 或 Pyglet 做到这一点?还是我必须用 C 编写它,然后将代码包装在 ctypes 中?

0 投票
1 回答
286 浏览

opengl - PyOpenGL windows 操作系统问题

所以我在 Mac OS 上开发了一个应用程序,现在我正试图在一台装有 windows XP 的机器上测试它。现在这在这里不起作用,第一个问题是 glGenBuffer 和 glGenBuffer 给出了 NullFunctionException。所以我试图检查那台机器上的 OpenGL 版本,但 glGetString(GL_VERSION) 返回无。问题是我对我正在测试的机器了解不多。如果我运行 dxdiag direct X,则对有关视频卡的所有详细信息仅返回 n/a。

0 投票
3 回答
486 浏览

python - 一起使用pyglet和pyopengl的问题

我有以下代码:

当我使用 pyglet 的 opengl 绑定时,它按预期工作。但是,当我使用 pyopengl 时,我只看到一团糟。