Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.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

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-几何体着色器 我在OpenGL C++编程中遇到了几何着色器。我想通过重复6次绘制一个旋转的墙来创建简单的立方体。这是我的顶点着色器(everyting在前言中有#版本330 core):_C++_Opengl_Geometry Shader - Fatal编程技术网

C++;,OpenGL-几何体着色器 我在OpenGL C++编程中遇到了几何着色器。我想通过重复6次绘制一个旋转的墙来创建简单的立方体。这是我的顶点着色器(everyting在前言中有#版本330 core):

C++;,OpenGL-几何体着色器 我在OpenGL C++编程中遇到了几何着色器。我想通过重复6次绘制一个旋转的墙来创建简单的立方体。这是我的顶点着色器(everyting在前言中有#版本330 core):,c++,opengl,geometry-shader,C++,Opengl,Geometry Shader,现在,几何体着色器: layout (triangles) in; layout (triangle_strip, max_vertices = 6) out; out vec4 pos; void main(void) { pos=vec4(1,1,1,1); for (int i = 0; i < 3; i++) { vec4 offset=vec4(i/2.,0,0,0); gl_Position = gl_in[i].gl_P

现在,几何体着色器:

layout (triangles) in;
layout (triangle_strip, max_vertices = 6) out;
out vec4 pos;
void main(void)
{
    pos=vec4(1,1,1,1);
    for (int i = 0; i < 3; i++)
    {
        vec4 offset=vec4(i/2.,0,0,0);
        gl_Position = gl_in[i].gl_Position+offset;
        EmitVertex();
    }
    EndPrimitive();
}

嗯,有一些垃圾,我还想在我的立方体中添加阴影,但我在发送坐标时遇到了问题。主要的问题是-这里我得到了我的缩放正方形(通过MVP矩阵),我甚至可以用基本界面(ROT矩阵)旋转它,但是当我取消注释我的“+偏移”行时,我得到了一些混乱。我应该怎么做才能使干净重复6次?

看起来错误就在这里,在您的几何体着色器中

gl_Position = gl_in[i].gl_Position+offset;
/* Passthrough vertex shader */
layout(location=0) in vec3 vertPos;
void main(){
    gl_Position = vec4(vertPos, 1.0);
}

/* Geometry shader */
...
    gl_Position = MVP * (ROT * (gl_in[i].gl_Position + offset));
    EmitVertex();
...
这将添加一个偏移量。。。但它会在剪辑空间中添加偏移,这可能不是您想要的。在顶点着色器中添加偏移,或在几何体着色器中执行透视投影

gl_Position = gl_in[i].gl_Position+offset;
/* Passthrough vertex shader */
layout(location=0) in vec3 vertPos;
void main(){
    gl_Position = vec4(vertPos, 1.0);
}

/* Geometry shader */
...
    gl_Position = MVP * (ROT * (gl_in[i].gl_Position + offset));
    EmitVertex();
...
另外,我注意到顶点着色器中有一些不寻常的地方

pos.x/=1.5;
pos.y/=1.5;
这是不寻常的,因为它是直接跟随矩阵乘法的线性变换。将MVP矩阵乘以以下矩阵可能更简单:

1/1.5     0     0     0
    0 1/1.5     0     0
    0     0     1     0
    0     0     0     1

这将用更少的着色器代码实现相同的结果。

没有什么私人问题,但请缩进您的代码LOL,即使我的朋友也这么说。我有特殊的脚本来删除代码中的所有缩进,我喜欢干净。真的吗?这一点都不干净!你只是不明白我的方式:(真的不确定你现在是否在玩,但可能是的。尝试删除所有的换行符,这会很漂亮。我现在给你解决了的标记,但我必须检查这个代码。谢谢!嗯,我想这只是如何使我的代码更简单的建议,但我仍在等待最终解决;)还有,我发现,通过键入gl_Position=vec4(vertPos,1.5),可以在顶点着色器中简单地调整向量的大小;