您的位置:首页 > 运维架构

OpenGL ES2学习笔记(5)-- 画线

2013-10-09 18:01 429 查看

画两条线段

OpenGL Console里运行下面的脚本

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.0f, 0.0f,
0.5f, 0.5f,
-0.2f,-0.2f,
-0.2f,-0.8f,
] 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_LINES, 0, POINT_COUNT)

渲染结果:



代码说明

大部分代码都和前一篇文章一样,这里只说明一下变化的地方。

def vertices = [
0.0f, 0.0f,
0.5f, 0.5f,
-0.2f,-0.2f,
-0.2f,-0.8f,
] as float[]

vertices包含四个点,前两个点构成一个线段,后两个点构成另外一个线段。
gl.glDrawArrays(gl.GL_LINES, 0, POINT_COUNT)

传入参数GL_LINES,告诉OpenGL我们要画的是线段。POINT_COUNT参数告诉OpenGL一共有4个点需要处理。

改变线段的粗细

OpenGL默认把线段绘制成1像素粗,调用glLineWidth()函数可以改变这个值。

gl.glClearColor(0.0f, 0.0f, 0.0f, 0.0f)
gl.glClear(gl.GL_COLOR_BUFFER_BIT)
gl.glLineWidth(8)
gl.glDrawArrays(gl.GL_LINES, 0, POINT_COUNT)


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  opengl es groovy