gpt4 book ai didi

opengl - PyOpenGL:glVertexPointer()偏移问题

转载 作者:行者123 更新时间:2023-12-03 00:21:27 24 4
gpt4 key购买 nike

我的顶点交错在 numpy 数组 (dtype = float32) 中,如下所示:... tu, tv, nx, ny, nz, vx, vy, vz, ...

渲染时,我像这样调用 gl*Pointer() (我之前已经启用了数组):

stride = (2 + 3 + 3) * 4
glTexCoordPointer( 2, GL_FLOAT, stride, self.vertArray )
glNormalPointer( GL_FLOAT, stride, self.vertArray + 2 )
glVertexPointer( 3, GL_FLOAT, stride, self.vertArray + 5 )
glDrawElements( GL_TRIANGLES, len( self.indices ), GL_UNSIGNED_SHORT, self.indices )

结果是没有任何渲染。但是,如果我组织数组,使顶点位置是第一个元素(... vx、vy、vz、tu、tv、nx、ny、nz、...),则在渲染时会获得正确的顶点位置,但纹理坐标和法线未正确渲染。

这让我相信我没有正确设置指针偏移。我应该如何设置呢?我在其他 C++ 应用程序中使用了几乎完全相同的代码,并且它有效。

最佳答案

在Python中,你不能进行指针算术。您尝试做的事情仅适用于 C/C++。

使用普通的 Python 列表:

>>> array = [1, 2, 3, 4]
>>> array
[1, 2, 3, 4]
>>> array + 2
Traceback (most recent call last):
File "<input>", line 1, in <module>
TypeError: can only concatenate list (not "int") to list

使用 numpy 数组:

>>> import numpy
>>> a = numpy.array([1, 2, 3])
>>> a + 2
array([3, 4, 5])

看看两者都没有达到您想要的效果:从某个位置开始数组。

我认为你基本上有两个选择:

  1. 不要使用交错数组。这确实有一个优点:当您只需要更新顶点(例如在骨骼动画中)时,不需要更新纹理坐标。
  2. 使用切片可能适合您。

像这样:

>>> a = numpy.array(range(10))
>>> a
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> a[3:]
array([3, 4, 5, 6, 7, 8, 9])

将其与正确的步幅相结合,您也许可以让它发挥作用。

关于opengl - PyOpenGL:glVertexPointer()偏移问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2683205/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com