前面讲了一些Android OpenGl 的概念问题,这一节讲给大家讲一下如何画一个三角现出来.
一、新建一个Android工程命名为:OpenGL_Lesson2.
二、修改OpenGL_Lesson2.java代码如下:
-
package
com.android.tutor;
-
import
android.app.Activity;
-
import
android.os.Bundle;
-
public
class
OpenGL_Lesson2
extends
Activity {
-
-
private
OpenGlView mOpenGlView;
-
public
void
onCreate(Bundle savedInstanceState) {
-
super
.onCreate(savedInstanceState);
-
-
mOpenGlView =
new
OpenGlView(
this
);
-
setContentView(mOpenGlView);
-
-
}
-
}
-
package
com.android.tutor;
-
import
android.app.Activity;
-
import
android.os.Bundle;
-
public
class
OpenGL_Lesson2
extends
Activity {
-
-
private
OpenGlView mOpenGlView;
-
public
void
onCreate(Bundle savedInstanceState) {
-
super
.onCreate(savedInstanceState);
-
-
mOpenGlView = new
OpenGlView(
this
);
-
setContentView(mOpenGlView);
-
-
}
-
}
三、新建一个类OpenGlView.java继承与GLSurfaceView,代码如下:
-
package
com.android.tutor;
-
import
android.content.Context;
-
import
android.opengl.GLSurfaceView;
-
public
class
OpenGlView
extends
GLSurfaceView {
-
-
private
OpenGlRender mOpenGlRender;
-
public
OpenGlView(Context context) {
-
super
(context);
-
mOpenGlRender =
new
OpenGlRender();
-
setRenderer(mOpenGlRender);
-
}
-
-
-
-
}
-
package
com.android.tutor;
-
import
android.content.Context;
-
import
android.opengl.GLSurfaceView;
-
public
class
OpenGlView
extends
GLSurfaceView {
-
-
private
OpenGlRender mOpenGlRender;
-
public
OpenGlView(Context context) {
-
super
(context);
-
mOpenGlRender = new
OpenGlRender();
-
setRenderer(mOpenGlRender);
-
}
-
-
-
-
}
四、新建一个OpenGlRender.java类继承与Renderer,代码如下:
-
package
com.android.tutor;
-
import
java.nio.ByteBuffer;
-
import
java.nio.ByteOrder;
-
import
java.nio.FloatBuffer;
-
import
java.nio.ShortBuffer;
-
import
javax.microedition.khronos.egl.EGLConfig;
-
import
javax.microedition.khronos.opengles.GL10;
-
import
android.opengl.GLSurfaceView.Renderer;
-
public
class
OpenGlRender
implements
Renderer {
-
-
private
float
_red = 0f;
-
private
float
_green = 25f;
-
private
float
_blue = 200f;
-
-
private
ShortBuffer _indexBuffer;
-
-
private
FloatBuffer _vertexBuffer;
-
-
-
private
short
[] _indicesArray = {
0
,
1
,
2
};
-
private
int
_nrOfVertices =
3
;
-
@Override
-
public
void
onSurfaceCreated(GL10 gl, EGLConfig config) {
-
-
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
-
initTriangle();
-
}
-
@Override
-
public
void
onSurfaceChanged(GL10 gl,
int
width,
int
height) {
-
-
gl.glViewport(
0
,
0
, width, height);
-
}
-
-
-
@Override
-
public
void
onDrawFrame(GL10 gl) {
-
gl.glClearColor(_red, _green, _blue,
1
.0f);
-
-
gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
-
-
gl.glColor4f(
0
.5f, 0f, 0f,
0
.5f);
-
gl.glVertexPointer(_nrOfVertices, GL10.GL_FLOAT,
0
, _vertexBuffer);
-
gl.glDrawElements(GL10.GL_TRIANGLES, _nrOfVertices, GL10.GL_UNSIGNED_SHORT, _indexBuffer);
-
}
-
-
private
void
initTriangle() {
-
-
ByteBuffer vbb = ByteBuffer.allocateDirect(_nrOfVertices *
3
*
4
);
-
vbb.order(ByteOrder.nativeOrder());
-
_vertexBuffer = vbb.asFloatBuffer();
-
-
-
ByteBuffer ibb = ByteBuffer.allocateDirect(_nrOfVertices *
2
);
-
ibb.order(ByteOrder.nativeOrder());
-
_indexBuffer = ibb.asShortBuffer();
-
-
float
[] coords = {
-
-
0
.5f, -
0
.5f, 0f,
-
0
.5f, -
0
.5f, 0f,
-
0f,
0
.5f, 0f
-
};
-
-
_vertexBuffer.put(coords);
-
-
_indexBuffer.put(_indicesArray);
-
-
_vertexBuffer.position(
0
);
-
_indexBuffer.position(
0
);
-
}
-
}
-
package
com.android.tutor;
-
import
java.nio.ByteBuffer;
-
import
java.nio.ByteOrder;
-
import
java.nio.FloatBuffer;
-
import
java.nio.ShortBuffer;
-
import
javax.microedition.khronos.egl.EGLConfig;
-
import
javax.microedition.khronos.opengles.GL10;
-
import
android.opengl.GLSurfaceView.Renderer;
-
public
class
OpenGlRender
implements
Renderer {
-
-
private
float
_red = 0f;
-
private
float
_green = 25f;
-
private
float
_blue = 200f;
-
-
private
ShortBuffer _indexBuffer;
-
-
private
FloatBuffer _vertexBuffer;
-
-
-
private
short
[] _indicesArray = {
0
,
1
,
2
};
-
private
int
_nrOfVertices =
3
;
-
@Override
-
public
void
onSurfaceCreated(GL10 gl, EGLConfig config) {
-
-
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
-
initTriangle();
-
}
-
@Override
-
public
void
onSurfaceChanged(GL10 gl,
int
width,
int
height) {
-
-
gl.glViewport(0
,
0
, width, height);
-
}
-
-
-
@Override
-
public
void
onDrawFrame(GL10 gl) {
-
gl.glClearColor(_red, _green, _blue, 1
.0f);
-
-
gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
-
-
gl.glColor4f(0
.5f, 0f, 0f,
0
.5f);
-
gl.glVertexPointer(_nrOfVertices, GL10.GL_FLOAT, 0
, _vertexBuffer);
-
gl.glDrawElements(GL10.GL_TRIANGLES, _nrOfVertices, GL10.GL_UNSIGNED_SHORT, _indexBuffer);
-
}
-
-
private
void
initTriangle() {
-
-
ByteBuffer vbb = ByteBuffer.allocateDirect(_nrOfVertices * 3
*
4
);
-
vbb.order(ByteOrder.nativeOrder());
-
_vertexBuffer = vbb.asFloatBuffer();
-
-
-
ByteBuffer ibb = ByteBuffer.allocateDirect(_nrOfVertices * 2
);
-
ibb.order(ByteOrder.nativeOrder());
-
_indexBuffer = ibb.asShortBuffer();
-
-
float
[] coords = {
-
-0
.5f, -
0
.5f, 0f,
-
0
.5f, -
0
.5f, 0f,
-
0f, 0
.5f, 0f
-
};
-
-
_vertexBuffer.put(coords);
-
-
_indexBuffer.put(_indicesArray);
-
-
_vertexBuffer.position(0
);
-
_indexBuffer.position(0
);
-
}
-
}
五、运行之,效果如下:
今天晚上就先不做详细解释了!改日在加上!谢谢~
分享到:
相关推荐
在"code__opengl学习笔记1-基本的运行框架"中,可能包含了如何设置OpenGL环境、编译和运行程序的基础知识。这通常包括安装必要的库、配置编译器、创建项目结构以及理解GLUT的基本用法。这些都是进行OpenGL编程的先决...
OpenGL学习笔记1 - 基本的运行框架 在计算机图形学领域,OpenGL是一个广泛使用的跨语言、跨平台的应用程序编程接口(API),用于渲染2D、3D图像。本笔记将聚焦于如何在Visual Studio 2012环境下搭建一个基本的...
总的来说,NeHe OpenGL教程的学习笔记1主要涵盖了OpenGL环境的初始化、基本几何形状的绘制、颜色设定、视口与投影以及渲染流程的基础概念。通过理解和实践这些基本操作,开发者可以逐步构建更复杂的3D场景。
如果我们要绘制一个3D的四棱锥只需要绘制这5个面即可,绘制的方法和前一篇文章OpenGL_Qt学习笔记之_03(平面图形的着色和旋转)的相同。只不过这里的顶点坐标是3维的,所以图像深度那一维不一定为0。因此我们可以事先...
### OpenGL学习笔记关键知识点 #### 一、OpenGL坐标系与绘图函数 - **坐标系定义**:在OpenGL中,坐标系定义了三维空间中物体的位置。X坐标轴从左至右,Y坐标轴从下至上,Z坐标轴从观察者的视角由近及远(即从里至...
现代OpenGL+Qt学习笔记之三:显示一个彩色三角形http://blog.csdn.net/chaojiwudixiaofeixia/article/details/77927876源码。
"Learn of OpenGL"表明这是一个关于学习OpenGL的资源集合,可能是教程、代码示例或者学习笔记。"run under GDE"则表示这些学习资料是在图形开发环境(GDE)中运行的,GDE可能是Generic Debug Environment或其他类似...
这个“Python学习笔记”可能包含了这些主题的代码示例和解释,帮助初学者逐步掌握OpenGL的使用。ljg_resource可能是一个包含资源文件的目录,如纹理图像、模型数据或辅助脚本,这些都是实际项目中常见的组成部分。 ...
在“WebGL学习笔记(一)”中,我们将会探讨WebGL的基本概念、工作原理以及如何开始编写你的第一个WebGL程序。 1. **WebGL基本概念** - **上下文(Context)**:在HTML5中,WebGL是Canvas元素的一个上下文,通过`...
它是WebGL学习笔记的重点,特别是在初学者阶段。WebGL的核心是光栅化引擎,它能够根据程序员编写的代码在GPU上绘制点、线和三角形,进而构建复杂的3D场景。 在WebGL中,所有图形渲染都是通过GPU来执行的,这需要...
在这个名为"WebGL-Study-Notes"的资源包中,我们可以预见到一系列关于WebGL的学习笔记和示例代码。 WebGL的核心是通过JavaScript与GPU(图形处理器)进行通信,从而实现硬件加速的图形渲染。它允许开发者在网页上...
压缩包中的“第三章、OpenGL”很可能包含了关于OpenGL编程的课件内容,可能包括PPT、笔记、示例代码等。在这一章节中,你可能会学到以下几个关键概念: 1. **顶点(Vertices)**:在OpenGL中,图形是由一系列顶点...
这可能包括基本的几何形状绘制、颜色和光照处理、纹理映射、以及更高级的技术如模型加载、动画播放等。通过这些案例,开发者可以深入理解WebGL的基本原理和Cocos Creator的使用技巧。 在文件"CocosCreatorWebGL-...