/**

* 缓冲区工具类

*/

public class BufferUtil {

/**

* 将浮点数组转换成字节缓冲区

*/

public static ByteBuffer arr2ByteBuffer(float[] arr){

ByteBuffer ibb = ByteBuffer.allocateDirect(arr.length * 4);

ibb.order(ByteOrder.nativeOrder());

FloatBuffer fbb = ibb.asFloatBuffer();

fbb.put(arr);

ibb.position(0);

return ibb ;

}

/**

* 将list转换成字节缓冲区

*/

public static ByteBuffer list2ByteBuffer(List<Float> list){

ByteBuffer ibb = ByteBuffer.allocateDirect(list.size() * 4);

ibb.order(ByteOrder.nativeOrder());

FloatBuffer fbb = ibb.asFloatBuffer();

for(Float f : list){

fbb.put(f);

}

ibb.position(0);

return ibb ;

}

}

/**

* 渲染器

*/

public abstract class AbstractMyRenderer implements android.opengl.GLSurfaceView.Renderer

{

private float ratio;

public float xrotate = 0f;//围绕x轴旋转角度

public float yrotate = 0f;//围绕x轴旋转角度

/**

* 1.

*/

public void onSurfaceCreated(GL10 gl, EGLConfig config)

{

//清平色

gl.glClearColor(0f, 0f, 0f, 1f);

//启用顶点缓冲区数组

gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);

}

/**

* 2.

*/

public void onSurfaceChanged(GL10 gl, int width, int height) {

//设置视口

gl.glViewport(0, 0, width, height);

ratio = (float)width / (float)height;

//投影矩阵

gl.glMatrixMode(GL10.GL_PROJECTION);

//加载单位矩阵

gl.glLoadIdentity();

//设置平截头体

gl.glFrustumf(-ratio, ratio, -1, 1, 3f, 7f);  }

/**

* 3.

*/

public abstract void onDrawFrame(GL10 gl);

}

public class MyLinesRenderer extends AbstractMyRenderer{

public void onDrawFrame(GL10 gl) {

//清除颜色缓冲区

gl.glClear(GL10.GL_COLOR_BUFFER_BIT);

//设置绘图颜色

gl.glColor4f(1f, 0f, 0f, 1f);

//操作模型视图矩阵

gl.glMatrixMode(GL10.GL_MODELVIEW);

gl.glLoadIdentity();

//设置眼球的参数

GLU.gluLookAt(gl,0f,0f,5f, 0f, 0f, 0f, 0f,1f,0f);

//旋转角度

gl.glRotatef(xrotate, 1, 0, 0);

gl.glRotatef(yrotate, 0, 1, 0);

//计算点坐标

float r = 0.5f ;

//半径

float x = 0f,y = 0f,z = 0f ;

List<Float> coordsList = new ArrayList<Float>();

//循环绘制点

for(float alpha = 0f ; alpha < Math.PI * 6 ; alpha = (float) (alpha + Math.PI / 16)){

x = (float) (r * Math.cos(alpha));

y = (float) (r * Math.sin(alpha));

coordsList.add(0f);

coordsList.add(0f);

coordsList.add(0f);

coordsList.add(x);

coordsList.add(y);

coordsList.add(z);

}

gl.glVertexPointer(3, GL10.GL_FLOAT, 0, BufferUtil.list2ByteBuffer(coordsList));

gl.glDrawArrays(GL10.GL_LINES, 0, coordsList.size() / 3);

}

}

/**

*程序的主入口

*/

public class MainActivity extends Activity {

private AbstractMyRenderer render;

private MyGLSurfaceView view;

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

view = new GLSurfaceView(this);

render = new MyTriangleRenderer();

view.setRenderer(render);

//GLSurfaceView.RENDERMODE_CONTINUOUSLY:持续渲染(默认)

//GLSurfaceView.RENDERMODE_WHEN_DIRTY:脏渲染,命令渲染

view.setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);

setContentView(view);

}

public boolean onKeyDown(int keyCode, KeyEvent event) {

float step = 5f ;

//up

if(keyCode == KeyEvent.KEYCODE_DPAD_UP){

render.xrotate = render.xrotate - step ;

} else if(keyCode == KeyEvent.KEYCODE_DPAD_DOWN){

render.xrotate = render.xrotate + step ;

}  else if(keyCode == KeyEvent.KEYCODE_DPAD_LEFT){

render.yrotate = render.yrotate + step ;

}      else if(keyCode == KeyEvent.KEYCODE_DPAD_RIGHT){

render.yrotate = render.yrotate - step ;

}

//请求渲染,和脏渲染配合使用

view.requestRender();

return super.onKeyDown(keyCode, event);

}

}

openGL线s的绘制的更多相关文章

  1. Opengl ES之四边形绘制

    四边形的绘制在Opengl ES是很重要的一项技巧,比如做视频播放器时视频的渲染就需要使用到Opengl ES绘制四边形的相关知识.然而在Opengl ES却没有直接提供 绘制四边形的相关函数,那么如 ...

  2. PIE SDK线元素的绘制

    1. 功能简介 在数据的处理中会用到线元素的绘制,目前PIE SDK支持ILineSymbol的线元素的绘制,LineSymbol对象是用于修饰线状对象的符号,它包括CartographicLineS ...

  3. pyhton中matplotlib箱线图的绘制(matplotlib双轴图、箱线图、散点图以及相关系数矩阵图))

    //2019.07.23 1.箱形图,又称为盒式图,一般可以很好地反映出数据分布的特征,也可以进行多项数据之间分布特征的比较,它主要包含五个基础数据:中位数,两个上下分位数以及上下边缘线数据 其中的一 ...

  4. OpenGL的矩阵使用——绘制桌子

    其中最左边的桌子循环上移(即匀速上移到一定位置后回到原点继续匀速上移),中间的桌子不断旋转(即绕自身中间轴旋转),最右边的桌子循环缩小(即不断缩小到一定大小后回归原来大小继续缩小). 桌子的模型尺寸如 ...

  5. OpenGL ES 3.0 点,线,三角形绘制形式总结

    OpenGL ES 3.0 顶点     -1,  1, 0, -0.5f,  0, 0,     0, -1, 0,    -1,  0, 0, 0.5f,   0, 0,     1, -1,   ...

  6. OpenGL入门程序三:点、线、面的绘制

    1.点: void TestPoint() { //点的大小默认为一个像素,通过下面的函数可以设置一点的大小 glPointSize(50.0f); glBegin(GL_POINTS); glVer ...

  7. Linux OpenGL 实践篇-16 文本绘制

    文本绘制 本文主要射击Freetype的入门理解和在OpenGL中实现文字的渲染. freetype freetype的官网,本文大部分内容参考https://www.freetype.org/fre ...

  8. OpenGL(一)绘制圆、五角星、正弦曲线

    OpenGL入门之"顶点":OpenGL规定,一个多边形必须是一个"凸多边形",即连接多边形上任意两点,其连线都在多边形内部.多边形可以由其边上的端点(这里可称 ...

  9. IOS 中openGL使用教程2(openGL ES 入门篇 | 绘制一个多边形)

    在上一篇我们学习了如何搭建IOS下openGL的开发环境,接下来我们来学习如何绘制一个多边形. 在2.0之前,es的渲染采用的是固定管线,何为固定管线,就是一套固定的模板流程,局部坐标变换 -> ...

随机推荐

  1. Java多线程的~~~synchronized加入参数,以实现独立片段

    有时候,我们不希望在整个方法的前面加上synchronized这个keyword.这将使整个方法调用变得缓慢,我们只是重点 代码的地方添加这个synchronized这个keyword,然后这样就能加 ...

  2. Codeforces Round #257 (Div. 2/A)/Codeforces450A_Jzzhu and Children

    解题报告 没什么好说的,大于m的往后面放,,,re了一次,,, #include <iostream> #include <cstdio> #include <cstri ...

  3. PowerDesigner教程

    PowerDesigner是一款功能很强大的建模工具软件,足以与Rose比肩,相同是当今最著名的建模软件之中的一个.Rose是专攻UML对象模型的建模工具,之后才向数据库建模发展,而PowerDesi ...

  4. 第4章 建造者模式(Builder Pattern)

    原文 第4章 建造者模式(Builder Pattern) 定义 将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式. 实用范围 1 当创建复杂对象 ...

  5. Hadoop-1.1.2、HBase-0.94.7完全分布式集群结构

    爱的技术可以应用到实际生活生产,做艺术向往的东西不腻和音乐. 现将前期手里面的一个项目做一个大致的总结,与大家一起分享.交流.进步. 项目如今正在线上执行,项目名--基于Hadoop的数据分析综合管理 ...

  6. [Network]Introduction and Basic concepts

    [该系列是检讨计算机网络知识.因为现在你想申请出国.因此,在写这篇博客系列的大多数英语.虽然英语,但大多数就是我自己的感受和理解,供大家学习和讨论起来] 1 Network Edge The devi ...

  7. TableLayout中stretchColumns、shrinkColumns的使用方法

    android:stretchColumns="1" android:shrinkColumns="1"这两个属性是TableLayout所特有的,也是这两个属 ...

  8. 【淡墨Unity3D Shader计划】四 热带雨林的文章: 排除、深度测试、Alpha测试和基本雾编译

    本系列文章由@浅墨_毛星云 出品,转载请注明出处.   文章链接:http://hpw123.net/a/C__/kongzhitaichengxu/2014/1222/163.html 作者:毛星云 ...

  9. 使用Navicat Premium 和PL\SQL Developer连接Oracl

    在64位Win7中使用Navicat Premium 和PL\SQL Developer连接Oracle数据库备忘   最近接手了一个项目,服务器端数据库是oracle 11g 64位.由于主要工作不 ...

  10. Java泛型解析(03):虚拟机运行泛型代码

    Java泛型解析(03):虚拟机运行泛型代码      Java虚拟机是不存在泛型类型对象的,全部的对象都属于普通类,甚至在泛型实现的早起版本号中,可以将使用泛型的程序编译为在1.0虚拟机上可以执行的 ...