`
yidongkaifa
  • 浏览: 4069959 次
文章分类
社区版块
存档分类
最新评论

【Android开发学习15】Android OpenGL ES 纹理映射之glDrawArrays

 
阅读更多

目标: 为四方体的每个面贴上一张图片,并自动旋转。

一、基础知识:


1.初始化:

// 1.允许2D贴图,纹理
gl.glEnable(GL10.GL_TEXTURE_2D);
// 2.创建纹理
gl.glGenTextures(1, textureids, 0);
// 3.绑定要使用的纹理
gl.glBindTexture(GL10.GL_TEXTURE_2D, textureids[0]);
// 4.生成纹理
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, GLImage.iBitmap, 0);
// 5.线性滤波
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.使用:

// 1.清除屏幕和深度缓存
gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
// 2.重置当前的模型观察矩阵
gl.glLoadIdentity();
// 3.开启顶点和纹理功能(开启顶点和纹理缓冲)
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
// 4.设置点点和纹理
gl.glVertexPointer(3, GL10.GL_FIXED, 0, vertexBuffer);
gl.glTexCoordPointer(2, GL10.GL_FIXED, 0, texBuffer);
// 5.向z轴里移入6.0f
gl.glTranslatef(0.0f, 0.0f, -5.0f);
// 6.设置3个方向的旋转
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);
// 7.绘制正方体
for (int i = 0; i < 6; i++) {
switch(i)
{
case 0:
// 8.生成纹理
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, GLImage.iBitmap, 0);
break;
}
gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, i * 4, 4);
}

// 9.关闭顶点和纹理功能
gl.glDisableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);

// 10.调节旋转角度
xrot+=0.5f;
yrot+=0.4f;
zrot+=0.6f;

3.补充说明,相对上一节中,我多添加了一个函数:

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

        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);
    }

主要是对各个面的顶点做一个初始化。

二、实现:

1. 界面编辑:
res\layout\main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<TextView  
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="@string/hello"
    />

<Button
    android:id="@+id/button1"
    android:layout_width="145dp"
    android:layout_height="wrap_content"
    android:text="演示开始" />

</LinearLayout>


2.代码编辑:
\src\com\yarin\android\Examples\Activity01.java

package com.yarin.android.Examples_12_05;

import java.io.IOException;
import java.io.InputStream;

import javax.microedition.khronos.opengles.GL10;

import android.app.Activity;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.opengl.GLSurfaceView;
import android.opengl.GLUtils;
import android.opengl.GLSurfaceView.Renderer;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class Activity01 extends Activity
{
	Renderer render = new GLRender(this);
	GLSurfaceView glView;
	Button start;			// 演示开始

	
	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		GLImage.load(this.getResources());
		glView = new GLSurfaceView(this);
		
		
		glView.setRenderer(render);
		setContentView(R.layout.main);
		start=(Button)findViewById(R.id.button1);	// "演示开始"按钮初始化
		start.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				setContentView(glView);
			}
		});
		

		//setContentView(glView);
	}
}


class GLImage
{
	public static Bitmap iBitmap;
	public static Bitmap jBitmap;
	public static Bitmap kBitmap;
	public static Bitmap lBitmap;
	public static Bitmap mBitmap;
	public static Bitmap nBitmap;
	public static Bitmap close_Bitmap;
	
	
	public static void load(Resources resources)
	{
		iBitmap = BitmapFactory.decodeResource(resources, R.drawable.img);
		jBitmap = BitmapFactory.decodeResource(resources, R.drawable.jmg);
		kBitmap = BitmapFactory.decodeResource(resources, R.drawable.kmg);
		lBitmap = BitmapFactory.decodeResource(resources, R.drawable.lmg);
		mBitmap = BitmapFactory.decodeResource(resources, R.drawable.mmg);
		nBitmap = BitmapFactory.decodeResource(resources, R.drawable.nmg);
		close_Bitmap = BitmapFactory.decodeResource(resources, R.drawable.close);
	}
}


\src\com\yarin\android\Examples\GLRender.java

package com.yarin.android.Examples_12_05;

import java.io.IOException;
import java.io.InputStream;
import java.nio.ByteBuffer;
import java.nio.IntBuffer;
import java.nio.ByteOrder;  

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

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

public class GLRender implements Renderer
{
	public Context context;
    private int[] textureids;
    private IntBuffer vertexBuffer;
    private IntBuffer texBuffer;
    private	float xrot, yrot, zrot;
    private	int one = 0x10000;
	
	// 正方体顶点
    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 GLRender(Context context) {
        this.context = context;
        // 初始化
        textureids = new int[1];

        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)
	{
		// 1.清除屏幕和深度缓存
		gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);

		// 2.重置当前的模型观察矩阵
		gl.glLoadIdentity();
		
		// 3.开启顶点和纹理功能(开启顶点和纹理缓冲)
		gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
		gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
		
	     // 4.设置点点和纹理
        gl.glVertexPointer(3, GL10.GL_FIXED, 0, vertexBuffer);
        gl.glTexCoordPointer(2, GL10.GL_FIXED, 0, texBuffer); 

        // 5.向z轴里移入6.0f
        gl.glTranslatef(0.0f, 0.0f, -5.0f);

        // 6.设置3个方向的旋转
        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);

        // 7.绘制正方体
        for (int i = 0; i < 6; i++) {
        	switch(i)
        	{
        	case 0:
    	        // 8.生成纹理
    	        GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, GLImage.iBitmap, 0);
    	        break;
        	case 1:
    	        // 生成纹理
    	        GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, GLImage.jBitmap, 0);
    	        break;
        	case 2:
    	        // 生成纹理
    	        GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, GLImage.kBitmap, 0);
    	        break;
        	case 3:
    	        // 生成纹理
    	        GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, GLImage.lBitmap, 0);
    	        break;
        	case 4:
    	        // 生成纹理
    	        GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, GLImage.mBitmap, 0);
    	        break;
        	case 5:
    	        // 生成纹理
    	        GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, GLImage.nBitmap, 0);
    	        break;    	                		
        	}
        		
            gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, i * 4, 4);
        }

        // 9.关闭顶点和纹理功能
	    gl.glDisableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
	    gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
	    
	    // 10.调节旋转角度
	    xrot+=0.5f;
	    yrot+=0.4f; 
	    zrot+=0.6f; 
		
	}

	@Override
	public void onSurfaceChanged(GL10 gl, int width, int height)
	{
		float ratio = (float) (width)/height;
		//设置OpenGL场景的大小
		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.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_FASTEST);  

		// 绿色背景
		gl.glClearColor(0, 1, 0, 0);
		
		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);
	
	
		// 1.允许2D贴图,纹理
		gl.glEnable(GL10.GL_TEXTURE_2D);
		// 2.创建纹理
		gl.glGenTextures(1, textureids, 0);
		// 3.绑定要使用的纹理
		gl.glBindTexture(GL10.GL_TEXTURE_2D, textureids[0]);
		// 4.生成纹理
		GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, GLImage.iBitmap, 0);
		
		// 5.线性滤波
		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);
			
	}

}


三、效果:

本文博客源地址:http://blog.csdn.net/ypist

分享到:
评论

相关推荐

    openGLES3.0Example_6_VertexBufferObjects.rar

    此数据必须从客户端内存复制到图形内存时 绘制调用,如glDrawArrays或glDrawElements。 和光栅化。” 然而,如果我们不这样做会好得多 在每个绘制调用上复制顶点数据,但可以缓存 图形存储器中的数据。 这种方法...

    OBJ-Parser:将 3D OBJ 文件转换为矢量和纹理坐标,以使用 glDrawArrays 在 OpenGL 中绘制。 用 Python 编写

    将 OBJ 文件转换为矢量和纹理坐标,以使用 glDrawArrays 在 OpenGL 中绘制。示例 .obj 文件格式解析器当前仅检查以“v”(顶点)、“vt”(顶点纹理)和“f”(面)开头的行。 此外,面应包含 v/vt/n/... 的标准 ....

    10.1.instancing_quads.rar

    一次绘制100个矩形,是一种只调用一次渲染函数却能绘制出很多物体的技术,它节省渲染物体 时从CPU到GPU的通信时间,...将 glDrawArrays 和 glDrawElements 各自改 为 glDrawArraysInstanced 和 glDrawElementsInstanced

    安卓日志分析崩溃拦截相关-这个demo主要讲解了怎样使用log查看日志和怎样控制log的等级.zip

    这个demo主要讲解了怎样使用log查看日志和怎样控制log的等级.zip,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。

    node-v0.10.9-sunos-x86.tar.gz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    ARL-master-wade.zip

    ARL-master-wade.zip

    paralleled FLUS_V2.4.zip

    paralleled FLUS_V2.4.zip

    2121212111111111111111111

    212111111111111

    wx077企业内部员工管理系统-thinkphp5+vue+uniapp-小程序.zip(可运行源码+sql文件+)

    wx077企业内部员工管理系统-thinkphp5+vue+uniapp-小程序.zip 企业内部员工管理系统是一个很好的项目,结合了后端(thinkphp5)、前端(Vue.js)和 uniapp 技术,实现了前后端分离。

    【答辩前参考】用于学生答辩前参考(两套)

    【答辩前参考】用于学生答辩前参考(两套)

    node-v0.8.25-sunos-x86.tar.gz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    课设毕设基于SSM的宠物医院信息管理系统-源码可运行

    课设毕设基于SSM的宠物医院信息管理系统--源码可运行

    基于C语言的天气客户端的实现.zip

    基于C语言的天气客户端的实现.zip

    123pan_2.0.5.exe

    123pan_2.0.5

    Java项目之jspm校园视频监控系统(源码 + 说明文档)

    Java项目之jspm校园视频监控系统(源码 + 说明文档) 第二章 技术介绍 6 2.1 B/S结构简介 6 2.2 MySQL 数据库技术 6 2.3MySQL环境配置 8 2.4Java语言简介 9 2.5 JSP技术 10 2.6 SSM框架 10 第三章 系统分析与设计 11 3.1系统说明 11 3.2系统设计的目标 11 3.3系统设计规则与运行环境 11 3.4系统可行性分析 12 3.4.1技术可行性 12 3.4.2经济可行性 12 3.4.3操作可行性 12 3.4.4运行可行性 13 3.5 系统现状分析 13 3.6系统的设计思想 14 3.7系统功能结构 15 3.8系统流程分析 16 3.8.1操作流程 16 3.8.2添加信息流程 16 3.8.3删除信息流程 17 第四章 数据库设计 18 4.1数据库概念设计 18 4.2数据表设计 18 第五章 系统的详细设计 23 5.1系统首页的设计 23 5.2后台功能模块 25 5.2.1管理员功能模块 25 5.2.2视频管理员功能模块 28 5.2.3用户功能模块 28 第六章 系统的调试和测试 3

    node-v0.8.7-sunos-x64.tar.gz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    node-v0.10.48-darwin-x86.tar.gz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    node-v0.12.12-linux-x64.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    基于用户认证数据构建评估模型预测认证行为风险系统python源码+数据集+多种算法+说明文档.zip

    基于用户认证数据构建评估模型预测认证行为风险系统python源码+数据集+多种算法+说明文档.zip个人经导师指导并认可通过的98分大作业设计项目,适用人群:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业或毕业设计,作为“参考资料”使用。 基于用户认证数据构建评估模型预测认证行为风险系统python源码+数据集+多种算法+说明文档.zip个人经导师指导并认可通过的98分大作业设计项目,适用人群:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业或毕业设计,作为“参考资料”使用。 基于用户认证数据构建评估模型预测认证行为风险系统python源码+数据集+多种算法+说明文档.zip个人经导师指导并认可通过的98分大作业设计项目,适用人群:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业或毕业设计,作为“参考资料”使用。 基于用户认证数据构建评估模型预测认证行为风险系统python源码+数据集+多种算法+说明文档.zip个人经导师指导并认可通过的98分大作业设计项目,适用人群:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业或毕业设计。

    8086汇编语言指令系统

    8086汇编语言指令系统

Global site tag (gtag.js) - Google Analytics