没有绘制出点

来源:2-4 绘制一个点

armin12138

2022-12-21

  const ctx = document.getElementById('canvas')
 
  const gl = ctx.getContext('webgl')

  // 着色器
  // 创建着色器源码
  const VERTEX_SHADER_SOURCE = `
  void main() {
    // 要绘制的点的坐标
    gl_Position = vec4(0.0, 0.0, 0.0, 1.0)
    // 点的大小
    gl_PointSize = 10.0
  }
  ` // 顶点着色器
  // gl_Position vec4(0.0, 0.0, 0.0, 1.0) x, y, z, w齐次坐标 (x/w, y/w, z/w)
 
  // gl_FragColor vec4(1.0, 0.0, 0.0, 1.0) r, g, b, a
  const FRAGMENT_SHADER_SOURCE = `
  void main() {
    gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0)
  }
  ` // 片元着色器

  // 创建着色器
  const vertexShader = gl.createShader(gl.VERTEX_SHADER)
  const fragmentShader = gl.createShader(gl.FRAGMENT_SHADER)

  gl.shaderSource(vertexShader, VERTEX_SHADER_SOURCE) // 指定顶点着色器的源码
  gl.shaderSource(fragmentShader, FRAGMENT_SHADER_SOURCE) // 指定片元着色器的源码

  // 编译着色器
  gl.compileShader(vertexShader)
  gl.compileShader(fragmentShader)

  // 创建一个程序对象
  const program = gl.createProgram()
  gl.attachShader(program, vertexShader)
  gl.attachShader(program, fragmentShader)

  gl.linkProgram(program)

  gl.useProgram(program)

  // 执行绘制
  // 要绘制的图形是什么,从哪个开始,使用几个顶点
  gl.drawArrays(gl.POINTS, 0, 1)

WebGL: INVALID_OPERATION: useProgram: program not valid

WebGL: INVALID_OPERATION: drawArrays: no valid shader program in use

控制台报了两个警告,请问老师是哪里有问题

写回答

2回答

yancy

2022-12-21

顶点和片元着色器缺少分号,这个得加上

0
1
armin12138
是的我发现了,已加上,谢谢老师
2022-12-21
共1条回复

armin12138

提问者

2022-12-21

已解决,忘了加分号

0
0

WebGL+Three.js 入门与实战,系统学习 Web3D 技术

前端的技术蓝海,涨薪好选择

1081 学习 · 294 问题

查看课程