zoukankan      html  css  js  c++  java
  • OpenGL ES2学习笔记(6)-- Line Strip和Line Loop

    Line Strip

    上一篇文章画了两条线段,但是用了4个点。如果几条线段首尾相接的话,可以让OpenGL把他们当成Line Strip来画,这样就可以用n+1个点来画n条线段。

    代码

    import java.nio.ByteBuffer
    import java.nio.ByteOrder
    import javax.media.opengl.GL
    
    def vertexShaderCode = """
      attribute vec4 a_Position;
    
      void main() {                              
        gl_Position = a_Position;
        gl_PointSize = 10.0;
      }
    """
    
    def fragmentShaderCode = """
      precision mediump float; 
    
      void main() {
        gl_FragColor = vec4(1.0, 0.5, 0.0, 1.0);
      }
    """
    
    def shaderProgram = glob.compileAndLink(vertexShaderCode, fragmentShaderCode)
    def aPositionLocation = gl.glGetAttribLocation(shaderProgram.objectId, "a_Position")
    shaderProgram.use()
    
    
    def BYTES_PER_FLOAT = 4
    def POSITION_ELEMENT_COUNT = 2
    def POINT_COUNT = 4
    
    def vertices = [
     -0.2f,-0.8f,
     -0.2f,-0.2f,
      0.0f, 0.0f,
      0.2f,-0.6f,
    ] as float[]
    
    def vertexData = ByteBuffer
            .allocateDirect(vertices.length * BYTES_PER_FLOAT)
            .order(ByteOrder.nativeOrder())
            .asFloatBuffer()
    vertexData.put(vertices)
    vertexData.position(0)
    gl.glVertexAttribPointer(aPositionLocation,
           POSITION_ELEMENT_COUNT, gl.GL_FLOAT, false, 0, vertexData)
    gl.glEnableVertexAttribArray(aPositionLocation)
    
    
    gl.glClearColor(0.0f, 0.0f, 0.0f, 0.0f)
    gl.glClear(gl.GL_COLOR_BUFFER_BIT)
    gl.glLineWidth(4)
    gl.glDrawArrays(gl.GL_LINE_STRIP, 0, POINT_COUNT)
    

    唯一有必要说明的就是这段代码:

    gl.glDrawArrays(gl.GL_LINE_STRIP, 0, POINT_COUNT)

    传入的参数是 GL_LINE_STRIP而不是 GL_LINES

    效果

    Line Loop

    如果Line Strip闭合的话,那么就变成了Line Loop。修改上面的脚本,把传递给glDrawArrays()方法的GL_LINE_STRIP参数改成GL_LINE_LOOP

    gl.glDrawArrays(gl.GL_LINE_LOOP, 0, POINT_COUNT)



  • 相关阅读:
    【宋红康程序思想学习日记5】数组排序之冒泡法
    求割点 poj 1523
    网络流 poj 3308 最小割
    网络流最小割 POJ 3469
    网络流 POJ2112
    网络流 HDU 3605
    网络流HDU 2883
    网络流 最大流HDU 3549
    微信公众平台开发者中心服务器配置Token验证失败问题
    排列熵算法简介及c#实现
  • 原文地址:https://www.cnblogs.com/fuhaots2009/p/3360940.html
Copyright © 2011-2022 走看看