/**

* 缓冲区工具类

*/

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. IT薪酬

    新加坡IT薪酬 2014-06-12 12:51 by 圣殿骑士, 8856 阅读, 37 评论, 收藏, 编辑 很多朋友发邮件或留言问我关于新加坡IT薪酬的问题,由于前段时间比较忙,所以没有及时一一 ...

  2. (大数据工程师学习路径)第一步 Linux 基础入门----简单的文本处理

    介绍 这一节我们将介绍这几个命令tr(注意不是tar),col,join,paste.实际这一节是上一节关于能实现管道操作的命令的延续,所以我们依然将结合管道来熟悉这些命令的使用. 一.常用的文本处理 ...

  3. SpringData JPA的学习笔记之环境搭建

    一.环境搭建 1.加入jar包   spring jar+jpa jar +springData jar >>SpringData jar包     2.配置applicationCont ...

  4. 零基Github Page个人博客建立教程无限的自由流动

    本文介绍了什么是Github Page.以及如何使用Github Page搭建一个免费的.无限流量的个人博客并绑定独立域名. 一.前言 1.1 为什么要用Github Page搭建博客 借用阮一峰老大 ...

  5. 蓝桥杯 BASIC 27 矩阵乘法(矩阵、二维数组)

    [思路]:注意0次幂是单位矩阵. [AC代码]: #include <iostream> #include <algorithm> #include <iomanip&g ...

  6. I/O概述和审查操作

    I/O流量可表示非常多不同种类的输入源和输出目的地.它包含一个简单的字节流,基本数据(int.boolean.double等待),本地化字符,和对象.仅是简单地传递数据,另一些流能够操作和转换数据 不 ...

  7. Asp.net MVC + EF + Spring.Net 项目实践(二)

    这一篇主要介绍数据库和entity framework集成 1. 先创建数据库,很简单的几张表,但也涉及了一些主外键关系.联合主键等,关系图如下(DB脚本在最后) 2. 打开VS,现在建立Model实 ...

  8. TextView随键盘弹出上移高度

    很多时候我们都在为键盘遮挡了原本就不大的屏幕时而烦恼,特别是当用户处于编辑状态时,键盘下面的内容就看不见了,用户只能处于盲打状态了.现在有一种简单的解决办法,基本思路就是,添加通知.一直监听键盘事件, ...

  9. Set Matrix Zeroes -- LeetCode

    原题链接: http://oj.leetcode.com/problems/set-matrix-zeroes/ 这是一个矩阵操作的题目,目标非常明白,就是假设矩阵假设有元素为0,就把相应的行和列上面 ...

  10. WPF中的CheckBox的_ (underscore / 下划线)丢失

    今天在项目中遇到check box的Content的内容缺少'_', 原因是WPF的ContentPresenter默认会把'_'作为加速键的转义字符.  比方CheckBox的content为&qu ...