您现在的位置是:主页 > news > dz网站制作/简述网站内容如何优化

dz网站制作/简述网站内容如何优化

admin2025/5/3 23:58:26news

简介dz网站制作,简述网站内容如何优化,建立网站多少钱,在哪个网站可以做试卷EmitVertex表示输出一个顶点,而EndPrimitive表示结束一个图元的输出,这是一对命令。只有几何着色器才有的命令。 几何着色器的图元通过两个特殊的内置函数生成的,即EmitVertex()和EndPrimitive() ,每个着色器请求都必须调用EmitV…

dz网站制作,简述网站内容如何优化,建立网站多少钱,在哪个网站可以做试卷EmitVertex表示输出一个顶点,而EndPrimitive表示结束一个图元的输出,这是一对命令。只有几何着色器才有的命令。 几何着色器的图元通过两个特殊的内置函数生成的,即EmitVertex()和EndPrimitive() ,每个着色器请求都必须调用EmitV…

EmitVertex表示输出一个顶点,而EndPrimitive表示结束一个图元的输出,这是一对命令。只有几何着色器才有的命令。

几何着色器的图元通过两个特殊的内置函数生成的,即EmitVertex()和EndPrimitive() ,每个着色器请求都必须调用EmitVertex(),以及必须必要的时候使用EndPrimitive()来产生图元,如果没有调用这些函数,那么就不会输出几何体,也就是剪裁/扩充的意思。如果多次调用那么就产生比输入更多的数据。

EndPrimitive结束以后,图元形式是什么呢?三角形、四边形?在几何着色器的布局layout中会指定输出的图元形式,如下:

static const char* pGS = "                                                          \n\
#version 330                                                                        \n\\n\
layout(points) in;                                                                  \n\
layout(triangle_strip) out;                                                         \n\
layout(max_vertices = 4) out;                                                       \n\\n\
uniform mat4 gVP;                                                                   \n\
uniform vec3 gCameraPos;                                                            \n\
uniform float gBillboardSize;                                                       \n\\n\
out vec2 TexCoord;                                                                  \n\\n\
void main()                                                                         \n\
{                                                                                   \n\vec3 Pos = gl_in[0].gl_Position.xyz;                                            \n\vec3 toCamera = normalize(gCameraPos - Pos);                                    \n\vec3 up = vec3(0.0, 1.0, 0.0);                                                  \n\vec3 right = cross(toCamera, up) * gBillboardSize;                              \n\\n\Pos -= right;                                                                   \n\gl_Position = gVP * vec4(Pos, 1.0);                                             \n\TexCoord = vec2(0.0, 0.0);                                                      \n\EmitVertex();                                                                   \n\\n\Pos.y += gBillboardSize;                                                        \n\gl_Position = gVP * vec4(Pos, 1.0);                                             \n\TexCoord = vec2(0.0, 1.0);                                                      \n\EmitVertex();                                                                   \n\\n\Pos.y -= gBillboardSize;                                                        \n\Pos += right;                                                                   \n\gl_Position = gVP * vec4(Pos, 1.0);                                             \n\TexCoord = vec2(1.0, 0.0);                                                      \n\EmitVertex();                                                                   \n\\n\Pos.y += gBillboardSize;                                                        \n\gl_Position = gVP * vec4(Pos, 1.0);                                             \n\TexCoord = vec2(1.0, 1.0);                                                      \n\EmitVertex();                                                                   \n\\n\EndPrimitive();                                                                 \n\
}                                                                                   \n\
";

以上代码在layout中设定输入是点,输出是三角形。

从顶点着色器输入的图元类型,映射到几何着色器的输入模式如下表所示(参考自OpenGL SuperBible: Comprehensive Tutorial and Reference, 6th Edition):
几何着色器输入模式     顶点着色器输入     顶点最少个数
points     GL_POINTS     1
lines     GL_LINES, GL_LINE_LOOP, GL_LINE_STRIP     2
triangles     GL_TRIANGLES, GL_TRIANGLE_FAN, GL_TRIANGLE_STRIP     3
lines_adjacency     GL_LINES_ADJACENCY,GL_LINE_STRIP_ADJACENCY     4
triangles_adjacency     GL_TRIANGLES_ADJACENCY,GL_TRIANGLE_STRIP_ADJACENCY     6

同时从几何着色器输出模式,则有3种:

    points
    line_strip
    triangle_strip

这3种模式基本包含了所有绘图类型,例如triangle_strip就包含了triangle这种特例。max_vertices表示从几何着色器最多输出顶点数目,如果超过设定的这个数目,OpenGL不会输出多余的顶点。