/**

* 缓冲区工具类

*/

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. 写自己的第二级处理器(3)——Verilog HDL行为语句

    我们会继续上传新书<自己动手写处理器>(未公布),今天是第七章,我每星期试试4 2.6 Verilog HDL行为语句 2.6.1 过程语句 Verilog定义的模块一般包含有过程语句,过 ...

  2. jQuery表格排序总成-tablesorter

    一个.进口单证 <script type="text/javascript" src="js/jquery.js"></script> ...

  3. ASP.NET Web API中使用OData

    在ASP.NET Web API中使用OData 一.什么是ODataOData是一个开放的数据协议(Open Data Protocol)在ASP.NET Web API中,对于CRUD(creat ...

  4. 35,000FT大气压力的问题

    原来的问题:压力在喷气客机的飞行FL350(35,000脚)大约210mmHg.这是个大气压的数量? 在每平方英寸磅? 多少帕斯卡尔? http://wenwen.sogou.com/z/q33797 ...

  5. 跳水Hibernate(一)实例解说

    此语一与高二接触SSH三框架,但是,当能力有限.我们没有继续下行.今天,我们正在采取的优势Java金痴迷,随即再次上调,另一项研究SSH.让我们先从SSH中间Hibernate说起. 或许你会问.为什 ...

  6. MyEclipse2014 设备 checkstyle、PMD、findbugs 最简单的方法 详细说明

    最近的实验需要的代码审查和应用程序性能优化.在需求MyEclipse安装某些插件,由于如今的MyEclipse版本号和大多数教程的不一样了,一些安装选项也已经改变,所以安装起来非常费事,通过不断的尝试 ...

  7. 经典弹出层Colorbox - a jQuery lightbox

    Colorbox - a jQuery lightbox A lightweight customizable lightbox plugin for jQuery Fork me on GitHub ...

  8. crawler_爬虫代理方案

    爬虫往往会遇到各种限制ip问题 理方案(爬虫) IP代理软件 优势标记: 是 自动切换IP 基本无开发成本标记: 黄色, 考虑切换IP时 ,网络瞬时异常 IP池,由商家维护 劣势标记: 非 部署 每个 ...

  9. oracle_面试题01

    完成下列操作,写出相应的SQL语句 创建表空间neuspace,数据文件命名为neudata.dbf,存放在d:\data目录下,文件大小为200MB,设为自动增长,增量5MB,文件最大为500MB. ...

  10. 【MySQL案件】mysql登录-S失败

    1.1.1. mysql登录mysql时间,-S参数失效 [环境的叙述性说明] mysql5.5.14 [问题叙述性说明] 配置多个实例 实例1 实例2 datadir /home/mysql_330 ...