Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.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
OpenGL,两个独立移动的对象_Opengl_Graphics - Fatal编程技术网

OpenGL,两个独立移动的对象

OpenGL,两个独立移动的对象,opengl,graphics,Opengl,Graphics,我需要在OpenGL中独立移动两个对象 这是顶点位置数组: 常量浮点顶点显示[]={ 0.25f,0.25f,0.0f,1.0f, 0.25f,-0.25f,0.0f,1.0f, -0.25f,-0.25f,0.0f,1.0f, 0.75f、0.45f、0.0f、1.0f、, 0.45华氏度,-0.45华氏度,0.0华氏度,1.0华氏度, -0.65f,-0.95f,0.0f,1.0f, }; 这将转到缓冲区,然后有以下命令绘制这些三角形: glDrawArraysGL_三角形,0,3*2; 以

我需要在OpenGL中独立移动两个对象

这是顶点位置数组: 常量浮点顶点显示[]={ 0.25f,0.25f,0.0f,1.0f, 0.25f,-0.25f,0.0f,1.0f, -0.25f,-0.25f,0.0f,1.0f, 0.75f、0.45f、0.0f、1.0f、, 0.45华氏度,-0.45华氏度,0.0华氏度,1.0华氏度, -0.65f,-0.95f,0.0f,1.0f, }; 这将转到缓冲区,然后有以下命令绘制这些三角形: glDrawArraysGL_三角形,0,3*2; 以下是负责旋转的部件: 330版 vec4位置的layoutlocation=0; 均匀浮动循环持续时间; 均匀浮动时间; 真空总管 { 浮动时间刻度=3.14159f*2.0f/循环持续时间; float currTime=modtime,loopDuration; vec4总偏移量=vec4 余弦时间*时间刻度*0.5f, sincurrTime*时间刻度*0.5f, 0.0f, 0.0f; gl_位置=位置+总偏移量; } 不幸的是,它并没有像我预期的那样工作——这些三角形并没有独立移动,而是像在玻璃板上一样连接在一起。我能做些什么来独立地平移和旋转它们?我如何使用GPU而不是CPU来实现这一点?

我认为您正在这样做。在这种情况下,我建议您从vertexPositions中删除最后12个浮点数,因此您可以得到以下结果:

const float vertexPositions[] = {
    0.25f, 0.25f, 0.0f, 1.0f,
    0.25f, -0.25f, 0.0f, 1.0f,
    -0.25f, -0.25f, 0.0f, 1.0f,
};
glUniform1f(loopDurationUnf, 2.5f);
glDrawArrays(GL_TRIANGLES, 0, 3);
并更改glDrawArraysGL_三角形,0,3*2;到glDrawArraysGL_三角形,0,3;。在显示函数中,在第一次调用glDrawArrays后粘贴以下内容:

const float vertexPositions[] = {
    0.25f, 0.25f, 0.0f, 1.0f,
    0.25f, -0.25f, 0.0f, 1.0f,
    -0.25f, -0.25f, 0.0f, 1.0f,
};
glUniform1f(loopDurationUnf, 2.5f);
glDrawArrays(GL_TRIANGLES, 0, 3);

这应该以两倍的速度绘制相同的三角形。

如果您希望他们独立行事,则必须向他们提供独立的数据。最好是将矩阵作为一致性传递给片段着色器。任何基本的opengl 3+在线教程都会涉及到这一点。@kkuryllo:必须为每个三角形设置统一的值,这样做的缺点是海报将无法再使用单个绘制调用绘制三角形。您可以使用其他顶点属性来指定每个三角形,甚至每个顶点的动画参数。您可以使用与在位置中传递相同的方式将它们传递到顶点着色器中,然后在着色器代码中使用它们,在该代码中应用动画逻辑来计算gl_位置。谢谢。我如何拆分gl_位置,使一个三角形前三个顶点显示偏移量1,第二个三角形显示偏移量2?我只看到gl_位置,它指的是所有顶点的位置。