`

Android OpenGL ES画四棱椎,贴图

阅读更多
不说废话,贴代码,画四棱椎

   // 旋转方向
    private float xrot, yrot, zrot;
   // 正三角顶点
    private IntBuffer tvertices =IntBuffer.wrap(new int[] { 
    		 0, one, 0,
             -one, -one,one,
             one, -one, one,
             
             0, one, 0, 
             one, -one, one,
             one, -one,-one,
             
             0, one, 0,
             one, -one, -one,
             -one, -one, -one, 

             0, one, 0,
             -one, -one, -one,
             -one, -one, one 
        });

    
    //纹理点
    private int[] texCoords = {   
            0, one,                 
            one, one, 
            0, 0, 
            one, 0 
    }; 

      // 初始化
        textureids = new int[1]; 
        // 实例化bitmap
        bitmap = BitGL.bitmap;

        ByteBuffer tbb = ByteBuffer.allocateDirect(texCoords.length * 4 * 6);
        tbb.order(ByteOrder.nativeOrder());
        texBuffer = tbb.asIntBuffer();
        //为每一个面贴上纹理
        for (int i = 0; i < 6; i++) {
            texBuffer.put(texCoords);
        }
        texBuffer.position(0); 

@Override
	public void onDrawFrame(GL10 gl) {
		// 清除深度和颜色缓存
        gl.glClear(GL10.GL_DEPTH_BUFFER_BIT | GL10.GL_COLOR_BUFFER_BIT);
        gl.glLoadIdentity();
        gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
        gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);

        gl.glVertexPointer(3, GL10.GL_FIXED, 0, tvertices);
        gl.glTexCoordPointer(2, GL10.GL_FIXED, 0, texBuffer); // Define
        
        //向z轴里移入3.0f
        gl.glTranslatef(0.0f, 0.0f, -3.0f);
        // 设置旋转的方向
        gl.glRotatef(xrot, 0.0f, 1.0f, 0.0f);

        // 绘制四棱椎
        for (int i = 0; i < 4; i++) {
            gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, i * 3, 3);
        } 

        gl.glDisableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
        gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);

        // 设置旋转角度
        xrot += 1f;
        yrot += 1f;
        zrot += 0.3f;

	}

	@Override
	public void onSurfaceChanged(GL10 gl, int width, int height) {
		 // 视角
        gl.glViewport(0, 0, width, height);
        float ratio = (float) width / height;
        // 观察模式
        gl.glMatrixMode(GL10.GL_PROJECTION);
        // 重置观察布局
        gl.glLoadIdentity();
        gl.glFrustumf(-ratio, ratio, -1, 1, 1, 10);
        gl.glMatrixMode(GL10.GL_MODELVIEW);
        gl.glLoadIdentity();

	}

	@Override
	public void onSurfaceCreated(GL10 gl, EGLConfig config) {
		// 告诉系统对透视进行修正
        gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_FASTEST);
        // 黑色背景
        gl.glClearColor(0, 0, 0, 0);
        // 启用阴影平滑
        gl.glShadeModel(GL10.GL_SMOOTH);

        // 清除深度缓存
        gl.glClearDepthf(one);
        // 启用深度测试
        gl.glEnable(GL10.GL_DEPTH_TEST);
        // 所做深度测试的类型
        gl.glDepthFunc(GL10.GL_LEQUAL);

    
        
        gl.glEnable(GL10.GL_TEXTURE_2D);
        // 创建纹理
        gl.glGenTextures(1, textureids, 0);
        // 绑定要使用的纹理
        gl.glBindTexture(GL10.GL_TEXTURE_2D, textureids[0]);
        // 生成纹理
        GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0);
        // 线性滤波
        gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER,
                GL10.GL_LINEAR);
        gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER,
                GL10.GL_LINEAR); 

	}
分享到:
评论
2 楼 bcf102 2012-02-24  
smilecatflowers 写道
额,楼主这个貌似是三棱锥的说。。。

这个真不是三棱,是四棱
   private IntBuffer tvertices =IntBuffer.wrap(new int[] {   
             0, one, 0,  
             -one, -one,one,  
             one, -one, one,  
               
             0, one, 0,   
             one, -one, one,  
             one, -one,-one,  
               
             0, one, 0,  
             one, -one, -one,  
             -one, -one, -one,   
 
             0, one, 0,  
             -one, -one, -one,  
             -one, -one, one   
        });
看这个顶点坐标,我定义的是四面,并且绘制的时候
// 绘制四棱椎  
        for (int i = 0; i < 4; i++) {  
            gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, i * 3, 3);  
        }   
循环是从0到3,共四面
1 楼 smilecatflowers 2012-02-15  
额,楼主这个貌似是三棱锥的说。。。

相关推荐

    opengles画中画功能

    在Android系统中,OpenGL ES是主要的图形库,它允许开发者创建丰富的视觉体验,包括“画中画”功能。 画中画(Picture-in-Picture,简称PiP)是一种显示技术,它可以在主屏幕显示的同时,小窗口显示另一个视频或...

    android openGl es2.0以画线的模式画成一个矩形 只有4条边中间透明

    android openGl es2.0以画线的模式画成一个矩形 只有4条边中间透明

    Android openGL ES 画球

    Android openGL ES 画球

    android openGL ES 2.0画等边三角形,正方形

    android openGL ES 2.0画等边三角形,正方形

    Android OpenGL ES分小块贴图并画点画线(10x10矩形)

    本主题将深入探讨如何在Android环境下使用OpenGL ES进行分小块贴图,并实现画点、画线功能,特别是在10x10矩形范围内操作。 首先,了解基本概念: 1. **纹理贴图(Texture Mapping)**:在OpenGL ES中,贴图是二维...

    Android OpenGl ES绘制圆点与优化圆点锯齿

    在Android平台上,OpenGL ES是一种广泛使用的图形库,用于在移动设备上实现高性能的2D和3D图形渲染。本文将深入探讨如何使用OpenGL ES来绘制圆点,并介绍一种方法来优化圆点边缘的锯齿问题,提升视觉效果。 首先,...

    Android OpenGL ES 简明开发教程

    ### Android OpenGL ES 开发教程详解 #### 概述与历史沿革 OpenGL ES(OpenGL for Embedded Systems)作为OpenGL API的子集,专为移动设备、PDA和游戏主机等嵌入式系统设计,旨在简化3D图形应用的开发流程。自2003...

    Android OpenGL ES 2.0学习书籍.rar

    最后,了解如何与硬件加速的OpenGLES API交互,以及熟悉GLSL语言(OpenGL Shading Language),是成为OpenGL ES 2.0专家的必经之路。通过编写高效、可读性强的着色器代码,可以创造出各种复杂的视觉效果,实现令人...

    Android OpenGL ES 绘制三维/空间坐标系透明

    OpenGL ES 是一种在嵌入式设备上广泛使用的图形库,特别是在Android系统中,它用于创建高性能的2D和3D图形。在这个主题中,我们主要关注如何在Android平台上使用OpenGL ES绘制一个透明的三维/空间坐标系。这个过程...

    OpenGL ES实现动画效果

    实现动画效果ES2Renderer,PaintingView.m

    在Android中的jni里使用OpenGL ES和OpenCV渲染一幅图片

    在Android平台上,JNI(Java Native Interface)允许开发者使用C++代码来增强应用程序的功能,尤其是在处理图形和计算密集型任务时,如使用OpenGL ES和OpenCV。这个特定的项目旨在通过JNI调用来结合这两个强大的库...

    Android平台使用OpenGLES2.0显示YUV数据

    本教程主要探讨如何在Android系统上,利用OpenGLES2.0图形库来处理和显示从Camera获取的YUV原始数据。YUV是一种常见的颜色空间,广泛应用于视频编码和解码,因为它对带宽的要求相对较低,特别适合移动设备。 首先,...

    Android平台OpenGLES生成使用Mipmap纹理

    该案例代码为Android 平台OpenGL ES实现举例,有两个作用: ...2、使用 OpenGLES 生成与使用Mipmap纹理,构建远处模糊,近处清晰的效果。 具体案例文章讲解请见: https://xiaxl.blog.csdn.net/article/details/8873106

    Android平台 OpenGL ES3.0绘制点、线、三角形实现源码

    Android平台,OpenGL ES3.0 点、线、三角形绘制方式源码实现举例。 相关绘制方式文章讲解请参考: https://xiaxl.blog.csdn.net/article/details/8873002

    Android OpenGL ES 绘制立方体 球体 圆柱 等几何形状

    OpenGL ES 是一种在嵌入式设备上广泛使用的图形库,特别是在Android系统中,它用于创建复杂的3D图形和动画。Android OpenGL ES 提供了一个接口,让开发者能够利用硬件加速的图形处理能力,来绘制出立方体、球体、...

    android opengl es 绘画文字和3d动画

    `Elasticsearch`标签可能指的是在处理大量数据时,如何利用Elasticsearch这种强大的搜索引擎来检索和存储3D模型或动画的元数据,从而加速内容加载和搜索。 总的来说,"android opengl es 绘画文字和3D动画"是一个...

    Android OpenGL ES简明学习资料

    含有以下4个pdf,主要介绍基本概念和用法,对初学者非常有用。...Android OpenGL ES 简明开发教程.pdf Android_OpenGL_ES_book.pdf OpenGL ES 2 for Android.pdf Apress.Pro.OpenGL.ES.for.Android.Feb.2012.pdf

    Android中opengl es要实现Obj格式的3D导入

    OpenGL ES在Android平台上的应用是实现3D图形渲染的关键技术,而Obj文件格式是一种常见的3D模型数据交换格式。在Android开发中,如果想要将Obj格式的3D模型导入到应用中,就需要对OpenGL ES有深入的理解,并且掌握...

    z.h-android openGL 翻折动画效果

    在本项目"z.h-android openGL 翻折动画效果"中,开发者使用OpenGL ES (Embedded Systems version of OpenGL) 创建了一个日历翻转对折的动画效果。这涉及到多个关键的OpenGL技术和编程概念。 首先,我们需要理解...

    Android OpenGL 3D 立方体多纹理贴图源码

    这个"Android OpenGL 3D 立方体多纹理贴图源码"是一个很好的学习资源,它涵盖了多个关键的OpenGL ES编程概念。 首先,3D立方体的渲染是OpenGL ES的基本应用之一,它展示了如何构建基本的几何形状。在3D空间中,一个...

Global site tag (gtag.js) - Google Analytics