openGL线s的绘制
/**
* 缓冲区工具类
*/
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的绘制的更多相关文章
- Opengl ES之四边形绘制
四边形的绘制在Opengl ES是很重要的一项技巧,比如做视频播放器时视频的渲染就需要使用到Opengl ES绘制四边形的相关知识.然而在Opengl ES却没有直接提供 绘制四边形的相关函数,那么如 ...
- PIE SDK线元素的绘制
1. 功能简介 在数据的处理中会用到线元素的绘制,目前PIE SDK支持ILineSymbol的线元素的绘制,LineSymbol对象是用于修饰线状对象的符号,它包括CartographicLineS ...
- pyhton中matplotlib箱线图的绘制(matplotlib双轴图、箱线图、散点图以及相关系数矩阵图))
//2019.07.23 1.箱形图,又称为盒式图,一般可以很好地反映出数据分布的特征,也可以进行多项数据之间分布特征的比较,它主要包含五个基础数据:中位数,两个上下分位数以及上下边缘线数据 其中的一 ...
- OpenGL的矩阵使用——绘制桌子
其中最左边的桌子循环上移(即匀速上移到一定位置后回到原点继续匀速上移),中间的桌子不断旋转(即绕自身中间轴旋转),最右边的桌子循环缩小(即不断缩小到一定大小后回归原来大小继续缩小). 桌子的模型尺寸如 ...
- 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, ...
- OpenGL入门程序三:点、线、面的绘制
1.点: void TestPoint() { //点的大小默认为一个像素,通过下面的函数可以设置一点的大小 glPointSize(50.0f); glBegin(GL_POINTS); glVer ...
- Linux OpenGL 实践篇-16 文本绘制
文本绘制 本文主要射击Freetype的入门理解和在OpenGL中实现文字的渲染. freetype freetype的官网,本文大部分内容参考https://www.freetype.org/fre ...
- OpenGL(一)绘制圆、五角星、正弦曲线
OpenGL入门之"顶点":OpenGL规定,一个多边形必须是一个"凸多边形",即连接多边形上任意两点,其连线都在多边形内部.多边形可以由其边上的端点(这里可称 ...
- IOS 中openGL使用教程2(openGL ES 入门篇 | 绘制一个多边形)
在上一篇我们学习了如何搭建IOS下openGL的开发环境,接下来我们来学习如何绘制一个多边形. 在2.0之前,es的渲染采用的是固定管线,何为固定管线,就是一套固定的模板流程,局部坐标变换 -> ...
随机推荐
- D - Cow Ski Area
Description Farmer John's cousin, Farmer Ron, who lives in the mountains of Colorado, has recently t ...
- 怎样解决chm类型的文件在Windows操作系统中无法打开
又一次安装了Windows 7操作系统,发现chm文件类型Java API文档无法打开了,纠结了半天最终搞定,现总结一下: 1.选中该chm类型的文件,右键鼠标选择并点击"属性(R)&quo ...
- cocos2dx 3.1.1移植安卓apk (lua交叉编译器项目 mac环境)
cocos2dx 3.1.1 lua项目安卓交叉编译 mac环境 本文基于ant,sdk,ndk,adt等软件和环境已经事前设置好 1\新建项目 在mac的终端下输入命令: cocos new t ...
- 阅读《大数据》Tuzipeizhe
一本好书.4/5明星. 内容:引进美国和信息,相关历史资料.从建国,为了连任奥巴马. 它是引入大型数据在美国,如何从头开始. 的流逝,到近期几年.这股影响美国的大数据 是怎样走入世界,影响各国的. 英 ...
- React.js再探(四)
不知道看官们还记不记得上一节的内容,关于生命周期的.我们来个例子重温且练习一下. 传送门:http://www.cnblogs.com/galenyip/p/4574400.html 我们来实现一下时 ...
- 基于Js实现的UrlEncode和UrlDecode函数代码
<script language="javascript">//UrlEncode函数function UrlEncode(str){ var ret="& ...
- C语言qsort函数算法性能测试
对于该算法的复杂性.一个直接的方法是测量的一定量的算法级数据的执行时间的感知. 随着C语言提供qsort对于示例.随着100一万次的数据,以测试其计算量.感知O(nlg(n))时间成本: C码如下面: ...
- java语言内部类和匿名内部类
内部类 在类定义也有类,在该类上的内部被称为一个内部类. 访问功能: 1,内部类可以直接访问外部类成员,它包含私有成员 2,外部类需要访问内部类的成员将需要建立一流的内部对象. 一般用于类的设计. 分 ...
- sql 给表结构增加说明
create proc proc_addReMark @TableName nvarchar(50), @RowName nvarchar(50), @RowReMark nv ...
- C语言编写Windows服务程序
原文:C语言编写Windows服务程序 #include <Windows.h> #include <stdio.h> #define SLEEP_TIME 5000 // 间 ...