`
lanhuidong
  • 浏览: 228170 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

OpenGL学习5

 
阅读更多

OpenGL给正方体的各个面加上纹理(贴图)

注意事项:

*图片如果放在drawable-mdpi目录下,则在模拟器上可以正常显示,但是在真机上不能显示图片,本处新建一个drawable-nodpi目录,将图片资源放在此目录下

1.代码

import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.opengl.GLSurfaceView;
import android.os.Bundle;

public class OpenGLActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        Bitmap bm1 = BitmapFactory.decodeResource(getResources(), R.drawable.a1);
        Bitmap bm2 = BitmapFactory.decodeResource(getResources(), R.drawable.a2);
        Bitmap bm3 = BitmapFactory.decodeResource(getResources(), R.drawable.a3);
        Bitmap bm4 = BitmapFactory.decodeResource(getResources(), R.drawable.a4);
        Bitmap bm5 = BitmapFactory.decodeResource(getResources(), R.drawable.a5);
        Bitmap bm6 = BitmapFactory.decodeResource(getResources(), R.drawable.a6);
        
        GLSurfaceView glView = new GLSurfaceView(this);
        glView.setRenderer(new GLTextureRender(bm1, bm2, bm3, bm4, bm5, bm6));
        setContentView(glView);
    }
}

 

package com.lanhuidong.opengl;

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

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

import com.lanhuidong.opengl.util.BufferToNativeOrder;

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

public class GLTextureRender implements Renderer
{
	float xrot, yrot, zrot;
	int texture[];
	
	int one = 0x10000;
	
	int[] vertices = new int[]{
			-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,
						
	};
	int[] texCoords = new int[]{
	    one,one,one,0,0,0,0,one,	
		0,0,0,one,one,one,one,0,
		one,one,one,0,0,0,0,one,
		0,one,one,one,one,0,0,0,
		0,0,0,one,one,one,one,0,
		one,0,0,0,0,one,one,one,
	};
	
	ByteBuffer indices1 = ByteBuffer.wrap(new byte[]{
	        0,1,3,2,  
            0,0,0,0,  
            0,0,0,0,  
            0,0,0,0,  
            0,0,0,0,  
            0,0,0,0,
	});
	ByteBuffer indices2 = ByteBuffer.wrap(new byte[]{
	        0,0,0,0,
	        4,5,7,6,
            0,0,0,0,
            0,0,0,0,
            0,0,0,0,
            0,0,0,0
	});
	ByteBuffer indices3 = ByteBuffer.wrap(new byte[]{
	        0,0,0,0,
            0,0,0,0,
            8,9,11,10,
            0,0,0,0,
            0,0,0,0,
            0,0,0,0
	});
	ByteBuffer indices4 = ByteBuffer.wrap(new byte[]{
	        0,0,0,0,
            0,0,0,0,
            0,0,0,0,
            12,13,15,14,
            0,0,0,0,
            0,0,0,0
	});
	ByteBuffer indices5 = ByteBuffer.wrap(new byte[]{
	        0,0,0,0,
            0,0,0,0,
            0,0,0,0,
            0,0,0,0,
            16,17,19,18,
            0,0,0,0
	});
	ByteBuffer indices6 = ByteBuffer.wrap(new byte[]{
	        0,0,0,0,
            0,0,0,0,
            0,0,0,0,
            0,0,0,0,
            0,0,0,0,
	        20,21,23,22,
	});
	
	private Bitmap bm1;
	private Bitmap bm2;
	private Bitmap bm3;
	private Bitmap bm4;
	private Bitmap bm5;
	private Bitmap bm6;
	
	public GLTextureRender(Bitmap bm1, Bitmap bm2,Bitmap bm3, Bitmap bm4,Bitmap bm5, Bitmap bm6){
	    this.bm1 = bm1;
	    this.bm2 = bm2;
	    this.bm3 = bm3;
	    this.bm4 = bm4;
	    this.bm5 = bm5;
	    this.bm6 = bm6;
	}
	
	@Override
	public void onDrawFrame(GL10 gl)
	{
		gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
		gl.glLoadIdentity();
		
		gl.glTranslatef(0.0f, 0.0f, -5.0f);
		
		gl.glRotatef(xrot, 1.0f, 0.0f, 0.0f);
		gl.glRotatef(yrot, 0.0f, 1.0f, 0.0f);
		gl.glRotatef(zrot, 0.0f, 0.0f, 1.0f);

		
		gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
		gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
		
		gl.glVertexPointer(3, GL10.GL_FIXED, 0, BufferToNativeOrder.getNativeOrderIntBuffer(vertices));
		gl.glTexCoordPointer(2, GL10.GL_FIXED, 0, BufferToNativeOrder.getNativeOrderIntBuffer(texCoords));
		
		gl.glBindTexture(GL10.GL_TEXTURE_2D, texture[0]);
		gl.glDrawElements(GL10.GL_TRIANGLE_STRIP, 24,  GL10.GL_UNSIGNED_BYTE, indices1);

		gl.glBindTexture(GL10.GL_TEXTURE_2D, texture[1]);
		gl.glDrawElements(GL10.GL_TRIANGLE_STRIP, 24,  GL10.GL_UNSIGNED_BYTE, indices2);
		
		gl.glBindTexture(GL10.GL_TEXTURE_2D, texture[2]);
		gl.glDrawElements(GL10.GL_TRIANGLE_STRIP, 24,  GL10.GL_UNSIGNED_BYTE, indices3);
		
		gl.glBindTexture(GL10.GL_TEXTURE_2D, texture[3]);
		gl.glDrawElements(GL10.GL_TRIANGLE_STRIP, 24,  GL10.GL_UNSIGNED_BYTE, indices4);
		
		gl.glBindTexture(GL10.GL_TEXTURE_2D, texture[4]);
		gl.glDrawElements(GL10.GL_TRIANGLE_STRIP, 24,  GL10.GL_UNSIGNED_BYTE, indices5);
		
		gl.glBindTexture(GL10.GL_TEXTURE_2D, texture[5]);
		gl.glDrawElements(GL10.GL_TRIANGLE_STRIP, 24,  GL10.GL_UNSIGNED_BYTE, indices6);

	    gl.glDisableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
	    gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
	    
	    xrot+=1f;
	    yrot+=1.2f; 
	    zrot+=0.6f; 
		
	}

	@Override
	public void onSurfaceChanged(GL10 gl, int width, int height)
	{
		float ratio = (float) width / height;
		gl.glViewport(0, 0, 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.glClearColor(1, 1, 1, 1);
		
		gl.glEnable(GL10.GL_CULL_FACE);
		gl.glShadeModel(GL10.GL_SMOOTH);
		gl.glEnable(GL10.GL_DEPTH_TEST);
		
		gl.glClearDepthf(1.0f);
		gl.glDepthFunc(GL10.GL_LEQUAL);
		gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_NICEST);
		gl.glEnable(GL10.GL_TEXTURE_2D);
		
		IntBuffer intBuffer = IntBuffer.allocate(6);
		gl.glGenTextures(6, intBuffer);
		texture = intBuffer.array();
		
		gl.glBindTexture(GL10.GL_TEXTURE_2D, texture[0]);
		GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bm1, 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);
		
		gl.glBindTexture(GL10.GL_TEXTURE_2D, texture[1]);
		GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bm2, 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);
		
		gl.glBindTexture(GL10.GL_TEXTURE_2D, texture[2]);
		GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bm3, 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);
		
		gl.glBindTexture(GL10.GL_TEXTURE_2D, texture[3]);
		GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bm4, 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);
		
		gl.glBindTexture(GL10.GL_TEXTURE_2D, texture[4]);
		GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bm5, 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);
		
		gl.glBindTexture(GL10.GL_TEXTURE_2D, texture[5]);
		GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bm6, 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.效果



 

  • 大小: 37.4 KB
分享到:
评论

相关推荐

    openGL学习

    ### OpenGL学习知识点详解 #### 一、OpenGl简介与预备知识 **1.1 引言** 本教程旨在为读者提供一个系统性学习OpenGl的平台。OpenGl是一种跨语言、跨平台的应用程序接口(API),用于渲染二维、三维矢量图形。它是...

    Qt Opengl学习绝好资料

    标题“Qt Opengl学习绝好资料”说明这是一份优秀的学习资源,它旨在指导读者如何在Qt环境中使用OpenGL进行图形绘制。标题中提到的“学习”和“资料”暗示了本资源的教育性质,它更侧重于入门和基础知识的传递。描述...

    OpenGL 学习资料大全

    收集到的OpenGL学习资料,内容包括: 1.OpenGL着色语言.rar 2.NEHE教程.pdf 3.openglapi.CHM 4.opengl编程与实例.pdf 5.openGL图像系统详解(英).pdf 6.vc下OpenGL开发框架与应用.pdf 7.北大 openGL 课程.pdf

    opengl 学习 网站

    1. **OpenGL官方文档** (opengl.org/developers/documentation):这是所有OpenGL学习者的基础起点。官方网站提供了完整的OpenGL规范、参考手册和API文档,详细介绍了各个函数、枚举和常量的作用。同时,这里也有...

    opengl类学习文件

    在这个"opengl类学习文件"中,包含了多个关键元素,可以帮助你深入理解并掌握OpenGL编程。 首先,"gltools"可能是一个包含GLUT(OpenGL Utility Toolkit)和其他辅助工具的库,它为OpenGL程序员提供了基本的窗口...

    OpenGL入门教程(快速学习OPENGL)

    1. 与 C 语言紧密结合:OpenGL 命令最初就是用 C 语言函数来进行描述的,对于学习过 C 语言的人来讲,OpenGL 是容易理解和学习的。 2. 强大的可移植性:OpenGL 不仅用于 Windows,还可以用于 Unix/Linux 等其它系统...

    OpenGL.rar_OpenGL pdf_OpenGL 参考手册_opengl_opengl 参考_中英文

    5. **缓冲区**:OpenGL使用各种缓冲区来存储数据,如顶点缓冲区、索引缓冲区和帧缓冲区,它们可以提高性能并简化编程。 6. **纹理**:纹理是OpenGL中重要的概念,用于给物体表面添加细节和色彩。它们可以是2D、3D或...

    OpenGL编程入门学习

    OpenGL编程入门学习主要涵盖以下几个方面的知识点: 1. **OpenGL简介**:OpenGL是一个开放源代码的图形库,作为主流的图形应用程序接口(API)之一,它提供了丰富的图形渲染功能。OpenGL的特点包括与C语言紧密集成...

    OpenGL学习必备,红宝书及蓝宝书

    "红宝书"通常指的是"OpenGL编程指南",而"蓝宝书"则是"OpenGL超级宝典",这两本书是OpenGL学习者的重要参考资料。 红宝书,全名《OpenGL编程指南》(The OpenGL Programming Guide),由OpenGL Architecture Review...

    OpenGL ES学习资料

    学习OpenGL ES的资料有很多,比如在提供的内容中提到了“Learning OpenGL ES for iOS”,这是一本专注于iOS平台上使用OpenGL ES进行3D图形编程的书籍。 Addison-Wesley Learning Series是计算机科学领域的一系列...

    android OpenGL学习笔记(一)

    在本篇“Android OpenGL 学习笔记(一)”中,我们将探讨如何在Android平台上使用OpenGL ES进行图形渲染。OpenGL ES是OpenGL的一个轻量级版本,专为嵌入式系统设计,包括移动设备如智能手机和平板电脑。这篇笔记将...

    OpenGL学习资料文档.rar

    本资源集合包含了一套完整的OpenGL学习资料,适合初学者入门。 首先,"OpenGL编程指南第七版"是学习OpenGL的基础书籍,它深入浅出地介绍了OpenGL的工作原理和基本概念,包括上下文创建、窗口系统集成、绘图函数、...

    QT OPENGL学习

    QT OpenGL学习是一个面向初学者和有一定基础的开发者的学习资源,主要关注如何在QT4框架下有效地使用OpenGL进行图形渲染和交互。OpenGL是一个跨语言、跨平台的编程接口,用于渲染2D、3D矢量图形,而QT则是一个强大的...

    openGL 学习手册

    openGL 学习手册 自己从网上总结的 希望对大家有用

    opengl 入门学习资料整理

    OpenGL 入门学习资料整理 OpenGL 作为当前主流的图形 API 之一,它在一些场合具有比 DirectX 更优越的特性。本文主要介绍了入门的基础知识。 一、OpenGL 的优点 1. 与 C 语言紧密结合 OpenGL 命令最初就是用 C ...

    OpenGL学习资料

    OpenGL™ 是行业领域中最为广泛接纳的 2D/3D 图形 API,其自诞生至今已催生了各种计算机平台及设备上的数千优秀应用程序。OpenGL™ 是独立于视窗操作系统或其它操作系统的,亦是网络透明的。在包含CAD、内容创作、...

    OpenGL经典学习书籍

    其次,《OpenGL编程指南》第七版,也被称为“红宝书”,是OpenGL学习的经典之作。这本书全面介绍了OpenGL 4.x版本,包括新的核心模式、固定功能管道的移除、向量和矩阵运算、着色语言GLSL、纹理、帧缓冲对象、几何...

    OPENGL学习 3D小雪人

    这个“OPENGL学习 3D小雪人”资源是为初学者设计的,旨在帮助他们理解并掌握OpenGL的基础知识,通过创建一个3D小雪人的实例来实践。 3D小雪人的实现涉及多个OpenGL的关键概念和技术: 1. **窗口系统绑定**:在...

    学习笔记OpenGL:VisualStudio2022配置OpenGL环境

    学习笔记OpenGL:VisualStudio2022配置OpenGL环境学习笔记OpenGL:VisualStudio2022配置OpenGL环境学习笔记OpenGL:VisualStudio2022配置OpenGL环境学习笔记OpenGL:VisualStudio2022配置OpenGL环境学习笔记OpenGL:...

    qt+opengl视频学习资料72G

    qt+opengl视频学习资料72G qt+opengl视频学习资料72G qt+opengl视频学习资料72G qt+opengl视频学习资料72G qt+opengl视频学习资料72G qt+opengl视频学习资料72G qt+opengl视频学习资料72G qt+opengl视频学习资料72G ...

Global site tag (gtag.js) - Google Analytics