`
googlelee
  • 浏览: 116121 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

openGL简例2

 
阅读更多
public class VortexRenderer implements GLSurfaceView.Renderer{

private float _red = 0.9f;
private float _green = 0.8f;
private float _blue = 0.8f;
// new object variables we need
// a raw buffer to hold indices
private ShortBuffer _indexBuffer;
private ShortBuffer _indexBufferStatic;
// a raw buffer to hold the vertices
private FloatBuffer _vertexBuffer;
private FloatBuffer _vertexBufferStatic;
private short[] _indicesArray = {0, 1, 2};
private int _nrOfVertices = 3;
// code snipped
private float _angle;
private FloatBuffer _colorBuffer;
private float _xAngle;
private float _yAngle;
private float _width = 320f;
private float _height = 480f;
public void setAngle(float angle) {
_angle = angle;
}
private void initTriangle() {
    // float has 4 bytes
    ByteBuffer vbb = ByteBuffer.allocateDirect(_nrOfVertices * 3 * 4);
    vbb.order(ByteOrder.nativeOrder());
    _vertexBuffer = vbb.asFloatBuffer();
    // short has 2 bytes
    ByteBuffer ibb = ByteBuffer.allocateDirect(_nrOfVertices * 2);
    ibb.order(ByteOrder.nativeOrder());
    _indexBuffer = ibb.asShortBuffer();
    // float has 4 bytes, 4 colors (RGBA) * number of vertices * 4 bytes
    ByteBuffer cbb = ByteBuffer.allocateDirect(4 * _nrOfVertices * 4);
    cbb.order(ByteOrder.nativeOrder());
    _colorBuffer = cbb.asFloatBuffer();
    float[] coords = {
        -0.5f, -0.5f, 0f, // (x1, y1, z1)
        0.5f, -0.5f, 0f, // (x2, y2, z2)
        0f, 0.5f, 0f // (x3, y3, z3)
    };
    float[] colors = {
            1f, 0f, 0f, 1f, // point 1
            0f, 1f, 0f, 1f, // point 2
            0f, 0f, 1f, 1f, // point 3
        };
    _vertexBuffer.put(coords);
    _indexBuffer.put(_indicesArray);
    _colorBuffer.put(colors);
    _vertexBuffer.position(0);
    _indexBuffer.position(0);
    _colorBuffer.position(0);
}

    public void setColor(float r, float g, float b) {
        _red = r;
        _green = g;
        _blue = b;
    }

@Override
public void onDrawFrame(GL10 gl) {

gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
for (int i = 1; i <= 10; i++)
{
gl.glLoadIdentity();
    gl.glTranslatef(0.0f, -1f, -1.0f + -1.5f * i);
// set rotation
gl.glRotatef(_xAngle, 1f, 0f, 0f);
gl.glRotatef(_yAngle, 0f, 1f, 0f);
        // set rotation for the non-static triangle
        gl.glVertexPointer(3, GL10.GL_FLOAT, 0, _vertexBuffer);
        gl.glColorPointer(4, GL10.GL_FLOAT, 0, _colorBuffer);
        gl.glDrawElements(GL10.GL_TRIANGLES, _nrOfVertices, GL10.GL_UNSIGNED_SHORT, _indexBuffer);
}
}
@Override
public void onSurfaceChanged(GL10 gl, int w, int h) {
// TODO Auto-generated method stub
_width = w;
_height = h;
gl.glViewport(0, 0, w, h);
}
@Override
public void onSurfaceCreated(GL10 gl, EGLConfig arg1) {
// TODO Auto-generated method stub
    gl.glMatrixMode(GL10.GL_PROJECTION);
    float size = .01f * (float) Math.tan(Math.toRadians(45.0) / 2);
    float ratio = _width / _height;
    // perspective:
    gl.glFrustumf(-size, size, -size / ratio, size / ratio, 0.01f, 100.0f);
    // orthographic:
    //gl.glOrthof(-1, 1, -1 / ratio, 1 / ratio, 0.01f, 100.0f);
    gl.glViewport(0, 0, (int) _width, (int) _height);
    gl.glMatrixMode(GL10.GL_MODELVIEW);
    gl.glEnable(GL10.GL_DEPTH_TEST);

// define the color we want to be displayed as the "clipping wall"
gl.glClearColor(_red, _green, _blue, 1.0f);
    // enable the differentiation of which side may be visible
    gl.glEnable(GL10.GL_CULL_FACE);
    // which is the front? the one which is drawn counter clockwise
    gl.glFrontFace(GL10.GL_CCW);
    // which one should NOT be drawn
    gl.glCullFace(GL10.GL_BACK);
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
    gl.glEnableClientState(GL10.GL_COLOR_ARRAY);
    initJZT();
}
}
分享到:
评论

相关推荐

    Qt+openglEs2加载3D模型,平移、旋转、拾取模型

    Qt+openglEs2加载3D模型Qt+openglEs2加载3D模型Qt+openglEs2加载3D模型Qt+openglEs2加载3D模型Qt+openglEs2加载3D模型Qt+openglEs2加载3D模型Qt+openglEs2加载3D模型Qt+openglEs2加载3D模型Qt+openglEs2加载3D模型Qt...

    OpenGL ES 2 for Android A Quick-Start Guide

    ### OpenGL ES 2 for Android 快速入门指南 #### 一、引言 《OpenGL ES 2 for Android: A Quick-Start Guide》是一本专为Android开发者设计的实用指南,旨在帮助读者快速掌握OpenGL ES 2的核心概念和技术,并应用...

    OpenGL论文 OpenGL论文 OpenGL论文 OpenGL论文 OpenGL论文

    2. **应用场景**: - **游戏开发**:OpenGL常用于创建高质量的3D游戏图形。 - **科学可视化**:如地质、医学、物理等领域的数据可视化。 - **虚拟现实**:构建VR环境时,OpenGL可以提供高效的图形渲染。 - **...

    OpenGL教程 OpenGL教程 OpenGL教程 OpenGL教程 OpenGL教程

    OpenGL教程 OpenGL教程 OpenGL教程 OpenGL教程 OpenGL教程

    opengl编程指南第9版、超级宝典第7版、计算机图形原则和实践第3版以及opengl领悟(OpenGL insights)

    OpenGL编程指南第9版、超级宝典第7版、计算机图形原则和实践第3版以及OpenGL领悟(OpenGL Insights)这四本书是计算机图形学领域的经典之作,尤其对于使用OpenGL进行图形编程的开发者来说,它们提供了丰富的知识和深入...

    OpenGL实例 OpenGL实例 OpenGL实例 OpenGL实例 OpenGL实例

    OpenGL实例 OpenGL实例 OpenGL实例 OpenGL实例 OpenGL实例

    【OPENGL】opengl房子设计1

    2. **图元(Primitives)**:由一组顶点连接形成的基本形状,如线段、三角形等。在OpenGL中,大多数图形都是由三角形组成的,因为它们易于处理且可以组合成任意复杂的形状。 3. **坐标系统(Coordinate System)**...

    OpenGL深度测试OpenGL深度测试

    OpenGL 深度测试OpenGL 深度测试OpenGL 深度测试OpenGL 深度测试OpenGL 深度测试OpenGL 深度测试OpenGL 深度测试OpenGL 深度测试OpenGL 深度测试OpenGL 深度测试OpenGL 深度测试OpenGL 深度测试OpenGL 深度测试...

    opengl+qt实现鼠标选中模型

    opengl+qt实现鼠标选中模型opengl+qt实现鼠标选中模型opengl+qt实现鼠标选中模型opengl+qt实现鼠标选中模型opengl+qt实现鼠标选中模型opengl+qt实现鼠标选中模型opengl+qt实现鼠标选中模型opengl+qt实现鼠标选中模型...

    【OPENGL】opengl房屋设计2

    在"【OPENGL】opengl房屋设计2"这个项目中,我们主要关注的是使用OpenGL来构建一个逼真的房屋模型。这不仅仅是一个简单的编程任务,而是涉及到计算机图形学中的多个重要概念和技术。 首先,OpenGL是一个跨语言、跨...

    OpenGL编程指南.pdf

    OpenGL 编程指南 本文档为 OpenGL 编程指南,涵盖了 OpenGL 的基础知识、概念、基本程序结构、数据类型、函数名、辅助库、模型建立、变换、颜色、光照、位图和图像、纹理、复杂物体建模、特殊光处理、效果处理、...

    QtOpenGL文字显示

    在IT领域,尤其是在图形编程中,Qt和OpenGL是两个非常重要的工具。Qt是一个跨平台的C++库,广泛用于创建用户界面和桌面应用程序,而OpenGL则是一个强大的图形库,允许开发者进行高性能的2D和3D图形渲染。本文将深入...

    OpenGL资源.zip

    2. GLFW (OpenGL Framework):用于创建窗口、处理输入和管理上下文,是编写OpenGL程序的基础框架。 3. FreeGLUT:类似GLFW,是一个跨平台的OpenGL应用开发工具包,提供窗口管理和事件处理功能。 4. SOIL (Simple ...

    OpenGL实例源代码

    2. **OpenGL时钟代码**:这部分可能展示了如何在OpenGL环境中实现一个实时更新的时钟,可能涉及到时间函数的使用,以及将时间数据转换为图形元素的过程。 3. **OpenGL显示汉字**:在OpenGL中显示非ASCII字符,尤其...

    OpenGL Programming Guide: The Official Guide to Learning OpenGL (8th Edition)

    Includes Complete Coverage of the OpenGL® Shading Language! Today’s OpenGL software interface enables programmers to produce extraordinarily high-quality computer-generated images and interactive ...

    linux中opengl的安装包2

    标题“linux中opengl的安装包2”指的是针对Linux操作系统的第二个OpenGL安装资源,这个资源具体为MesaGLUT-7.9.2.zip。MesaGLUT不仅包含了Mesa的核心库,还包含了GLUT这个实用的编程接口,对开发者来说是一个重要的...

    linux安装openGL库

    2. **MesaGLUT**: MesaGLUT是自由软件版本的GLUT(OpenGL Utility Toolkit),它提供了一组用于创建OpenGL应用程序的基本工具,包括窗口管理、输入处理和一些基本的几何体生成函数。 在Linux系统中安装OpenGL库通常...

    openGL实现天空盒,使用OpenGL 立方体贴图

    2.OpenGL 纹理立方体贴图类似于稍后将要研究的3D 纹理,它们都使用3 个纹理坐标访 问——通常标记为(s, t, r)——而不是我们目前为止用到的两个。OpenGL 纹理立方体贴图 的另一个特性是,其中的图像以纹理图像的...

    OpenGL编程指南(第8版 PDF) 中文版 高清晰 最新 完整版 (带目录书签)

    1.2 初识OpenGL程序 2 1.3 OpenGL语法 6 1.4 OpenGL渲染管线 7 1.4.1 准备向OpenGL传输数据 8 1.4.2 将数据传输到OpenGL 8 1.4.3 顶点着色 9 1.4.4 细分着色 9 1.4.5 几何着色 9 1.4.6 图元装配 9 1.4.7 ...

Global site tag (gtag.js) - Google Analytics