`
乱世群英
  • 浏览: 18711 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论
文章列表
这篇主要说纹理贴图问题 纹理中的像素为图素 texeture element 纹理是根据镜头与多边形的距离缩放,图素也会缩放。 将每个像素贴图一个图素,就可以贴图。就是说读取一个图,获取这个图的每个点的像素,然后贴到视图窗口的每个像素。 计算方法: 纹理贴图的计算方程 x=U·(P-0)  Y=V·(P-0) 视图窗口中的一个点在多边形上的具体点P z/x=pz/px 顶点用W表示的话,W=(d/pz)/p 要找到点P,就要找到PZ,平面的发现N和平面上的直线是正交 N·(P-0)=0 N·0=N·P 推导过程我就不写了 最后 x=(-v*w·0)/(u*v·w) 用类描述纹理,纹理是 ...
本篇主要对java处理三维图形基本的知识做一下复习。有些地方上篇没仔细讨论。 涉及到上一篇的所有类,做一下规整,还有新的类应用描述。 1.Vector3D 这个类描述三维向量。三维向量就是(x,y,z)一个空间点,或从(0,0,0)到(x,y,z)的 ...
java3d设计的知识面比较多,常见的三维绘制有多边形造型和光束跟踪。 多边形造型(polygon modeling):将虚拟三维时间看做平面多边形。 光束跟踪(ray tracing):建立光束模型,简历眼到光源的模型。 java中常见的利用三维加速卡方法:Java3D和OpenGL关联。 Java3D核心是用OpenGL或DirectX绘制 现在我们用轻量级三维多边形绘制器,暂不用Java3D api 需要数学方面知识,但都很浅。 先考虑一个案例:我们构造一个四边形,然后它可以任意围绕x轴或y轴旋转,并且可以放大缩小。当然也可以围绕Z轴,只不过这样感觉不到3D效果。 解释一下这里的x,y,z ...
现在开始配置键盘 既然要配置键盘,就要使用到swing组件。比如按钮JButton b = new JButton("确定"); 在swing绘制组件时,swing会在AWT事件派生线程中进行所有的绘制工作,当组件改变外观时,组件会调用repaint方法请求重画。按下按钮,动画循环中的下次绘图会改变外观。解决这个问题,就要捕获重画请求,并将其忽略。重画请求是发送到RepaintManager对象,我们可以开发一个类NoRepaintManager覆盖原功能。 package com.jsheng.game.util; import javax.swing.Repaint ...
现在来让Fly移动。上一节已经能够监听键盘。现在对监听键盘事件做进一步封装。 首先设计一个类:GameAction.主要处理所有的键盘与鼠标事件,能够保存事件,在需要的时候调出。并能够设置键贴图,键贴图在另一个类InputManager中实现。所谓键贴图就是将按下的键具备什么功能做一个映射。先来看GameAction:引用Brackeen。 package com.jsheng.game.util; /** * function: company: jsheng * * @author wanghn wanghaining9999@sina.com */ public ...
交互性 前面已经完成了全屏幕,全屏幕下的动画与全屏幕下的动画移动。下面来看交互性问题。用键盘控制Fly的移动。Fly类见上一篇。在这之前先写一个辅助类,CoreSupport。这个类主要完成显示设置和运动动画loop,在开发的类可以再这个类的基础之上,直接继承这个类。 /** * */ package com.jsheng.game.util; import java.awt.Color; import java.awt.DisplayMode; import java.awt.Font; import java.awt.Graphics2D; import jav ...
通过前面的总结,动画已经可以很好的运行了,现在要让动画动起来,这里说的动起来就是能让它运动,不是原地的动画,而是坐标发生的变化。也就是可以再屏幕上独立运动的图形。我们用Fly命名它。 Fly有两个特性,就是位置和速度。位置就是它当前在屏幕中的坐标,速度就是它的速率和运动方向。现在定义Fly这个类 /** * */ package com.jsheng.game.util; import java.awt.Image; /** * company: jsheng * @author wanghn wanghaining9999@sina.com */ ...
上篇说到的动画,在显示上有个比较大的问题,动画在闪烁。这是因为程序不断直接绘制屏幕造成。避免闪烁,我们用双倍缓存。缓存区是绘图时使用的屏外内存。双缓存不是直接绘制屏幕,而是绘制到后缓存区然后复制到屏幕。 page flipping技术。跳过复制缓存区,直接把后缓存区变为显示缓存区。 以上这些情况用BufferStrategy类处理。Jframe,Window这些对象都有BufferStrategy。调用getBufferStrategy()方法。调用show方法显示绘图缓存区,当然之前要用createBufferStrategy()方法创建 如: frame.createBufferSt ...
接下来继续说动画的制作。 我拿QQ的截图随便截了悠嘻猴里的一个小猴子的3个帧的动作,将他们循环播放来模拟一个动画。但图像截的很烂,谁能给提供个素材先谢谢了。 动画的原理: 其实就是一系列的图在迅速的东。动画中的图像叫帧,frame,每一帧有自己显示的时间,不一定相同,有的显示300毫秒,有的可能是100毫秒。 我们用Animation这么一个类来描述动画。 首先建立一个模拟每一帧动画的类AnimationFramepackage com.jsheng.game.util; import java.awt.Image; /** function: * company: jsheng ...
看到最近基于java的游戏文章不少,写一段关于java游戏编程的基本知识。很多内容参考自David Brackeen 个人网址,作为笔记。今日开第一题,日后慢慢更新。有不得当的地方还请多包涵,我会努力改进。 首先说说java游戏编程的基础。 这次总结是基于awt swing java2D这些知识。废话不多说,先来第一部分。 1.全屏图形。 显示的硬件分 显卡和显示器。显卡的内存将存储屏幕上的内容,并且将内存中的内容在显示器上显示。显示器的屏幕用像素表示。一般是800*600/1280*1024之类。 另外还有位深度的概念。比如8,16,24,32位。 8是2的八次方  =216中颜色,以此类推。 ...
Global site tag (gtag.js) - Google Analytics