也许我已经成为网络上错误信息的牺牲品,但我认为这更可能只是因为我误解了某些东西.根据我到目前为止所学到的,range()是一个生成器,生成器可以用作迭代器.但是,这段代码:
myrange = range(10)
print(next(myrange))
Run Code Online (Sandbox Code Playgroud)
给我这个错误:
TypeError: 'range' object is not an iterator
Run Code Online (Sandbox Code Playgroud)
我在这里错过了什么?我期待这个打印0,并进入下一个值myrange.我是Python的新手,所以请接受我对这个相当基本的问题的道歉,但我无法在其他任何地方找到一个好的解释.
我已经使用OpenGL和C++开展了各种各样的演示项目,但他们都只是简单地渲染一个具有一些有趣效果的立方体(或类似的简单网格).对于像这样的简单场景,立方体的顶点数据可以存储在不优雅的全局数组中.我现在正在研究使用不同类型的多个对象渲染更复杂的场景.
我觉得很有道理,为不同类型的对象(不同类别Rock,Tree,Character,等),但我不知道如何干净地打破了数据和场景中的对象渲染功能.每个类都将存储自己的顶点位置数组,纹理坐标,法线等.但是我不确定在哪里放置OpenGL调用.我想我将有一个循环(在一个World或Scene类中)迭代场景中的所有对象并呈现它们.
渲染它们是否涉及在每个对象中调用一个render方法,(Rock::render(), Tree::render(),...)还是一个以对象作为参数的渲染方法(render(Rock), render(Tree),...)?后者看起来更干净,因为我不会在每个类中都有重复的代码(虽然可以通过从单个RenderableObject类继承来减轻),并且如果我想稍后移植到DirectX,它允许轻松替换render()方法.另一方面,我不确定我是否可以将它们分开,因为我可能还需要存储在对象中的OpenGL特定类型(例如顶点缓冲区).此外,将渲染功能与对象分开似乎有点麻烦,因为它必须调用许多Get()方法来从对象获取数据.最后,我不确定这个系统如何处理必须以不同方式绘制的对象(不同的着色器,传递给着色器的不同变量等).
这些设计中的一个明显优于其他设计吗?在哪些方面我可以改进它们以保持我的代码组织良好和高效?
我需要从另一个程序调用一个函数.如果其他程序是库,我可以简单地使用dlopen和dlsym来获取函数的句柄.不幸的是,其他程序是Unix可执行程序,并且将其构建为库不是一种选择.在可执行文件上尝试dlopen()会显示以下错误消息:
dlopen([...]/testprogram, 1): no suitable image found. Did find:
[...]/testprogram: can't map
这并不奇怪,因为dlopen用于库,而不是可执行文件.有没有办法让dlopen和dlsym使用可执行文件?如果没有,是否有另一种方法可以达到同样的目的?
architecture ×1
c++ ×1
dlopen ×1
executable ×1
game-engine ×1
generator ×1
iterator ×1
oop ×1
opengl ×1
python ×1
python-3.x ×1
typeerror ×1
unix ×1