android opengl es 正方体纹理效果

安卓3D正方体旋转效果 安卓3D正方体旋转效果,该项目运用AndroidOpenGL技术实现了3D正方体的效果,该正方体的六个面分别是自定义的图片贴上的,可以通过滑动该正方体来翻转其不同的面,具体效果如图所示。 立即下载

请相信我吧,把这该死的纹理贴上去真是不容易,尤其是在opengl es 资料不多的情况下,昨天搞的我头大,主要是android坐标与opengl 坐标的问题。我把代码贴上来,以后忘记了的时候可以常来温习。

 

(1)Activity类

 

package sim.feel;

import android.app.Activity;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.opengl.GLSurfaceView;
import android.opengl.GLSurfaceView.Renderer;
import android.os.Bundle;

public class My3d2 extends Activity {
    /** Called when the activity is first created. */
    private GLSurfaceView surfaceView;
    private Renderer renderer;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 载入图片
        BitGL.init(this.getResources());
        surfaceView = new GLSurfaceView(this);
        renderer = new MyRenderer(this);
        surfaceView.setRenderer(renderer);
        setContentView(surfaceView);
    }
}

class BitGL {
    public static Bitmap bitmap;

    public static void init(Resources resources) {
        bitmap = BitmapFactory.decodeResource(resources, R.drawable.img);
    }
}

 

(2)Renderer类

 

package sim.feel;

import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.IntBuffer;

import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10;

import android.content.Context;
import android.graphics.Bitmap;
import android.opengl.GLSurfaceView.Renderer;
import android.opengl.GLUtils;

public class MyRenderer implements Renderer {

    public Context context;
    private int one = 0x10000;
    private Bitmap bitmap;
    private int[] textureids;
    private IntBuffer vertexBuffer;
    private IntBuffer texBuffer;
    // 旋转方向
    private float xrot, yrot, zrot;
    // 正方体顶点
    private int[] vertices = {
            one, one, -one,  
            -one, one, -one,
            one, one, one,
           
            -one, one, one,
            one, -one,one,
            -one, -one, one,
           
            one, -one, -one,
            -one, -one, -one,
            one, one,one,
           
            -one, one, one,
            one, -one, one,
            -one, -one, one,
           
            one, -one,-one,
            -one, -one, -one,
            one, one, -one,
           
            -one, one, -one,
            -one, one,one,
            -one, one, -one,
           
            -one, -one, one,
            -one, -one, -one,
            one, one,-one,
           
            one, one, one,
            one, -one, -one,
            one, -one, one
        };

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


    public MyRenderer(Context context) {
        this.context = context;
        // 初始化
        textureids = new int[1];

        // 实例化bitmap
        bitmap = BitGL.bitmap;

        ByteBuffer vbb = ByteBuffer.allocateDirect(vertices.length * 4);
        vbb.order(ByteOrder.nativeOrder());
        vertexBuffer = vbb.asIntBuffer();
        vertexBuffer.put(vertices);
        vertexBuffer.position(0);

        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, vertexBuffer);
        gl.glTexCoordPointer(2, GL10.GL_FIXED, 0, texBuffer); // Define
       
        //向z轴里移入6.0f
        gl.glTranslatef(0.0f, 0.0f, -6.0f);
        // 设置3个方向的旋转
        gl.glRotatef(xrot, one, 0.0f, 0.0f);
        gl.glRotatef(yrot, 0.0f, one, 0.0f);
        gl.glRotatef(zrot, 0.0f, 0.0f, one);

        // 绘制正方体
        for (int i = 0; i < 6; i++) {
            gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, i * 4, 4);
        }


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

        // 设置旋转角度
        xrot += 0.5f;
        yrot += 0.6f;
        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);

    }
}

 

效果图如下:

 

 

 

告别手动打卡:逍遥模拟器+宥马运动自动跑步脚本配置全流程 本文详细介绍了如何利用逍遥模拟器和自动化脚本实现宥马运动的自动跑步功能,告别手动打卡的繁琐。从环境准备、脚本部署到定位配置和智能调度,全流程指导用户完成自动化设置,提升效率并确保运动数据的真实性。 阅读详情

相关推荐

Uds诊断自动化(CANoe.diva应用)

(7)其他配置选择可以保持默认(一般情况下,DTC以及31服务、下载服务需要另外测试)。(1)打开CANoe.Diva软件,并新建Diva工程。(2)设置工程名和保存位置;在"Specification file"(3)测试案例打开后的界面如下,可以对要进行测试的案例进行勾选,(可查看下角的进度条)后;(3)等待DIva工程的生成;(4)接下来是修改Diva工程选项,如下图点击。,如用例间的时间间隔、复位等待时间等。,即可打开导入的测试工程。,即可生成测试用例。(1)在CANoe中。

LIUJIAAAAA的博客 3435

Android OpenGLES2.0(五)——绘制立方体

上篇博客中我们提到了OpenGLES中绘制的两种方法,顶点法和索引法。之前我们所使用的都是顶点法,这次绘制立方体使用索引法来绘制立方体。构建立方体上篇博客讲到正方形的绘制,立方体是是由六个正方形组成,我们将这六个正方形绘制出来,立方体就绘制完毕了。既然选择用索引法来绘制,立方体拥有八个顶点,我们先将这八个顶点列出来,放到一个数组中:final float cubePositions[] = {

偶尔记录的一些学习笔记 1万+

LightRAG实战:从零构建中药知识图谱,解锁六种检索模式效能对比

本文详细介绍了如何使用轻量级RAG框架LightRAG从零构建中药知识图谱的实战过程。通过本地部署环境搭建、开源模型配置与《本草纲目》数据导入,文章重点对比了Naive、Local、Global、Hybrid、Mix和Bypass六种检索模式在中药问答中的效能差异,并提供了可视化图谱与优化心得,为开发者构建专业领域智能问答系统提供了实用指南。

weixin_29096377的博客 176

OpenGL给矩形贴上纹理

前面几次,我们在创建的窗口上绘制了一个三角形,并且可以通过颜色罗盘去改变它的颜色,不过这还是有一些太单调了,笔者在这里告诉大家如何给绘制的几何图形贴上纹理。这里主要是2D平面纹理,至于3D的纹理,笔者还没有去试过,有兴趣朋友可以自己去研究一下,接下来我们看一下需要哪些步骤。

qq_45651072的博客 1178

Cadence仿真数字电路功耗

Cadence仿真数字电路功耗 数字电路的功耗采用平均电流乘电源电压获得,所以本文的关键是测量平均电流。 仿真前设置好仿真参数后,在仿真的ADE街边选择:outputs➡to be saved➡select on design 选择电源的负端电流(若选择正端,则电流为负): 选择完成后,在ADE界面讲所选节点的plot也勾选上,点击run。仿真完成后自动显示波形。在波形上选中该电流曲线,右击选择:send to➡calculator 注意上图中,商店前的波形不稳定,需要进行截取。在calculator

qq_41519780的博客 1万+

30、电力生产系统中的效率测量

本文探讨了如何使用数据包络分析(DEA)模型来评估电力生产系统的效率。文章详细介绍了电力生产系统的三个主要环节——发电、输电和配电,并通过多种DEA模型,如输入导向模型、输出导向模型以及基于松弛的SBM模型,展示了效率测量的方法和技术。同时,结合实际案例分析,说明了DEA模型在识别效率低下环节及提出改进建议方面的应用价值。

rgv2345678的博客 116

Android OpenGL ES 学习(一) -- 基本概念

最近在研究 SurfaceView 和 TextureView,发现栅格化这东西,一直没怎么搞明白,一搜都是关于 OpenGL 的,没办法,当初也是要学习这个,现在重试拾起。之前接触 OpenGL ,是主要解决一个渲染模糊问题,使用 OpenGL 就不会,而使用 SurfaceView 则不会,但存在延时问题,一直没扣明白,这个系列,期待重新认识 OpenGL。Android 图形学这东西,真的好多东西啊 - -。

夏至的稻穗的博客 7055

《QGIS快速入门与应用基础》021:插件仓库 URL 获取与添加

详细介绍了在QGIS中添加第三方插件仓库的方法。首先强调必须从官方推荐、开源社区等可靠渠道获取插件仓库URL以确保安全性,并列出了4类可信获取渠道。文章分步骤讲解了URL添加流程,包括打开插件管理器设置面板、填写仓库信息、刷新缓存验证等操作。针对常见问题如URL格式错误、连接失败等提供了具体解决方案。最后总结指出,成功添加第三方仓库后即可直接搜索安装各类专业插件,从而扩展QGIS功能边界。全文注重实操指导,特别适合需要安装行业专用插件的QGIS用户参考。

LuckyHanMo的博客 463

android openGL ES详解(一)

主线程与GLSurfaceView:主线程负责的实例化、布局和生命周期管理,并通过特定方法(如queueEvent)与渲染线程进行通信。渲染线程与GLSurfaceView:渲染线程是内部维护的,专门用于执行OpenGL ES渲染命令的线程。渲染线程根据渲染器的指示,在需要时重新绘制场景。主线程与渲染线程:两者通过提供的机制(如queueEvent)进行通信,确保UI更新和渲染工作能够协调进行,避免阻塞主线程或造成渲染延迟。通过这种方式,

闲暇部落 3099

【WRF-Urban】Registry.EM_COMMON文件概述及urban有关变量

Registry.EM_COMMON文件概述及urban有关变量

WW、forever的博客 1593

SAP UI5 SimpleForm 的本质、布局选择与工程化用法:从 API 到 Fiori 规范的完整解析

SimpleForm的价值在于让开发者以“语义顺序”来思考表单:分组—行—字段,由此把更多精力放在表单信息架构与Fiori规范的落地上。当你理解了开分组、Label开新行、的断点与比例、的对齐特性、editable与的真实含义,就能据此为每个页面挑选合适的布局与参数,构建既合规又具备高可读性的企业级表单。新分组、Label新行、其他控件归当前行。SAP的断点、比例与的要点来自Fiori设计文档。SAP的适用性来自样例与课程的推荐,列表类控件不应作为其行内容。某些旧属性仅在生效,应避免误用。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 299

Android OpenGL ES 学习(十一) –渲染YUV视频以及视频抖音特效

在说 yuv 之前,就不得不说 RGB 图像空间,顾名思义,RGB 是值图像的每一个像素都有 R、G,B 三个值,且三个值一次排列存储;但不一定说一定是按照 R,G,B 顺序排列,也可以是 B,G,R 这样的顺序。其中 R,G,B 的位深为 8 bit。我们常见的图片处理,都是用 R,G,B 的图像格式,比如bitmap,比如图像的存储,基本使用 R,G,B。

gowcage的博客 1463

从入门到精通|Yalmip+Cplex在电力系统中的应用(Matlab代码实现)

​ 火电成本包括运行成本、碳捕集成本,其中火电运行成本由运行维护成 本和发电煤耗成本构成,发电煤耗与其出力关系: ,F 为机组煤耗量(kg/h),P 为机组出力/MW;运行维护成本按照 0.5 倍煤耗成本考虑,碳捕集成本取决于碳排放量及碳捕集单价,火电机组相关参数如附表 1 所示,电煤价格为 700 元/t ​

weixin_46039719的博客 1552

android opengl es 光照效果

<br />通过模拟器左右上下键旋转3d正正方体,中键为光源开关<br /> <br />Activity类<br /> <br />package sim.feel;<br /><br /> import android.app.Activity;<br /> import android.content.res.Resources;<br /> import android.graphics.Bitmap;<br /> import android.graphics.BitmapFactory;

Simdanfeg的专栏 4674

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

android opengl es 雾化效果

<br /> <br />雾效果其实很容易实现,我先总结一下:<br />(1)首先肯定是将背景色设为我们雾的颜色<br />(2)打开雾效果<br />(3)设置雾的背景色<br />(4)设置雾方程式<br />雾方程式有三种表现形式 EXP(最老),EXP2(EXP加强版),LINEAR(雾的最好方程式,当然用这个),如果要用LINEAR这种,则要多雾start,end的设置,表示雾从多远开始,从多远停止 。像LINEAR这种称之为线性雾(不是我发明的,OPENGL超级宝典上这样说,设置稠密度无效)

Simdanfeg的专栏 6686

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

HJ详解Android OpenGL ES2.0 (例程)

绘制正方体,球形以及旋转 图像滤镜 压缩纹理 FBO 相机预览 图像混合 光照 待续 这次主要围绕这代码来补充一些GLES知识. 绘制正方体,球形以及旋转 在前面我们绘制了2D对象,他们的3D扩展也非常容易,具体的代码以上传至我的github,详见level0部分代码.这里我们主要谈谈之前没有讨论的视角坐标系设置,以及物体的旋转. 在前面的学习中,我们设置的长方形坐...

少年的此间 692

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

android OpenGl Es实现正方体多纹理

学了一些天的OpenGl ES ,觉得网上多纹理的资料太少了,特来做下贡献,先上效果图     参考代码:   package com.myopengl; import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.nio.FloatBuffer; import java.nio.IntBuffer

科学精神,源远流长 1493

Android OpenGL ES 知识总览2——坐标系

坐标变换 在3D坐标空间中,用于表示图形的数据一定包含位置信息(x,y,z)(x,y,z)(x,y,z),但是除此之外,还要有一个量用于标定用户视角与被观测物体的距离关系,用户视角由成为摄像机Camera,因此需要增加一个维度取名叫www,那么着色器的坐标gl_Position就会多增加一个量成为一个四维向量(x,y,z,w)(x,y,z,w)(x,y,z,w)。 这套OpenGL的坐标系统被称为归一化设备坐标。既然www分量定义了视角关系,那么它相当于定义了一个距离空间,这个空间要求(x,y,z)(x,y

時を越える笑顔 3054

opengl es纹理贴图效果实例

一、先准备好一张用来贴图的照片 二、纹理效果代码: gl.glEnable(GL10.GL_TEXTURE_2D); // 创建纹理 gl.glGenTextures(1, textureids, 0); // 绑定要使用的纹理 gl.glBindTexture(GL10.GL_TEXTURE_2D, texturei

楼中望月 7217

OpenGL ES绘制3D图形以及设置视口

本文介绍了OpenGL中的glDrawElements函数及其使用。该函数通过索引缓冲区指定顶点绘制顺序,可实现高效渲染,特别适合处理重复使用顶点数据的3D模型。文章详细讲解了函数的参数:绘制模式(如GL_TRIANGLES)、索引数量、索引数据类型(如GL_UNSIGNED_SHORT)和索引缓冲区。通过一个立方体渲染示例,展示了如何准备顶点数据、索引数据和颜色数据,并调用glDrawElements进行渲染。示例代码包含初始化缓冲区、设置投影矩阵、实现旋转动画等关键步骤,清晰演示了glDrawEleme

Lud的博客 1413

Android OpenGL | ES给立方体进行纹理映射

看到了Android OpenGL开发四棱锥和立方体之后,我们是不是增加了使用OpenGL开发图形的兴趣啊,呵呵,希望大家保持热情啊,今天我们接着给已经画好的立方体进行文理处理,效果图如下: 可以看到,我们对正方体做了如下处理: 给正方体增加3轴旋转功能; 给正方体添加纹理; 注意点:真机上不显示纹理贴图的解决办法~~ Android OpenGL...

yff1123570554的专栏 523

初学Android OpenGL ES之绘制3D图形 八十二

初学Android OpenGL ES之绘制3D图形 八十二

hffyyff的博客 930

android opengl es 雾化效果实例

雾相关: 三种雾的计算方法,怎么设置雾的颜色和雾的范围 设置雾的背景颜色:gl.glClearColor(0.5f, 0.5f, 0.5f, 1.0f); 设置雾气的模式:gl.glFogf(GL10.GL_FOG_MODE, fogMode[2]); 设置雾气的颜色:gl.glFogfv(GL10.GL_FOG_COLOR, fogColor, 0); 设置雾的密度:模式为LINEAR

楼中望月 4456

Android高级进阶八 Android OpenGL给立方体进行纹理映射

最新版本:Android高级进阶八 Android OpenGL给立方体进行纹理映射          看到了Android高级进阶七 Android OpenGL开发四棱锥和立方体之后,我们是不是增加了使用OpenGL开发图形的兴趣啊,呵呵,希望大家保持热情啊,今天我们接着给已经画好的立方体进行文理处理,效果图如下:           可以看到,我们对正方体做了如下处理:

另一度空间的专栏 1663

OpenGL基础知识介绍和简单使用

OpenGL(全写Open Graphics Library)是指定义了一个跨编程语言、跨平台的编程接口规格的专业的图形程序接口。它用于三维图像(二维的亦可),是一个功能强大,调用方便的底层图形库。OpenGL在不同的平台上有不同的实现,但是它定义好了专业的程序接口,不同的平台都是遵照该接口来进行实现的,思想完全相同,方法名也是一致的,所以使用时也基本一致,只需要根据不同的语言环境稍有不同而已。

zxy_de_android的博客 6756

Android OpenGL ES 2.0画立方体

转自:点击打开链接 画过三角形后,再来画立方体。 Activity还是和画三角形的一样,只是Renderer换了。 为加强立体感,加了旋转效果。 Test2Renderer.java 1 package com.android.jayce.test; 2 3 import java.nio.ByteBuffer; 4 import java.nio.Byte

越努力,越幸运 4791
上一篇: android opengl es 三角体,正方体自动旋转
下一篇: android opengl es 光照效果
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值