Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.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++ 为什么这个三角形条只画了屏幕的三分之一?_C++_Qt_Opengl - Fatal编程技术网

C++ 为什么这个三角形条只画了屏幕的三分之一?

C++ 为什么这个三角形条只画了屏幕的三分之一?,c++,qt,opengl,C++,Qt,Opengl,我正在尝试制作一个玩具,在整个屏幕上“绘制”碎片着色器。为此,我试图用一个三角形条“填充”屏幕。我之所以使用QT,是因为除了openGL渲染之外,我还想使用一个UI 我基于全屏三角形条带技术: 作为一种调试技术,我告诉片段着色器使每个像素都变成红色。现在,我的困惑是:为什么只有大约三分之一的屏幕变成红色 顶点着色器似乎没有覆盖整个屏幕空间。我能做些什么来解决这个问题 我目前的理论是,由于顶点数组设置的一些细节,三角形条没有正确渲染,但因为qt不允许我使用这种C风格,所以我无法一一遵循原始作者的

我正在尝试制作一个玩具,在整个屏幕上“绘制”碎片着色器。为此,我试图用一个三角形条“填充”屏幕。我之所以使用QT,是因为除了openGL渲染之外,我还想使用一个UI

我基于全屏三角形条带技术:

作为一种调试技术,我告诉片段着色器使每个像素都变成红色。现在,我的困惑是:为什么只有大约三分之一的屏幕变成红色

顶点着色器似乎没有覆盖整个屏幕空间。我能做些什么来解决这个问题

我目前的理论是,由于顶点数组设置的一些细节,三角形条没有正确渲染,但因为qt不允许我使用这种C风格,所以我无法一一遵循原始作者的代码


顶点属性指针,特别是步幅,是错误的。该数据包含一个三分量位置和两个附加浮动,但默认步幅假定为紧密填充。正确的代码应为:

m_program->setAttributeBuffer(m_posAttr, GL_FLOAT, 0, 3, 5*sizeof(float))

其中
5*sizeof(float)
是顶点起点和下一个顶点起点之间的偏移量。

顶点属性指针,特别是步幅,是错误的。该数据包含一个三分量位置和两个附加浮动,但默认步幅假定为紧密填充。正确的代码应为:

m_program->setAttributeBuffer(m_posAttr, GL_FLOAT, 0, 3, 5*sizeof(float))

其中
5*sizeof(float)
是顶点开始与下一个顶点开始之间的by偏移。

setAttributeBuffer是QT的一部分。。。您想让我在示例中包含QT的库代码吗?这是使用QT的OpenGL绑定及其库函数。正如我在最初的帖子中所说,我不能用C风格的方式做任何事情,因为它会模糊对一些C函数的访问。。。你的意思是我应该发布5*sizeof(float)作为步幅?如果它的元组是3,为什么步幅是5?它应该是
m\u program->setAttributeBuffer(m\u posAttr,GL\u FLOAT,0,3,5*sizeof(FLOAT))
。qt中的顺序是类型、偏移量、大小、步幅。必须设置步幅,因为每个新顶点在最后一个顶点之后开始5次浮动。数组包含位置和两个附加值,因此步幅必须手动设置。setAttributeBuffer是QT的一部分。。。您想让我在示例中包含QT的库代码吗?这是使用QT的OpenGL绑定及其库函数。正如我在最初的帖子中所说,我不能用C风格的方式做任何事情,因为它会模糊对一些C函数的访问。。。你的意思是我应该发布5*sizeof(float)作为步幅?如果它的元组是3,为什么步幅是5?它应该是
m\u program->setAttributeBuffer(m\u posAttr,GL\u FLOAT,0,3,5*sizeof(FLOAT))
。qt中的顺序是类型、偏移量、大小、步幅。必须设置步幅,因为每个新顶点在最后一个顶点之后开始5次浮动。数组包含位置和两个附加值,因此步幅必须手动设置。