Opengl es GLSL顶点着色器具有大gl.PointSize的gl.POINTS的gl_位置

Opengl es GLSL顶点着色器具有大gl.PointSize的gl.POINTS的gl_位置,opengl-es,glsl,webgl,rendering,Opengl Es,Glsl,Webgl,Rendering,我正在尝试用大gl_PointSize渲染很多点。Looks顶点着色器将自动放弃gl.POINTS渲染,如果位置为out,如果[-1,1] 在我的例子中,如果点的位置有点超出[-1,1],那么它的一部分仍然应该显示在画布上。当位置超出[-1,1]时,有没有办法让着色器保持渲染点 下面是一段代码,用来画一个位置稍微偏离画布的点。但预计它将在画布上展示近一半的内容 var positionAttributeLocation = gl.getAttribLocation(program, "a_p

我正在尝试用大gl_PointSize渲染很多点。Looks顶点着色器将自动放弃gl.POINTS渲染,如果位置为out,如果[-1,1]

在我的例子中,如果点的位置有点超出[-1,1],那么它的一部分仍然应该显示在画布上。当位置超出[-1,1]时,有没有办法让着色器保持渲染点

下面是一段代码,用来画一个位置稍微偏离画布的点。但预计它将在画布上展示近一半的内容

  var positionAttributeLocation = gl.getAttribLocation(program, "a_position");
  var positionBuffer = gl.createBuffer();
  gl.bindBuffer(gl.ARRAY_BUFFER, positionBuffer);

  var positions = [
    -1.0001, -1
  ];

  gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(positions), gl.STATIC_DRAW);

  ....

  gl.enableVertexAttribArray(positionAttributeLocation);
  gl.bindBuffer(gl.ARRAY_BUFFER, positionBuffer);

  gl.vertexAttribPointer(positionAttributeLocation, size, type, normalize, stride, offset);

  gl.drawArrays(gl.POINTS, 0, 1);
在我的顶点着色器中,我有

  ....
  gl_PointSize = 32.0;
  ....

我不能重复你的问题。在画布外画点似乎对我很有用

第2.13节

如果所考虑的基本体是一个点,则如果它位于近剪裁平面或远剪裁平面之外,则剪裁将丢弃该点否则将不加更改地传递它

你看到不同的结果了吗

当然,要知道WebGL和OpenGL ES 2.0都只需要支持最大点大小1.0。看起来像

const gl=document.querySelector('canvas').getContext('webgl');
常数vs=`
属性向量4位置;
void main(){
gl_位置=位置;
gl_PointSize=64.0;
}
`;
常数fs=`
精密中泵浮子;
void main(){
gl_FragColor=vec4(1,0,0,1);
}
`;
const program=twgl.createProgram(gl[vs,fs]);
const positionLoc=gl.getAttriblLocation(程序“位置”);
const buf=gl.createBuffer();
gl.bindBuffer(gl.ARRAY\u BUFFER,buf);
gl.bufferData(gl.ARRAY\u BUFFER,新Float32Array([
-1.001, -1.001,
1.001, -1.001,
-1.001,  1.001,
1.001,  1.001,
0,      0,
])、总图、静态图);
gl.EnableVertexAttributeArray(positionLoc);
总账VertexAttribute指针(位置LOC,2,总账浮点,false,0,0);
gl.useProgram(程序);
总帐绘图数组(总帐点,0,5)
canvas{边框:1px纯黑;}


不久前,我遇到了同样的问题,可能与平台有关,可能会有所帮助。更新了我的答案,并提供了解决方法