Code:

//-----------------------------------------------------------------------------line
function boldline3d(&_start, &_end, &_color, _alpha)
{
var _s[3];
var _e[3];
vec_set(_s, _start);
vec_set(_e, _end);
vec_to_screen(_s, camera);
vec_to_screen(_e, camera);

// todo: clipping algorithm?

if (_s.z > camera.clip_near && _e.z > camera.clip_near) // if there is no distortion
{
// bold line 3x3
draw_line(_s, null, _alpha);
draw_line(_s, _color, _alpha);
draw_line(_e, _color, _alpha);
draw_line(vector(_s.x+1, _s.y+1, 0), null, _alpha);
draw_line(vector(_e.x+1, _e.y+1, 0), _color, _alpha);
draw_line(vector(_s.x-1, _s.y-1, 0), null, _alpha);
draw_line(vector(_e.x-1, _e.y-1, 0), _color, _alpha);
draw_line(vector(_s.x+1, _s.y-1, 0), null, _alpha);
draw_line(vector(_e.x+1, _e.y-1, 0), _color, _alpha);
draw_line(vector(_s.x-1, _s.y+1, 0), null, _alpha);
draw_line(vector(_e.x-1, _e.y+1, 0), _color, _alpha);
draw_line(vector(_s.x, _s.y+1, 0), null, _alpha);
draw_line(vector(_e.x, _e.y+1, 0), _color, _alpha);
draw_line(vector(_s.x, _s.y-1, 0), null, _alpha);
draw_line(vector(_e.x, _e.y-1, 0), _color, _alpha);
draw_line(vector(_s.x+1, _s.y, 0), null, _alpha);
draw_line(vector(_e.x+1, _e.y, 0), _color, _alpha);
draw_line(vector(_s.x-1, _s.y, 0), null, _alpha);
draw_line(vector(_e.x-1, _e.y, 0), _color, _alpha);
}
}

function line3d(&_start, &_end, &_color, _alpha)
{
var _s[3];
var _e[3];
vec_set(_s, _start);
vec_set(_e, _end);
vec_to_screen(_s, camera);
vec_to_screen(_e, camera);

// todo: clipping algorithm?

if (_s.z > camera.clip_near && _e.z > camera.clip_near) // if there is no distortion
{
draw_line(_s, null, _alpha);
draw_line(_s, _color, _alpha);
draw_line(_e, _color, _alpha);
}
}

//-----------------------------------------------------------------------------box
var p1[3];
var p2[3];
var p3[3];
var p4[3];
var p5[3];
var p6[3];
var p7[3];
var p8[3];
function drawbox(_entity, &_color, _alpha)
{
you = _entity;
vec_set(p1, vector(you.min_x, you.min_y, you.min_z));
vec_set(p2, vector(you.min_x, you.max_y, you.min_z));
vec_set(p3, vector(you.max_x, you.max_y, you.min_z));
vec_set(p4, vector(you.max_x, you.min_y, you.min_z));
vec_set(p5, vector(you.min_x, you.min_y, you.max_z));
vec_set(p6, vector(you.min_x, you.max_y, you.max_z));
vec_set(p7, vector(you.max_x, you.max_y, you.max_z));
vec_set(p8, vector(you.max_x, you.min_y, you.max_z));
vec_rotate(p1, you.pan); vec_add(p1, you.x);
vec_rotate(p2, you.pan); vec_add(p2, you.x);
vec_rotate(p3, you.pan); vec_add(p3, you.x);
vec_rotate(p4, you.pan); vec_add(p4, you.x);
vec_rotate(p5, you.pan); vec_add(p5, you.x);
vec_rotate(p6, you.pan); vec_add(p6, you.x);
vec_rotate(p7, you.pan); vec_add(p7, you.x);
vec_rotate(p8, you.pan); vec_add(p8, you.x);
line3d(p1, p2, _color, _alpha);
line3d(p2, p3, _color, _alpha);
line3d(p3, p4, _color, _alpha);
line3d(p4, p1, _color, _alpha);
line3d(p1, p5, _color, _alpha);
line3d(p2, p6, _color, _alpha);
line3d(p3, p7, _color, _alpha);
line3d(p4, p8, _color, _alpha);
line3d(p5, p6, _color, _alpha);
line3d(p6, p7, _color, _alpha);
line3d(p7, p8, _color, _alpha);
line3d(p8, p5, _color, _alpha);
}



ich habe draw_line zum zeichnen von 3d linien ohne z-buffering missbraucht. man sollte besser mal eine kleine dll mit verschiedenen draw funktionen schreiben, aber ich kenn mich mit direct3d nicht aus.