这个函数可以在c++代码中设置点的大小 1应该是代表一个像素点的直径占一个像素
这是 顶点细分几何着色器中的内置变量 在glEnable开启GL_PROGRAM_POINT_SIZE状态之后才能在着色器中写入gl_PointSize 否则这个值就会被忽略 系统依然会使用 glPointSize()中的值
gl_PointCoord是片元着色器中的内部变量 包含了当前片元在点区域内的坐标信息 他的值也只对点的渲染有效 就是一个点内部的坐标 gl_FragCoord是渲染的所有片元或者说像素的坐标 gl_FragCoord坐标的单位是像素 gl_FragCoord是fragment shader的vec4类型的输入变量,只读 四个分量分别对应x, y, z和1/w x和y是当前片元的窗口相对坐标,不过它们不是整数,小数部分一直为0.5。x - 0.5和y - 0.5分别位于[0, windowWidth - 1]和[0, windowHeight - 1]内。windowWidth和windowHeight都以像素为单位,亦即用glViewPort指定的宽高。w即为乘过了投影矩阵之后点坐标的w(这里还要理解) gl_FragCoord.z / gl_FragCoord.w可以得到当前片元和camera之间的距离 例如点的大小1000 gl_FragColor = vec4(gl_PointCoord.x,0.0,0.0,1.0); 则: 这是一个巨大的点
一般点是方形的
float r = distance(gl_PointCoord, vec2(0.5, 0.5)); //根据距离设置片元 if(r < 0.5){ // 方形区域片元距离几何中心半径小于0.5,像素颜色设置红色 gl_FragColor = vec4(1.0,0.0,0.0,1.0); }else { // 方形区域距离几何中心半径不小于0.5的片元剪裁舍弃掉: discard;//这个函数很重要 就是像素的某一部分不显示 }gl_FragColor = texture(texture,gl_PointCoord); 其他什么加载纹理都一样 只需要将纹理坐标改成gl_PointCoord就行了
glPointParameterf(GLenum pname,GLint param) glPointParameteriv(GLenum pname,GLint *param) glPointParameterfv(GLenum pname,GLint *param) 设置点的参数pname的设置为param pname必须是: GL_POINT_SPRITE_COORE_ORIGIN gl_PointCoord.y在片元着色器中增加的方向(说白了 应该就是gl_PointCoord.y在一个点中是从下向上0-1还是从上向下0-1) param可以是:GL_LOWER_LEFT(从下到上)或者GL_UPPER_LEFT(这个是默认值, 从上到下)(或者是一个包含了这两个值之一得变量地址)也就是如果我们设置为GL_LOWER_LEFT则gl_PointCoord.y的增加方向就与gl_FragCoord.y相同 gl_FragCoord.y表示的是片元的实际窗口坐标 GL_POINT_FASE_THRESHOLD_SIZE 反走样的方式 param可以是:一个大于等于0的浮点数 或者是一个包含了数值的变量地址 (默认值是1.0) 如果点的大小比这个阙值更小 OpenGL就有权不再对这个点执行真正的反走样 而是直接将这个点的颜色和背景进行融混 OpenGL将不再对每个片元做一次光照的采样计算 而是对采样点的所有片元筒以进行光照计算 然后通过点的消隐因数来衰减alpha分量 (没懂)
这是默认情况下将一张贴图贴在一个点上 如果使用glPointParameteri(GL_POINT_SPRITE_COORD_ORIGIN, GL_LOWER_LEFT);
默认是1.0 数值必须大于0 如果数值大于1 则线段将被水平和垂直赋值宽度大小的次数 改变粗细的方向主要由该线段向什么方向延伸决定(如果向y方向延伸 则向x方向变粗)
face参数: 必须是 GL_FRONT_AND_BACK model参数: GL_POINT 点集 GL_LINE 轮廓线 GL_FILL 填充模式
判断多边形正面的判断方式 默认是GL_CCW 顺时针为正面 还要GL_CW