简介在尝试了JavaScriptWebGL画直线后,终于熟悉了,但还是有一些疑惑,所以记录在这里。为什么originMyGitHub顶点坐标范围要在-1.0到1.0之间?在画直线的例子中,如果根据Canvas的大小修改顶点坐标,发现大部分对应的点都看不到了。根据资料,每个顶点的x、y、z坐标应该在-1.0到1.0之间,超出这个坐标范围的顶点将不可见。原因是整个过程涉及多个坐标系的变换。多坐标系转换的好处是,一些操作或计算在特定的坐标系下才有意义,更方便容易。当一个顶点最终显示在屏幕上时,主要经历以下坐标系变换:局部空间中的局部坐标(LocalCoordinate)即为对象的起始坐标。然后通过模型矩阵变换,成为世界空间的世界坐标(WorldCoordinate)。这些坐标是相对于世界的全局原点的,它们将与相对于世界原点的其他对象一起放置。然后通过观察矩阵的变换,成为观察空间的观察坐标(ViewCoordinate),这样每一个坐标都是从相机或者观察者的角度来观察的。然后需要投影到裁剪空间的裁剪坐标(ClipCoordinate)上。裁剪坐标被处理为从-1.0到1.0的范围,并确定哪些顶点将出现在屏幕上。最后,裁剪坐标被转换成屏幕空间坐标(ScreenCoordinate),使用一个叫做ViewportTransform的过程。视口转换将-1.0到1.0范围内的坐标转换为glViewport函数定义的坐标范围。转换后的坐标将被发送到光栅化器以将它们转换为片段。多次缓冲的数据是被覆盖还是增量?buffer是分类型的,每次都尝试gl.ARRAY_BUFFER类型,同一个变量会覆盖之前的数据。以画直线为例,最后只画垂直直线:letvertices=[-0.5,0,0.0,0.5,0,0.0];//水平直线letvertices2=[0,0.5,0.0,0,-0.5,0.0];//垂直线setBuffers(glContext,vertices);setBuffers(glContext,vertices2);vertexAttribPointer一次解析顶点就够了吗?在频繁绘制的场景中,vertexAttribPointer是否需要每次都重新解析顶点,或者解析一次就足够了?根据画直线的例子,尝试发现函数必须首先保证数据已经被缓冲,然后函数才能有效解析。每次更新缓冲区,都需要重新解析才能生效。enableVertexAttribArray方法类似。useProgram函数激活一次就够了吗?useProgram是否需要在频繁绘制的场景中重新激活?根据画直线的例子尝试发现只需要一个激活,这里是例子。坐标系基于什么?基坐标系为右手坐标系。如下操作:沿正y轴伸展右臂,指向上方。大拇指指向右边。食指向上。中指向下弯曲90度。如果你做对了,你的拇指指向正x轴方向,你的食指指向正y轴方向,你的中指指向正z方向-轴。常见的变量类型有哪些?取自官方的WebGL1.0CardIndex。存储限定符const:编译时常量,或只读函数参数。attribute:用这个修饰的变量表示它用于顶点着色器和OpenGLES之间的链接。varying:用这个修饰的变量,表示它用于顶点着色器和片段着色器之间的链接。uniform:用这个修饰的变量代表一个全局唯一变量,可以在任何阶段访问,变量的值会一直保存。原始类型类型意思是没有返回值或空参数列表的void函数boolbooleanintsignedintegerfloatfloat标量vec2,vec3,vec4floatvectorof2/3/4componentsbvec2,bvec3,bvec42/3/4componentsofBooleanvectorivec2,ivec3,ivec42/3/4Componentsignedintegervectormat2,mat3,mat42x2,3x3,4x4浮点矩阵sampler2D2DtexturesamplerCubeStereomaptexture什么是内置输入/输出变量?取自官方的WebGL1.0CardIndex。Vertexshader特殊变量输入:描述单位或坐标系的变量highpvec4gl_Position;变换顶点位置裁剪坐标mediumpfloatgl_PointSize;变换点大小(仅点光栅化)像素片段着色器特殊变量输入:描述单位或坐标系的变量mediumpvec4gl_FragCoord;帧缓冲区窗口坐标中的片段位置boolgl_FrontFacing;片段属于前向原语boolmediopvec2gl_PointCoord;点内的片段位置(仅点栅格化)每个组件从0.0到1.0输出:变量描述单元或坐标系mediumpvec4gl_FragColor;片段颜色RGBA颜色mediumpvec4gl_FragData[n]颜色片段颜色RGBA附件nWebGL课程坐标系的颜色参考
