Android之3D物理引擎

jpct_ae 安卓创建3d视图效果 jpct的基本使用 简单介绍下jpct的基本用法 阅读详情

Android之3D物理引擎


Android下有很多优秀的3D物理引擎,如alien3d,gamine,jpct等,今天,我们介绍如何使用jpct(选这个引擎是因为它的官网上的Demo和ScreenShots很不错)



1.

在http://www.jpct.net/下载jpct,jpct全部都是用Java写的,有两个版本,一个是在桌面OS上运行的(如Windows,Linux等),另一个是在Android上运行的,我们把这两个都下载下来,我们都会用到。

以下是官网的一些截图,很不错:










2.

我下载的桌面版是jpctapi.zip,Android版是jpct-ae.zip

分别解压。



下面我们要正式开始了,我们今天要做三个实验,第一个是掌握如何编译jpct的Demo,第二个是如何使用jpct写一个HelloWorld,第三个是用jpct写一个在Android上跑的3D程序并下载到真机上运行。前两个实验都用桌面版的jpct,最后一个实验用Android版的jpct。下面我们正式开始:



实验一:

打开jpct的example,有四个example,以car为例:

分别运行如下命令:

unzip jpctapi.zip
cd jpct/examples/car

chmod 777 run_java.sh

./run_java.sh

就会弹出一个窗口,如下:




同时控制台输入如下内容:

Adding Lightsource: 0
Adding Lightsource: 1
Adding Lightsource: 2
Loading Texture...textures/other/numbers.jpg
Loading Texture...textures/rocks.jpg
Loading file models/terascene.3ds
File models/terascene.3ds loaded...146731 bytes
Processing new material Material!
Processing object from 3DS-file: t3_whole
Object 't3_whole_jPCT0' created using 7200 polygons and 3721 vertices.
Loading Texture...textures/spot.jpg
Created 1485 triangle-strips for t3_whole_jPCT0 in 1 pass(es)
Loading Texture...textures/spot.jpg
Loading Texture...textures/decal.jpg
Loading Texture...textures/radar.jpg
Loading Texture...textures/plant.jpg
Loading Texture...textures/plant2.jpg
Loading file models/plant.3ds
File models/plant.3ds loaded...1307 bytes
Processing new material Material!
Processing object from 3DS-file: skin
Object 'skin_jPCT129' created using 34 polygons and 29 vertices.
Loading Texture...textures/skidmark.jpg
Building octree for 7200 triangles!
Octree constructed with 517 nodes / 423 leafs.
Java version is: 1.6.0_26
-> support for BufferedImage
Version helper for 1.5+ initialized!
-> using BufferedImage
Software renderer (OpenGL mode) initialized
Software renderer disposed
Software renderer (OpenGL mode) initialized
339-361 -> using splitted buffer access!
New WorldProcessor created using 1 thread(s) and granularity of 1!
Creating new world processor buffer for thread main
Software renderer disposed


这是一个小车3D游戏,按方向键,小车会在高低不平的山坡上移动,如下:




下面的截图是另一个example:fps的截图:




至此,我们学会了如何编译Demo,下面是一个小小的补充:如何在Eclipse中编译:


1.

在Eclipse中新建一个Java project,取名为Demo



2.

将car/src/下的java源文件全部copy到Demo/src里去,同时将car/models和car/textures也一同copy到Demo下,完成后的结果如下图:



3.

右击Demo,选择Properties,在Java Build Path的Libaries下,点击"Add External JARs...",把jpct.jar加入到Project中去,如下图:




4.

点击Run As Java Application就可以了,效果和之前的一样。


至此,第一个实验完成!




实验二:

我们要用Eclipse来写一个3D程序,主要的程序就是官网的HelloWorld,官网的Wiki有对它的详细说明:

http://www.jpct.net/wiki/index.php/Hello_World



1.

新建一个HelloWorld的Java Project,和第一步一样,把jpct.jar加入到Libraries中



2.

新建一个HelloWorld类,输入如下内容:

import javax.swing.JFrame;

import com.threed.jpct.FrameBuffer;
import com.threed.jpct.IRenderer;
import com.threed.jpct.Object3D;
import com.threed.jpct.Primitives;
import com.threed.jpct.Texture;
import com.threed.jpct.TextureManager;
import com.threed.jpct.World;


public class HelloWorld {

	private World world;
	private FrameBuffer buffer;
	private Object3D box;
	private JFrame frame;

	public static void main(String[] args) throws Exception {
		new HelloWorld().loop();
	}

	public HelloWorld() throws Exception {
		
		frame=new JFrame("Hello world");
		frame.setSize(800, 600);
		frame.setVisible(true);
		frame.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
		
		world = new World();
		world.setAmbientLight(0, 255, 0);

		TextureManager.getInstance().addTexture("box", new Texture("box.jpg"));

		box = Primitives.getBox(13f, 2f);
		box.setTexture("box");
		box.setEnvmapped(Object3D.ENVMAP_ENABLED);
		box.build();
		world.addObject(box);

		world.getCamera().setPosition(50, -50, -5);
		world.getCamera().lookAt(box.getTransformedCenter());
	}

	private void loop() throws Exception {
		buffer = new FrameBuffer(800, 600, FrameBuffer.SAMPLINGMODE_NORMAL);

		while (frame.isShowing()) {
			box.rotateY(0.01f);
			buffer.clear(java.awt.Color.BLUE);
			world.renderScene(buffer);
			world.draw(buffer);
			buffer.update();
			buffer.display(frame.getGraphics());
			Thread.sleep(10);
		}
		buffer.disableRenderer(IRenderer.RENDERER_OPENGL);
		buffer.dispose();
		frame.dispose();
		System.exit(0);
	}
}



3.

将examples/helloworld/下的box.jpg拷贝到HelloWorld下,因为我们的程序里用到了它



4.

点击Run As Java Application就可以了,如下图:




这是一个在不停旋转的长方体。



其实,我们也可以直接运行Demo的Helloworld:

cd jpct/examples/helloworld

chmod 777 run_software.sh

./run_software.sh



注意,在helloworld下一共有三个不同平台的版本:OpenGL,awtgl和软件模拟的OpenGL,我们的例子用的就是软件模拟的OpenGL(我的机器无法运行OpenGL的版本,很奇怪!),你也可以试试其他版本的,效果是一样的



至此,第二个实验完成,我们用jpct写了一个HelloWorld



第三个实验

我们写一个Android下跑的3D程序:屏幕中央有一个正方体,用手拖动到不同的地方会朝那个地方旋转,这里这样参考了官网的Demo:http://www.jpct.net/wiki/index.php/Hello_World_for_Android



1.

新建一个Demo的Android Project,如下:




2.

将jpct-ae.jar加入到Project中(注意,不是jpct.jar)



3.

修改DemoActivity.java如下:

package com.test.demo;

import java.lang.reflect.Field;

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

import android.app.Activity;
import android.opengl.GLSurfaceView;
import android.os.Bundle;
import android.view.MotionEvent;

import com.threed.jpct.Camera;
import com.threed.jpct.FrameBuffer;
import com.threed.jpct.Light;
import com.threed.jpct.Logger;
import com.threed.jpct.Object3D;
import com.threed.jpct.Primitives;
import com.threed.jpct.RGBColor;
import com.threed.jpct.SimpleVector;
import com.threed.jpct.Texture;
import com.threed.jpct.TextureManager;
import com.threed.jpct.World;
import com.threed.jpct.util.BitmapHelper;
import com.threed.jpct.util.MemoryHelper;


public class DemoActivity extends Activity {

	// Used to handle pause and resume...
	private static DemoActivity master = null;

	private GLSurfaceView mGLView;
	private MyRenderer renderer = null;
	private FrameBuffer fb = null;
	private World world = null;
	private RGBColor back = new RGBColor(50, 50, 100);

	private float touchTurn = 0;
	private float touchTurnUp = 0;

	private float xpos = -1;
	private float ypos = -1;

	private Object3D cube = null;
	private int fps = 0;

	private Light sun = null;

	protected void onCreate(Bundle savedInstanceState) {

		Logger.log("onCreate");

		if (master != null) {
			copy(master);
		}

		super.onCreate(savedInstanceState);
		mGLView = new GLSurfaceView(getApplication());

		mGLView.setEGLConfigChooser(new GLSurfaceView.EGLConfigChooser() {
			public EGLConfig chooseConfig(EGL10 egl, EGLDisplay display) {
				// Ensure that we get a 16bit framebuffer. Otherwise, we'll fall
				// back to Pixelflinger on some device (read: Samsung I7500)
				int[] attributes = new int[] { EGL10.EGL_DEPTH_SIZE, 16, EGL10.EGL_NONE };
				EGLConfig[] configs = new EGLConfig[1];
				int[] result = new int[1];
				egl.eglChooseConfig(display, attributes, configs, 1, result);
				return configs[0];
			}
		});

		renderer = new MyRenderer();
		mGLView.setRenderer(renderer);
		setContentView(mGLView);
	}

	@Override
	protected void onPause() {
		super.onPause();
		mGLView.onPause();
	}

	@Override
	protected void onResume() {
		super.onResume();
		mGLView.onResume();
	}

	@Override
	protected void onStop() {
		super.onStop();
	}

	private void copy(Object src) {
		try {
			Logger.log("Copying data from master Activity!");
			Field[] fs = src.getClass().getDeclaredFields();
			for (Field f : fs) {
				f.setAccessible(true);
				f.set(this, f.get(src));
			}
		} catch (Exception e) {
			throw new RuntimeException(e);
		}
	}

	public boolean onTouchEvent(MotionEvent me) {

		if (me.getAction() == MotionEvent.ACTION_DOWN) {
			xpos = me.getX();
			ypos = me.getY();
			return true;
		}

		if (me.getAction() == MotionEvent.ACTION_UP) {
			xpos = -1;
			ypos = -1;
			touchTurn = 0;
			touchTurnUp = 0;
			return true;
		}

		if (me.getAction() == MotionEvent.ACTION_MOVE) {
			float xd = me.getX() - xpos;
			float yd = me.getY() - ypos;

			xpos = me.getX();
			ypos = me.getY();

			touchTurn = xd / -100f;
			touchTurnUp = yd / -100f;
			return true;
		}

		try {
			Thread.sleep(15);
		} catch (Exception e) {
			// No need for this...
		}

		return super.onTouchEvent(me);
	}

	protected boolean isFullscreenOpaque() {
		return true;
	}

	class MyRenderer implements GLSurfaceView.Renderer {

		private long time = System.currentTimeMillis();

		public MyRenderer() {
		}

		public void onSurfaceChanged(GL10 gl, int w, int h) {
			if (fb != null) {
				fb.dispose();
			}
			fb = new FrameBuffer(gl, w, h);

			if (master == null) {

				world = new World();
				world.setAmbientLight(20, 20, 20);

				sun = new Light(world);
				sun.setIntensity(250, 250, 250);

				// Create a texture out of the icon...:-)
				Texture texture = new Texture(BitmapHelper.rescale(BitmapHelper.convert(getResources().getDrawable(R.drawable.ic_launcher)), 64, 64));
				TextureManager.getInstance().addTexture("texture", texture);

				cube = Primitives.getCube(10);
				cube.calcTextureWrapSpherical();
				cube.setTexture("texture");
				cube.strip();
				cube.build();

				world.addObject(cube);

				Camera cam = world.getCamera();
				cam.moveCamera(Camera.CAMERA_MOVEOUT, 50);
				cam.lookAt(cube.getTransformedCenter());

				SimpleVector sv = new SimpleVector();
				sv.set(cube.getTransformedCenter());
				sv.y -= 100;
				sv.z -= 100;
				sun.setPosition(sv);
				MemoryHelper.compact();

				if (master == null) {
					Logger.log("Saving master Activity!");
					master = DemoActivity.this;
				}
			}
		}

		public void onSurfaceCreated(GL10 gl, EGLConfig config) {
		}

		public void onDrawFrame(GL10 gl) {
			if (touchTurn != 0) {
				cube.rotateY(touchTurn);
				touchTurn = 0;
			}

			if (touchTurnUp != 0) {
				cube.rotateX(touchTurnUp);
				touchTurnUp = 0;
			}

			fb.clear(back);
			world.renderScene(fb);
			world.draw(fb);
			fb.display();

			if (System.currentTimeMillis() - time >= 1000) {
				Logger.log(fps + "fps");
				fps = 0;
				time = System.currentTimeMillis();
			}
			fps++;
		}
	}
}



4.

点击Run As Android Application,打开模拟器,效果如下:




拖动中央的正方体,会朝不同的方向旋转



至此,第三个实验完成,快下载到手机里玩玩吧~~



这三个实验只是jpct的使用而已,更复杂的东西需要看官网的Wiki和相关文档。




完成!

Android三维模型解决方案 阅读详情

相关推荐

Android游戏引擎汇总,android开发模拟器

更多例子: https://code.google.com/p/playn/wiki/DemoLinks gameplay – http://gameplay3d.org/index.php 旨在帮助独立游戏开发的生态系统,开源的跨平台的3D引擎 支持BlackBerry 10、PlayBook、Apple iOS 5+、Android NDK 2.3+、Microsoft Windows 7、Apple MacOS X、Linux 完整着色系统,基于节点的场景图形系统,粒子系统,Full featured

m0_66264169的博客 5499

android jpct ae教程,android OpenGL开发使用JPCT-AE引擎显示3D立方体

在了解JPCT之前得了解什么是opengl,opengl是一个跨语言,跨平台的3D图形编程接口,OpenGL ES (OpenGL for Embedded Systems) 是 OpenGL 三维图形 API 的子集,针对手机、PDA和游戏主机等嵌入式设备而设计。而JPCT则是java的一款3D图形引擎,封装了opengl,jPCT-AE是jPCT在android平台上的移植版本。用opengl...

weixin_32165903的博客 1143

Android平台3D赛车游戏完整源码项目实战

Override// 深蓝背景// 启用深度测试// 加载编译着色器@Override@Override// 绑定着色器、设置MVP、绘制模型...必须在中加载资源,因为此时OpenGL上下文才可用。对于更精细的控制(如AR叠加、视频合成),可选用配合手动EGL管理,但这增加了开发复杂度,仅建议高级场景使用。Box2D支持通过和maskBits实现选择性碰撞:这样赛车只会与赛道和障碍物发生碰撞,忽略其他无关对象。

weixin_35757531的博客 832

android jpct ae教程,JPCT-AE for Android 3D (一)----------Hello World创建自己的立方体

CBoxView.javapublic class CBoxView extends GLSurfaceView {private float xpos = -1;private float ypos = -1;CBoxRander mRander;public CBoxView(Context context, AttributeSet attrs) {super(context);// TOD...

weixin_34704521的博客 474

min3D引擎3D动态模型与摇杆控制教程

min3D引擎是专为实时三维图形应用开发的高效图形引擎。它支持多平台,广泛应用于游戏、模拟、数据可视化等领域。min3D引擎的开发理念是通过简化的接口和模块化设计,让开发者能够快速上手并高效地构建复杂的三维场景。在本章中,我们将探讨min3D引擎的设计哲学、技术架构以及API设计原则,为深入了解min3D引擎的其它方面打下坚实的基础。3D模型资源是构建三维场景的基础,而不同的3D模型文件格式有其独特的特点和使用场景。常见的3D模型文件格式包括但不限于:.obj。

weixin_42576467的博客 1161

android使用jpct加载三维模型

Android中使用JPCT+GLSurfaceView的方式加载三维模型文件,Android版本在5.0以上。

八个Android开源游戏引擎

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34347651的博客 499

Android上用jPCT-AE,实现的一个3d场景

用的引擎为jPCT-AE,官网http://www.jpct.net/jpct-ae/,版本1.24 这个例子不错,也是我在网上找的,想学JPCT-AE的朋友们可以下载下来学习下,导入有Android环境的eclipse就可直接运行。 当然想深入了解JPCT-AE还得到官网去把整个引擎下载下来,里面doc文件夹下有详细的文档。

关于Android游戏开发的资料

绝对非常值的资料源 - 一学就会的资料 Android 3D游戏开发技术宝典,完整扫描版 Android 3D游戏开发技术宝典——OpenGL ES 2.0 (吴亚峰) 源代码 Bullet物理引擎不完全指南(Bullet Physics Engine not complete Guide) [OpenGL ES 02]OpenGL ES渲染管线与着色器 数据小妞遭蹂躏?显卡工作的那点事

张青志的专栏 921

flash一些3D和2D物理引擎

flash一些3D和2D物理引擎 BOX2D,FIVE3D,MOTOR2,FLADE,APE.

基于qiime2的16S数据分析全流程:从导入数据到下游分析一条龙

基于qiime2的16s测序数据分析分析激活qiime环境我已经把上面这句代码放在了.bashrc里面,因此激活qiime2环境只需要运行activate_qiime即可/bin/bash# 设置目录路径# 输出表头 echo -e "sample-id\tforward-absolute-filepath\treverse-absolute-filepath"# 遍历_R1和_R2文件do # 检查R1文件是否存在then# 获取样本ID(去掉_R1.fastq.gz)

2301_76771985的博客 5528

【转】八款常见的Android游戏引擎

1、Angle Angle是一款专为Android平台设计的,敏捷且适合快速开发的2D游戏引擎,基于OpenGL ES技术开发。该引擎全部用Java代码编写,并且可以根据自己的需要替换里面的实现,缺陷在于文档不足,而且下载的代码中仅仅包含有少量的示例教程。最低运行环境要求不详。项目地址:http://code.google.com/p/angle/ 2、Rokon rokon是一款Android ...

shappy1978的专栏 257

热测试芯片(TTC)在ASIC热设计中的关键作用与应用

热测试芯片(TTC)是半导体热管理领域的重要工具,通过物理仿真技术精确测量芯片温度分布。其核心原理是利用金属膜电阻和二极管传感器阵列,实现微米级空间分辨率和毫秒级动态响应。在工程实践中,TTC能有效预防热岛效应、优化散热设计,特别适用于AI加速芯片、3D堆叠封装等先进半导体器件。相比传统热仿真软件,TTC提供更真实的温度数据,帮助工程师在流片前发现潜在热问题。随着1mm微型单元技术的突破,TTC已能检测0.3mm²微小区域的热变化,满足GaN/SiC等宽禁带半导体器件的测试需求。

weixin_33688840的博客 509

Android 8款开源游戏引擎

1、Angle (2D Java) Angle是一款专为Android平台设计的,敏捷且适合快速开发的2D游戏引擎,基于OpenGLES技术开发。该引擎全部用Java代码编写,并且可以根据自己的需要替换里面的实现,缺陷在于文档不足,而且下载的代码中仅仅包含有少量的示例教程。 最低运行环境要求不详。 项目地址:http://code.google.com/p/angle/ 2、Rokon (2D ...

www.itmmd.com 103

LangGraph实战:用Python异步构建智能客服多轮对话系统(附完整代码)

本文详细介绍了如何使用LangGraph框架和Python异步编程构建一个高性能的智能客服多轮对话系统。通过将对话流程建模为有向图,结合thread_id实现多用户对话隔离,并利用异步节点提升系统并发处理能力,有效解决了传统客服系统上下文遗忘与高并发瓶颈问题。文章提供了从环境搭建、状态管理、异步优化到复杂业务逻辑与部署的完整实战代码。

weixin_29055137的博客 151

深度残差网络的无人机多目标识别

深度残差网络的无人机多目标识别 人工智能技术与咨询 来源:《图学学报》。作者翟进有等 摘要:传统目标识别算法中,经典的区域建议网络(RPN)在提取目标候选区域时计算量大,时间复杂度较高,因此提出一种级联区域建议网络(CRPN)的搜索模式对其进行改善。此外,深层次的卷积神经网络训练中易产生退化现象,而引入残差学习的深度残差网络(ResNet),能够有效抑制该现象。对多种不同深度以及不同参数的网络模型进行研究,将两层残差学习模块与三层残差学习模块结合使用,设计出一种占用内存更小、时间复杂度更低的新型多捷.

m0_62870606的博客 3115

Android 3D游戏开发技术宝典pdf

下载地址:网盘下载《Android 3D游戏开发技术宝典:OpenGL ES 2.0》内容简介:随着智能手机移动嵌入式平台硬件性能的不断提升,3D游戏应用也逐渐普及开来。《Android 3D游戏开发技术宝典:OpenGL ES 2.0》结合作者多年从事3D游戏应用开发的宝贵经验,全面介绍了与Android平台相关的必知必会的基础知识及大型完整3D案例,讲解上...

weixin_30732825的博客 450

国民技术N32G45X低功耗问题之更改全局变量和栈在RAM中的地址

最近项目中用的MCU是国民技术的N32G45X,MCU的资源很丰富,RAM也很大,配套的库和例程也比较全,用起来还是不错的,但是在调试低功耗的时候还是费了不少劲。 首先由于项目低功耗需要,只能选择停机模式2(STOP2)。根据数据手册的描述,在此模式下外部低速时钟开启, RTC运行, R-SRAM保持,所有I/O状态保持,独立看门狗处于关闭状态,25℃的条件下电流为10个微安。 用的这款MCU的RAM是144KB,分为SRAM(128KB)和R-SRAM( Retention SRAM – 16KB),如果

狂想家 2486

《Android 3D游戏开发技术宝典——OpenGL ES 2.0》.(吴亚峰).[PDF]&ckook

图书作者:吴亚峰 图书编号:9787115277701 图书格式:PDF 出版社:人民邮电出版社 出版年份:2012 图书页数:700-800 [内容简介]随着智能手机移动嵌入式平台硬件性能的不断提升,3d游戏应用也逐渐普及开来。《android 3d游戏开发技术宝典——opengl es 2.0》结合作者多年从事3d游戏应用开发的宝贵经验,全面介绍了与a...

weixin_30270889的博客 430

少儿学编程系列--使用递归画出龙形曲线DragonCurve

龙形曲线(Dragon Curve) 龙形曲线(Dragon Curve)又叫分形龙,是一种自相似碎形曲线的统称,因形似龙的蜿蜒盘曲而得名 使用黄金比例画龙形曲线 根据黄金比例画一条龙曲线。每次递归,第一步向左转32.89度,移动0.74倍原距离;第二个递归步骤向右转46.99度,移动原来距离的0.55倍。请查看这个网页(https://larryriddle.agnesscott.org/ifs/heighway/goldenDragon.htm)了解关于龙形黄线数学的细节 龙形曲线效果 .

penriver的博客 2298

uniapp(全端兼容) - 最新详细实现pdf在线预览功能,uniapp内置预览PDF文件功能,uniapp在安卓app|苹果app|h5网页网站|微信小程序中打开pdf进行在线预览(详细示例源码)

uni-app,安卓Android,苹果ios,App端,H5网页,移动端网站,微信小程序,支付宝小程序,nvue,vue,pdf文档,pdf文件,office,uniapp 预览pdf,uniapp怎么做pdf预览,uniapp如何实现全平台兼容的pdf在线预览,uniapp怎么在h5打开pdf文档,实现PDF在线预览,H5移动端文件预览pdf,文件下载和预览,uniapp App端pdf文件预览,app移动端在线预览pdf文件,无法预览pdf怎么办,有没有预览pdf的插件,根本打不开咋办,uniapp使

✅ 精选推荐文章 1万+

(转)Android 8款开源游戏引擎

1、Angle  (2D    Java) Angle是一款专为Android平台设计的,敏捷且适合快速开发的2D游戏引擎,基于OpenGLES技术开发。该引擎全部用Java代码编写,并且可以根据自己的需要替换里面的实现,缺陷在于文档不足,而且下载的代码中仅仅包含有少量的示例教程。 最低运行环境要求不详。 项目地址:http://code.google.com/p/angle/

gxj1680的专栏 706

VTK 显示大量点云数据及交互(点云拾取、着色、测量等)功能

VTK (Visualization Toolkit) 是一个强大的开源可视化库,非常适合处理点云数据。下面将介绍如何使用 VTK 显示大量点云数据,并实现点云拾取、着色、测量等功能。

深之JohnChen的专栏 1997

Android 3D翻页效果终极指南:打造影院级阅读体验

在移动应用开发中,**Android 3D翻页效果**能为电子书、杂志和相册应用带来沉浸式的阅读体验。本文将介绍如何利用开源项目`android-PageFlip`快速实现这一高级UI效果,让你的应用瞬间提升专业质感与用户体验。 ## 什么是Android 3D翻页效果? 3D翻页效果通过模拟真实纸张的翻折、阴影和立体感,让数字内容浏览变得更加直观和愉悦。这种交互方式常见于电子书阅读器、漫画应

gitblog_00402的博客 462

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

jre9下载 jdk9

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

从零构建跨平台3D游戏:libgdx实战进阶指南

libgdx是一款强大的跨平台Java游戏开发框架,支持在Desktop、Android、HTML5和iOS等多个平台上开发游戏。本指南将带你快速掌握libgdx的核心功能,从零开始构建你的第一个跨平台3D游戏项目。 ## 🚀 为什么选择libgdx开发跨平台游戏? libgdx框架为游戏开发者提供了丰富的功能和工具,使其成为开发跨平台游戏的理想选择: - **一次编写,多平台部署**:使

gitblog_00793的博客 443

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

上一篇: Ubuntu下搭建JavaEE开发环境
下一篇: Android上使用Box2d
htttw
博客等级 码龄18年 378粉丝 73原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值