
OpenGL
pinggle
好好工作,好好生活
展开
-
为什么调用glPushMatrix()和glPopMatrix() 转
今天忽然感悟到为什么在进行变换之前要用glPushMatrix();这个函数,而在变换完毕后有用glPopMatrix()这两个函数了,赶紧记下来: 我们在变换坐标的时候,使用的是glTranslatef(),glRotaef()等函数来操作,操作的是什么呢?操作的是当前矩阵,我们也知道,这些坐标变换(翻转,旋转也好)都是通过操作矩阵来实现的,而矩阵相乘是会叠加的,当你用完一个变换函转载 2011-12-31 11:14:34 · 656 阅读 · 0 评论 -
【Android开发学习17】Android OpenGL ES 光照与混合glDrawElements
一、基础知识:1..光照介绍:①环境光: 来自四面八方,所有场景中的对象都处于环境光的照射中。②漫射光: 由特定的光源产生,并在场景中的对象表面产生反射。 处于漫射光直接照射下的任何对象表面都变得很亮,而几乎未被照射到的区域就显示得要暗一些。 2.光照使用:①设定光源参数: //定义环境光(r,g,b,a) FloatBuffer lightAm原创 2013-02-22 18:37:14 · 3960 阅读 · 1 评论 -
【Android开发学习16】Android OpenGL ES 关于glDrawArrays和glDrawElements
引用一段网上的话:For both, you pass OpenGL some buffers containing vertex data.glDrawArrays is basically "draw this contiguous range of vertices, using the data I gave you earlier". Good:You don't need原创 2013-02-22 16:21:23 · 4538 阅读 · 0 评论 -
【Android开发学习34】OpenGL 性能优化
作者: Yang Jian (jyang@cad.zju.edu.cn)日期: 2009-05-04 本文从硬件体系结构、状态机、光照、纹理、顶点数组、LOD、Cull等方面分析了如何优化 OpenGL 程序的性能。 OpenGL状态机(State Machine)OpenGL状态机的目前只有1.1版本,也是最经典的,大家可以参考下述链接:ft转载 2013-04-09 17:47:29 · 3984 阅读 · 1 评论 -
【Android开发学习35】GL_TRIANGLE_STRIP之纹理贴图
一、基础知识: GL_TRIANGLE_STRIP比GL_TRIANLGES 快100% ~ 200%。建议:尽可能地使用GL_TRIANGLE_STRIP替代GL_TRIANGLES。 二、使用方法: 1.首先以框架入手,我们一般在Android上画一个3D的图形,需要在MainActivity的OnCreate函数中加入如下代码,用来进入我们的3D场景界原创 2013-04-10 16:21:25 · 5996 阅读 · 1 评论 -
【Android开发学习37】android opengl es 2.0里surfaceview背景透明
surfaceview的黑色背景会挡住其父的背景,现在把surfaceview的背景设为透明,既可以看到所绘的3D物体,又可以看到背景。在onSurfaceCreated里,调用GLES20.glClearColor(0f, 0f, 0f, 0f);alpha为0,即透明。然后,对surfaceview要作一定处理:mGLSurfaceView.setEGLConfigChooser(转载 2013-04-15 19:45:37 · 5496 阅读 · 1 评论 -
【Android开发学习38】关于GLSurfaceView显示的几点说明
关于GLSurfaceView加载之后,会给各层的显示造成一些不便,但是又人说,GLSurfaceView的效率是SurfaceView的30倍。主要是因为GLSurfaceView采用硬件加速的原因。 关于GLSurfaceView和SurfaceView的叠加,网上有这段话可以解释:必须先添加GLSurfaceView,再添加SurfaceView,否则GLSurface原创 2013-04-16 14:14:10 · 10538 阅读 · 0 评论 -
【Android开发学习39】VideoView在GLSurfaceView之上显示的解决方案
在项目中,有时候需要将视频显示在GLSurfaceView之上, 目前我的方法是: 解决方案一:在GLSurfaceView.Renderer中,将onDrawFrame函数中画物体的操作全部屏蔽掉。在这里我使用一个变量bRendeFlag 来控制的。@Overridepublic void onDrawFrame(GL10 gl) { // TODO Auto-ge原创 2013-04-16 14:28:19 · 10014 阅读 · 3 评论 -
【Android开发学习40】在GLSurfaceView之上添加SurfaceView层
1. 首先,初始化系统:rivate void sys_init(){ // 去掉标题栏 requestWindowFeature(Window.FEATURE_NO_TITLE); // 全屏 getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN , WindowManager.原创 2013-04-16 18:22:10 · 9614 阅读 · 0 评论 -
【Android开发学习42】OpenGL函数思考-glTexParameter
函数原型:voidglTexParameterf(GLenum target,GLenum pname, GLfloatparam)voidglTexParameteri(GLenum target,GLenum pname,GLintparam)参数说明:target:指定目标纹理,它只能取值GL_TEXTURE_1D或者GL_TEXTURE_2D;转载 2013-05-20 15:44:32 · 1664 阅读 · 5 评论 -
【Android开发学习19】关于GL_NEAREST和GL_LINEAR的选择
GL_NEAREST和GL_LINEAR前者表示“使用纹理中坐标最接近的一个像素的颜色作为需要绘制的像素颜色”,后者表示“使用纹理中坐标最接近的若干个颜色,通过加权平均算法得到需要绘制的像素颜色”。前者只经过简单比较,需要运算较少,可能速度较快,后者需要经过加权平均计算,其中涉及除法运算,可能速度较慢(但如果有专门的处理硬件,也可能两者速度相同)。从视觉效果上看,前者效果较差,原创 2013-02-23 11:16:32 · 8786 阅读 · 0 评论 -
【Android开发学习18】Android OpenGL ES 光照glDrawArrays
一、基础知识:1..光照介绍:①环境光: 来自四面八方,所有场景中的对象都处于环境光的照射中。②漫射光: 由特定的光源产生,并在场景中的对象表面产生反射。 处于漫射光直接照射下的任何对象表面都变得很亮,而几乎未被照射到的区域就显示得要暗一些。 2.光照使用:①设定光源参数: //环境光 private float[] lightAmbient;原创 2013-02-23 11:09:08 · 1606 阅读 · 0 评论 -
关于glRotatef(GLfloat angle,GLfloat x,GLfloat y,GLfloat z)的参数的一些理解
今天仔细研究了一下glRotatef()函数参数的具体意义。angle毋庸置疑就是旋转的角度,而x,y,z三个参数则应该看成一个整体表示一个向量,表示物体围绕向量[x,y,z]旋转。下面就具体谈谈自己发现这几个参数意义的过程。 刚看glRotatef()函数的时候对各个参数的意义很是不明白,自己上网查了一查,但发现网上说的却不是我想要的答案。于是潜下心来研究了一番。刚开始看的时候转载 2012-01-03 10:46:11 · 1277 阅读 · 0 评论 -
OpenGL ES 着色器脚本
static char* vShaderStr = "attribute vec4 a_position; \n" "attribute vec4 a_color; \n" "varying vec4 v_color; \n" "voi原创 2012-01-05 11:38:37 · 2909 阅读 · 0 评论 -
【Android开发学习09】Android OpenGL ES 基础
其实,我个人学习Android最主要的目的是学习在此平台下的3D效果的开发。所以,我们开始进入主题吧。OpenGL ES (OpenGL for Embedded Systems) 是 OpenGL 三维图形 API 的子集,针对手机、PDA和游戏主机等嵌入式设备而设计。该API由Khronos集团定义推广,Khronos是一个图形软硬件行业协会,该协会主要关注图形和多媒体方面的开原创 2013-02-06 16:51:06 · 1977 阅读 · 0 评论 -
【Android开发学习10】Android OpenGL ES 画多边形
一、基础知识:OpenGL ES目前只支持三角形,但任何多边形都可拆分成多个三角形,所以无所谓这个限制的存在。1.OpenGL中的坐标点:每一个坐标点由(X, Y, Z)组成。定义一个三角形的顶点数组: int one = 0x10000; //三角形三个顶点 private IntBuffer triggerBuffer = IntBuffer.原创 2013-02-06 17:55:40 · 4532 阅读 · 0 评论 -
【Android开发学习12】Android OpenGL ES 旋转glRotatef
1.旋转函数: glRotatef(float angle, float X, float Y, float Z)其中,angle指定对象旋转的角度,X,Y,Z三个参数共同决定旋转轴的方向。即,glRotatef函数是将某对象沿指定轴旋转angle角度。2.旋转实现方法: float rotateTri; float rotateQuad原创 2013-02-20 15:54:01 · 2634 阅读 · 0 评论 -
【Android开发学习11】Android OpenGL ES 颜色
一、基础知识:1.平滑着色(Smooth coloring): 将多个顶点的不同颜色混合在一起,创建出漂亮的色彩混合。2.单调着色: 给图形涂上一种固定单一的颜色。3.三角形定义的颜色数组(平滑着色): int one = 0x10000; //三角形的顶点颜色值(r,g,b,a) private IntBuffer colorBuffe原创 2013-02-20 15:27:08 · 3015 阅读 · 0 评论 -
【Android开发学习13】Android OpenGL ES 3D空间与glDrawArrays
1.四棱锥: 由4个三角形构成。 四方体: 由6个三角形构成。难点:在构建3D空间的顶点坐标时,要让对象绕自身的轴旋转,必须让对象的中心坐标总是(0.0f,0.0f,0.0f), 并且三角形都是按逆时针次序绘制的。2.3D空间的绘制:GL_APICALL void GL_APIENTRY glDrawArrays (GLenum mode原创 2013-02-20 16:29:49 · 1526 阅读 · 0 评论 -
【Android开发学习14】Android OpenGL ES 纹理映射之glDrawElements
目标: 为四方体的每个面贴上一张图片,并自动旋转。一、基础知识:要实现每个面上贴一张图片,首先需要创建一个纹理,并使用图片来生成一个纹理。==========================================================================1.初始化: IntBuffer intBuffer = IntBuf原创 2013-02-21 17:12:49 · 5065 阅读 · 0 评论 -
【Android开发学习15】Android OpenGL ES 纹理映射之glDrawArrays
目标: 为四方体的每个面贴上一张图片,并自动旋转。 一、基础知识:1.初始化: // 1.允许2D贴图,纹理 gl.glEnable(GL10.GL_TEXTURE_2D); // 2.创建纹理 gl.glGenTextures(1, textureids, 0); // 3.绑定要使用的纹理 gl.glBindTexture(GL10.GL_TEXTU原创 2013-02-22 16:11:02 · 6481 阅读 · 1 评论