2012-06-02 22 views
2

例如,如果我想要做这样的事情:如何在OpenGl中动态添加顶点?

createTriangle(1.0,1.0); // Create triangle at (1,1) 

我将如何做到这一点的代码?我很舒服硬编码,但如果我想动态地做到这一点,我怎么绑定和填充我的缓冲区,然后绑定它显示?我只是将顶点添加到一个大缓冲区?但是,我如何对不同的对象进行不同的转换?

编辑:为了澄清我问我如何创建顶点,然后将它们插入图形管道。

+0

你的意思是,VBO? – therealszaka

+1

我强烈建议[本电子书](http://www.arcsynthesis.org/gltut/)。 – 2012-06-02 20:56:56

+0

我建议你不要太担心这些问题。如果你想绘制三角形,只要画出它,如果你不需要,就不要制作超级超级体系结构。无论如何,你可以用这个三角形创建一个缓冲区,存储id,然后通过着色器翻译它。 – therealszaka

回答

0

你可能应该没有一个大的缓冲区,而是多个共享公共事物的缓冲区,比如着色器,转换等。保持缓冲区数量是一个使图形运行速度更快的好方法。

+0

嗯,但可以说我创建了3个三角形并将它们全部添加到相同的缓冲区中。我不能独立地改变每个三角形的位置吗? –

+0

呃,不 - 是的。您放置的每个绘图批次(很可能是每个顶点缓冲区)都将通过某种机制(三角形条,三角形扇等)来绘制为网格。每个顶点位置,每个顶点的正常位置,颜色纹理等都可以通过顶点着色器(做对象旋转,缩放,效果,纹理,光照等)单独进行更改。顶点着色器并不是真正的高层次,因为你可以写很多C++来改变三角形。但是参数可以通过着色器。 –

2

如果你想制作一款游戏,只需要做:)解决问题,没有一个,是一个问题!您是否计划过架构,并且有在场景中表示对象的想法及其组件(物理,图形)?如果是这样,你可能有代码的地方,你初始化场景(所以让我们在那里创建缓冲区),并让'引擎'对象(或只有你有主要/渲染/动画/循环)绘制所有这些。根据对象和你有多少个models/3d/2d,你可以将缓冲区的id存储在对象中(正在绘制,并且在渲染循环中,引擎对象绑定缓冲区),或者只是简单地存储在引擎中'对象。

一切都取决于你正在制作什么游戏以及你在什么规模上遇到什么问题(例如,在这种情况下,你可以创建一些更大的对象管理器,包含对象组等等)。问题是:do你真的需要这些吗?他们可能会犯更多的错误,并且需要更多的时间来维护代码,并且最终你将不得不再次编写这个模块。)不要让你不需要的结构。

有一条规则可以指导您:“尽可能简单,但不简单”。制作游戏,而不是你想要的架构,只是因为UDK有架构。

+0

嗯,你让我想,如果我想让一个单独的物体可以在将它们传递给顶点着色器之前转换它们的顶点?我正在努力如何整合创建顶点,然后将它们插入到图形管道中。 –