`
izuoyan
  • 浏览: 9221071 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

介绍JSR184(3D)中的光线概念

阅读更多

作者:longzy 文章来源:http://www.j2medev.com/Article/ShowArticle.asp?ArticleID=669

把光线加进3D场景中可以给3D最终的外观带来一个巨大的变化。但是这里有很多东西需要思考,同时结果也不会总是和预期的一样。这篇文章描述怎样把光线加入一个由JSR184开发的3D的场景中,和怎样设置一个物体的材质(material)。



在我们开始之前,需要知道一个很重要的事情:添加光线到一个3D场景中对于性能来说是一个代价很高的操作,必须时刻记住。

JSR184中有4个不同的光线选项。

Ambient(周围):在一个无限的时间点上,光线以分散的形式在环境表面上照射,使光源不可能决定。这种光线的位置和方向不会影响最终的结果。(其实就是物体表面发光,太阳散射)

Directional(方向):举个真实世界的例子就是太阳光照到物体表面,光线被平均的分散到各个方向。这种光线的位置不会影响最终结果。

Omnidirectional(全方向):这种光线能被认为是一点光,光线被光源平均分配到各个方向,你能通过改变光源的位置来改变最终的结果,但是改变方向不能影响结果。

Spot(斑点):这种光线在已选择的方向上射出一道锥形的光线,这道锥形光线的宽和强度能改变,而且它的位置和方向能影响3D场景。

一条法线的意思是:相对于平面90度角的矢量。(垂直线)

JSR184中我们为被用于物体外型上的每一个点输入一条法线,下面的代码告诉我们它能实现一个棱锥,必须要记住输入法线的取值范围在-127~127的角度之间。

// 棱锥的最高点. x, y, z
short []POINTS = new short[] {

-1, -1, 1,1, -1, 1, 0, 1, 0, //
1, -1, 1, 1, -1, -1, 0, 1, 0, //

1, -1, -1, -1, -1, -1, 0, 1, 0, //

-1, -1, -1, -1, -1, 1, 0, 1, 0, //

-1, -1, 1, 1, -1, 1, 1, -1, -1, //
下右
-1, -1, 1, 1, -1, -1, -1, -1, -1}; //
下左

// 棱锥的底角为70
short []NORMALS = new short[] {

0, 56,113,0, 56, 113, 0, 56, 113,
113,56,0, 113,56,0, 113,56,0, 0,56,-113, 0,56,-113, 0,56,-113, -113,56,0, -113,56,0, -113,56,0,0,-127,0, 0,-127,0, 0,-127,0, 0, -127,0, 0, -127,0, 0, -127,0};

我们还可以设置网眼的材质。

Material material = new Material();
material.setVertexColorTrackingEnable(true);
appearance.setMaterial(material);
mesh.setAppearance(0, appearance);

光线在物体外型上的反射受材质颜色的影响。一个红色的材质(0XFF0000)只会出反射红色的光,即使这个光源是纯白色的。同样蓝色的材质只会反射出蓝色的光。

在法线设置和材质添加后,你只需要把光本身添加到场景中。

light = new Light(); // 创建一个新的light对象
light.translate(<chmetcnv tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="0" unitname="F" w:st="on">0.0f</chmetcnv>, <chmetcnv tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="0" unitname="F" w:st="on">0.0f</chmetcnv>, <chmetcnv tcsc="0" numbertype="1" negative="True" hasspace="False" sourcevalue="1" unitname="F" w:st="on">-1.0f</chmetcnv>); // Light
的位置
light.setMode(Light.AMBIENT); // Light
模式
light.setColor(0xFFFFFF); // Light
的颜色 白色

world.addChild(light); // 把光线添加到场景

这就是本文介绍的内容,难点在于使得你的应用程序运行的和你期望的一样,通常这比你最初认为的要难很多。你可以在下面下载一个小的关于JSR184光线的MIDLET程序。

从这里下载JSR814Light

分享到:
评论

相关推荐

    JSR-184.zip_JSR184 3D_jsr184

    用jsr184编写的手机3d编程实例,用户可以任意旋转箭头,放大缩小等等。包含如何使用数据定义mesh,如何操作camera如何旋转等等,程序功能较繁杂,但是界面较粗糙(数据定义的模型当然是越简单越好啦),学习意义大于...

    [JSR-184][3D编程指南]Part II: Light 3D theory and orientation

    此外,博客中可能还介绍了如何结合JSR-184来实现复杂的3D场景。这可能包括创建3D对象,如立方体、球体等,以及将它们组织成层次结构的场景图。场景图允许开发者通过父子关系来管理物体的变换,使得复杂场景的管理变...

    jsr_184_midlet.rar_DEMO_jsr184_jsr184-m3g.jar_m3g

    在提供的压缩包"jsr_184_midlet.rar_DEMO_jsr184_jsr184-m3g.jar_m3g"中,我们可以看到与JSR 184相关的几个关键元素: 1. **DEMO**:这是一个演示程序,用于展示JSR 184技术的实际应用。通过这个DEMO,开发者或用户...

    m3g 3d jsr184中文文档

    学习JSR 184和M3G API时,建议从基础概念入手,了解3D图形的基本原理,然后逐步深入到各个类和方法的使用。通过创建简单的3D场景,比如旋转的立方体或动态的纹理贴图,来熟悉API的运作方式。随着技能的提升,可以...

    j2me jsr184 api

    在提供的压缩包中,`jsr184 M3G API`很可能是包含了JSR 184的实现库或者相关文档,对于想要在J2ME平台上进行3D图形开发的开发者来说,这是一个宝贵的资源。通过深入学习和实践,可以掌握如何利用这些API创建引人入胜...

    jsr184+M3G+API.rar

    【标题】"jsr184+M3G+API.rar" 涉及到的主要技术是Java Mobile 3D Graphics API(JSR 184)和M3G(Mobile 3D Graphics)标准,以及相关的API接口。JSR 184是Java Community Process发布的一个规范,目的是为Java ME...

    (Himi)j2me3D游戏开发api

    【标题】"Himi"所涉及的是一种基于J2ME平台的3D游戏开发API,主要利用了JSR184规范。这个标题暗示我们将会探讨如何使用Java技术在移动设备上创建三维游戏。 【描述】"j2me3D游戏开发api ,jsr184"表明该资源是关于...

    j2ME jsr 184

    **J2ME JSR 184:移动3D图形API技术规范** J2ME(Java 2 Micro Edition)是Java平台的一个子集,专为嵌入式设备和移动设备设计,如手机和平板电脑。JSR(Java Specification Requests)是Java社区进程中的一个关键...

    J2ME_M3G_API.rar_M3G API_j2me 3d_j2me m_jsr 184 api c_m3g a

    JSR 184(Java Specification Request 184)定义了这个API,旨在为小型设备提供高效且易于使用的3D图形接口。 **M3G API** 是J2ME中的一个重要组成部分,它提供了一组类和接口,使得开发人员能够利用有限的移动设备...

    [JSR-184][3D编程指南]Part I: Quick jump into the world of Mobile Java 3D programming

    【JSR-184】是Java Micro Edition (Java ME)平台中的一项规范,全称为“Mobile 3D Graphics API”。这个规范旨在为移动设备提供3D图形编程接口,使得开发者能够在小型设备上构建丰富的三维应用程序,如游戏、虚拟...

    [JSR-184][3D编程指南]Part IV:M3G built-in collision,light physics and camera perspec

    【JSR-184】是Java Micro Edition (Java ME) 中的一项标准,全称为“Mobile 3D Graphics API”,它定义了一套用于在移动设备上进行3D图形编程的接口。JSR-184的目标是让开发者能够在资源有限的移动设备上创建高质量...

    3-D_Game_Development_on_JSR-184_v1_0_3

    1. **基础概念**:介绍3D图形的基本概念,如坐标系统、视点、摄像机、物体渲染等,以及如何在J2ME环境中设置这些元素。 2. **几何对象与场景图**:讲解如何创建和操作基本几何形状,并通过场景图组织3D世界中的元素...

    [JSR-184][3D编程指南]Part III: Particle systems and immediate mode rendering (2)

    【JSR-184】是Java Micro Edition (Java ME) 中的一个标准,全称为"Mobile 3D Graphics API",旨在为移动设备提供3D图形编程接口。这个标准允许开发者在小型设备上创建复杂的3D图形应用,比如游戏或者可视化工具。本...

    jsr168和jsr268中文文档及开发手册

    JSR168的核心概念包括: 1. Portlet容器:提供portlet运行环境,负责portlet的初始化、渲染、事件处理等。 2. Portlet生命周期:包括初始化、加载、渲染、销毁等阶段。 3. Render请求和Action请求:portlet接收两种...

    dg_java_3d_cn_r33a.rar_micro3D

    本资料集是针对索爱(Sony Ericsson)手机平台的3D开发入门教程,主要围绕JSR184(Mobile 3D Graphics API)和Micro3D两个核心概念展开,旨在帮助开发者快速掌握移动设备上的3D图形编程。 JSR184,全称为Java ...

    [JSR-184][3D编程指南]Part V: Heightmap terrain rendering using M3G

    【JSR-184】是Java Micro Edition (Java ME) 中的一项标准,它定义了Mobile 3D Graphics API,也称为M3G。M3G是为了在移动设备上实现高性能的3D图形渲染而设计的,使得开发者可以创建丰富的3D游戏和应用。这篇【3D...

    3D宝箧塔形状基础模型代码

    在实际编码过程中,你需要定义每个3D形状的顶点坐标,然后利用JSR184提供的渲染功能将它们绘制到屏幕上。此外,可能还需要考虑光照、纹理映射等高级3D效果,以增强视觉表现。 文件名“BQYT”可能是指宝箧印塔的具体...

    JSR268门户标准

    JSR286引入了共享呈现参数的概念,使得portlet能够访问并共享其他portlet的呈现参数。这一特性增加了portlet之间的交互性和灵活性。 - **portlet私有呈现参数**:每个portlet都有自己的呈现参数。 - **共享呈现参数...

    j2me 3D 旋转的头

    JSR 184全称为Java Specification Request 184,是Java Micro Edition中的一项标准,旨在为移动设备提供一种轻量级的3D图形库。这个API提供了创建、操作3D物体和场景的工具,包括几何形状的构建、光照处理、纹理映射...

Global site tag (gtag.js) - Google Analytics