Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在OpenGl中动态添加顶点?_C++_Opengl - Fatal编程技术网

C++ 如何在OpenGl中动态添加顶点?

C++ 如何在OpenGl中动态添加顶点?,c++,opengl,C++,Opengl,例如,如果我想做这样的事情: createTriangle(1.0,1.0); // Create triangle at (1,1) 我将如何在代码中执行此操作?我很喜欢硬编码,但如果我想动态地进行,我如何绑定和填充缓冲区,然后在显示时绑定它?我是否只是将顶点添加到一个大缓冲区?但是我如何在不同的对象上进行不同的转换呢 编辑:为了澄清这一点,我询问如何创建顶点,然后将它们插入图形管道 你可能不应该有一个大的缓冲区,而应该有多个共享公共事物的缓冲区,例如着色器、变换等。但是,减少缓冲区的数量是

例如,如果我想做这样的事情:

createTriangle(1.0,1.0); // Create triangle at (1,1)
我将如何在代码中执行此操作?我很喜欢硬编码,但如果我想动态地进行,我如何绑定和填充缓冲区,然后在显示时绑定它?我是否只是将顶点添加到一个大缓冲区?但是我如何在不同的对象上进行不同的转换呢


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

你可能不应该有一个大的缓冲区,而应该有多个共享公共事物的缓冲区,例如着色器、变换等。但是,减少缓冲区的数量是让图形运行得更快的一个好方法。

如果你想制作一个游戏,只需这样做:)解决问题,而没有问题,是一个问题!您是否规划了架构,是否有在场景中表示对象及其组件(物理、图形)的想法?如果是这样的话,您可能在代码中有位置,在那里初始化场景(让我们在那里创建缓冲区),并让“引擎”对象(或者在您有main/render/animate/loop的地方)绘制所有场景。根据对象以及您拥有的模型/3d/2d数量,您可以将缓冲区id存储在对象中(正在绘制的对象,渲染循环中的“引擎”对象绑定缓冲区),或者仅将其存储在“引擎”对象中

一切都取决于你在玩什么游戏,你面临什么问题,在什么程度上(例如,在这种情况下,您可以创建一些更大的对象管理器,包含多组对象等。问题是:您真的需要这些吗?它们可能会产生更多的错误,维护代码需要更多的时间,毕竟您必须再次编写此模块。)不要创建不需要的结构


有一条规则可以指导你:“让事情尽可能简单,但不要简单”。并且制作游戏,而不是你想要的架构,仅仅因为UDK有一个。

我强烈建议。我建议你不要太担心这些问题。如果你想画三角形,就画它,如果你真的不需要,就不要做超级优步架构。无论如何,你可以用这个三角形创建一个缓冲区,存储id,然后通过着色器,翻译它。大缓冲区并不像人们想象的那样好。我不知道细节,但问题与HDD/RAM和碎片一样,只是在图形卡上。@Dupadupa我想做的是在我想要的时间和地点创建对象,最终制作一个游戏。@Radek'daknok'Slupik你知道我在这本书的哪里可以找到信息吗与我的问题相关的信息?嗯,但假设我创建了3个三角形,并将它们全部添加到同一个缓冲区中。我将无法独立更改每个三角形的位置,是吗?嗯,不是,是的。要渲染的每个绘制批次(很可能是每个顶点缓冲区)将通过某种机制绘制为网格(三角形条带、三角形扇形等-谷歌搜索)。每个顶点位置、每个顶点法线位置、颜色纹理等都可以通过顶点着色器单独更改(用于对象旋转、缩放、效果、纹理、照明等)但是,顶点着色并不是真正的高层次,因为你可以写很多C++来改变三角形。参数可以通过着色器。HM让我思考,如果我想让单个对象能够在把它们传递到顶点着色器之前转换它们的顶点?我在努力整合如何创建VRT。ICE,然后将其插入图形管道。