android使用OpenGL ES定义图片形状
2013-04-27 14:48
387 查看
为了能够开发高端的图形作品,定义形状往往是第一步。使用OpenGL ES绘制图片你不需要知道OpenGL ES怎样希望你去定义图片对象。下面介绍协调系统相关的和屏幕,定义了形状,如三角形和圆形。
定义一个三角形:
OpenGL ES允许你在三维空间定义对象。
class Triangle
{
private FloatBuffer vertexBuffer;
// number of coordinates per vertex in this array
static final
int COORDS_PER_VERTEX =
3;
static float triangleCoords[]
= {
// in counterclockwise order:
0.0f,
0.622008459f,
0.0f,
// top
-0.5f,
-0.311004243f,
0.0f,
// bottom left
0.5f,
-0.311004243f,
0.0f // bottom right
};
// Set color with red, green, blue and alpha (opacity) values
float color[]
= {
0.63671875f,
0.76953125f,
0.22265625f,
1.0f };
public Triangle()
{
// initialize vertex byte buffer for shape coordinates
ByteBuffer bb =
ByteBuffer.allocateDirect(
// (number of coordinate values * 4 bytes per float)
triangleCoords.length
* 4);
// use the device hardware's native byte order
bb.order(ByteOrder.nativeOrder());
// create a floating point buffer from the ByteBuffer
vertexBuffer = bb.asFloatBuffer();
// add the coordinates to the FloatBuffer
vertexBuffer.put(triangleCoords);
// set the buffer to read the first coordinate
vertexBuffer.position(0);
}
定义一个矩形:
class Square
{
private FloatBuffer vertexBuffer;
private ShortBuffer drawListBuffer;
// number of coordinates per vertex in this array
static final
int COORDS_PER_VERTEX =
3;
static float squareCoords[]
= {
-0.5f,
0.5f,
0.0f,
// top left
-0.5f,
-0.5f,
0.0f,
// bottom left
0.5f,
-0.5f,
0.0f,
// bottom right
0.5f,
0.5f,
0.0f };
// top right
private short drawOrder[]
= {
0,
1, 2,
0,
2, 3
}; // order to draw vertices
public Square()
{
// initialize vertex byte buffer for shape coordinates
ByteBuffer bb =
ByteBuffer.allocateDirect(
// (# of coordinate values * 4 bytes per float)
squareCoords.length
* 4);
bb.order(ByteOrder.nativeOrder());
vertexBuffer = bb.asFloatBuffer();
vertexBuffer.put(squareCoords);
vertexBuffer.position(0);
// initialize byte buffer for the draw list
ByteBuffer dlb =
ByteBuffer.allocateDirect(
// (# of coordinate values * 2 bytes per short)
drawOrder.length
* 2);
dlb.order(ByteOrder.nativeOrder());
drawListBuffer = dlb.asShortBuffer();
drawListBuffer.put(drawOrder);
drawListBuffer.position(0);
}
}
定义一个三角形:
OpenGL ES允许你在三维空间定义对象。
class Triangle
{
private FloatBuffer vertexBuffer;
// number of coordinates per vertex in this array
static final
int COORDS_PER_VERTEX =
3;
static float triangleCoords[]
= {
// in counterclockwise order:
0.0f,
0.622008459f,
0.0f,
// top
-0.5f,
-0.311004243f,
0.0f,
// bottom left
0.5f,
-0.311004243f,
0.0f // bottom right
};
// Set color with red, green, blue and alpha (opacity) values
float color[]
= {
0.63671875f,
0.76953125f,
0.22265625f,
1.0f };
public Triangle()
{
// initialize vertex byte buffer for shape coordinates
ByteBuffer bb =
ByteBuffer.allocateDirect(
// (number of coordinate values * 4 bytes per float)
triangleCoords.length
* 4);
// use the device hardware's native byte order
bb.order(ByteOrder.nativeOrder());
// create a floating point buffer from the ByteBuffer
vertexBuffer = bb.asFloatBuffer();
// add the coordinates to the FloatBuffer
vertexBuffer.put(triangleCoords);
// set the buffer to read the first coordinate
vertexBuffer.position(0);
}
定义一个矩形:
class Square
{
private FloatBuffer vertexBuffer;
private ShortBuffer drawListBuffer;
// number of coordinates per vertex in this array
static final
int COORDS_PER_VERTEX =
3;
static float squareCoords[]
= {
-0.5f,
0.5f,
0.0f,
// top left
-0.5f,
-0.5f,
0.0f,
// bottom left
0.5f,
-0.5f,
0.0f,
// bottom right
0.5f,
0.5f,
0.0f };
// top right
private short drawOrder[]
= {
0,
1, 2,
0,
2, 3
}; // order to draw vertices
public Square()
{
// initialize vertex byte buffer for shape coordinates
ByteBuffer bb =
ByteBuffer.allocateDirect(
// (# of coordinate values * 4 bytes per float)
squareCoords.length
* 4);
bb.order(ByteOrder.nativeOrder());
vertexBuffer = bb.asFloatBuffer();
vertexBuffer.put(squareCoords);
vertexBuffer.position(0);
// initialize byte buffer for the draw list
ByteBuffer dlb =
ByteBuffer.allocateDirect(
// (# of coordinate values * 2 bytes per short)
drawOrder.length
* 2);
dlb.order(ByteOrder.nativeOrder());
drawListBuffer = dlb.asShortBuffer();
drawListBuffer.put(drawOrder);
drawListBuffer.position(0);
}
}
相关文章推荐
- Android Training - 使用OpenGL ES(2) - 定义形状
- 使用Android OpenGL ES 2.0绘图之二:定义形状
- 使用Android OpenGL ES 2.0绘图之二:定义形状
- Android Training - 使用OpenGL ES(3) - 绘制形状
- 使用Android OpenGL ES 2.0绘图之三:绘制形状
- 使用Android OpenGL ES 2.0绘图之三:绘制形状
- Android OpenGL ES 入门系列(三) --- 定义形状
- android ImageButton使用形状非方形的png图片但却显示出正方形白边的情况
- Android OpenGL ES2.0编程教程系列之定义形状(二)
- Android---OpenGL ES之形状定义
- Android Training - 使用OpenGL ES(3) - 绘制形状
- Android OpenGL ES绘图教程之二 : 定义形状
- Android OpenGL ES 开发(三): OpenGL ES 定义形状
- 在Android中的jni里使用OpenGL ES 渲染一幅图片
- Android图片海报制作-MaterialDesign使用
- Android使用Matrix旋转图片模拟碟片加载过程
- Android图片遮罩模式PorterDuffXfermode的使用
- Android主流的图片加载库的使用 - Glide
- 如何在android开发使用ACTION_SEND中共享图片和文本
- Android中View(视图)绘制不同状态背景图片原理深入分析以及StateListDrawable使用详解