您现在的位置是:主页 > news > dz网站制作/简述网站内容如何优化
dz网站制作/简述网站内容如何优化
admin2025/5/3 23:58:26【news】
简介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不会输出多余的顶点。