hay what's rong with this

this following programme i run in turbo c 3.0
but i can't see anything but black screen?
can you tell me what sould be the error?
the keyb.c and key_code.h
are simple key board routine
on this web which i download .

#include
#include
#include
#include
#include
#include
#include
#include
#include "c:zxcvkeyb.c"
#include "c:zxcvkey_code.h"


#define SCRNX 320
#define SCRNY 200

unsigned char *VIDEO_ADDRESS = (unsigned char *)0xa0000;
unsigned char *scr = NULL;
float cx=0,cy=0,cz=0;
float cx1=0,cy1=0,cz1=0;

void dograph(void);
void do3d(float [], float , float , float , double ,double , double );
void domain(void);

double cos_fiy, sin_fiy;
double cos_fiz, sin_fiz;
double cos_fix, sin_fix;
float x0,y0,z0, xg,yg,zg;
float cube[]={
1000,8,4,
1,1,1,-1,1,1,-1,1,-1,1,1,-1,
1,-1,1,-1,-1,1,-1,-1,-1,1,-1,-1,
1,0,1,2,
20,1,2,3,
40,4,5,6,
60,5,6,7,
/* 80,
100,
120,
140,
160,
180,
200,
240,*/
};
void main(void)
{
dograph();
domain();
}
void domain(void)
{
int b,x,y;char c;
long start,stop,a=0;
IniKeyb();
memset(scr,0,64000);
start=time(NULL);
while(1)
{

if(key[KEY_Q]){cx1+=0.1;}
if(key[KEY_W]){cy1+=0.1;}
if(key[KEY_E]){cz1+=0.1;}
if(key[KEY_A]){cx1-=0.1;}
if(key[KEY_S]){cy1-=0.1;}
if(key[KEY_D]){cz1-=0.1;}

if(key[KEY_R]){cx+=10;}
if(key[KEY_T]){cy+=10;}
if(key[KEY_Y]){cz+=10;}
if(key[KEY_F]){cx-=10;}
if(key[KEY_G]){cy-=10;}
if(key[KEY_H]){cz-=10;}
if(key[KEY_P]){break;}
do3d(cube , cx, cy, cz, 0, 0, 0);
a++;
}
CloseKeyb();
stop=time(NULL);
asm{
mov ax, 0x03
int 0x10
}
printf("fr=%f",(float)a/(stop-start));
free(scr);
}
void docam(float *x,float *y,float *z,double *fix,double *fiy,double *fiz)
{
x0 = *x-cx;y0 = *y-cy;z0 = *z-cz;
cos_fiy=cos(cy1); sin_fiy=sin(cy1);
cos_fiz=cos(cz1); sin_fiz=sin(cz1);
cos_fix=cos(cx1); sin_fix=sin(cx1);

xg = x0 * cos_fiy + z0 * -sin_fiy;
yg = y0;
zg = x0 * sin_fiy + z0 * cos_fiy;

x0=xg; y0=yg; z0=zg;


xg = x0;
yg = y0 * cos_fix + z0 * -sin_fix;
zg = y0 * sin_fix + z0 * cos_fix;

x0=xg; y0=yg; z0=zg;


xg = x0 * cos_fiz + y0 * -sin_fiz;
yg = x0 * sin_fiz + y0 * cos_fiz;
zg = z0;

*x=xg;
*y=yg;
*z=zg;
*fix+=cx1;
*fiy+=cy1;
*fiz+=cz1;
}
void clear(unsigned char *buf)
{
memset(buf, 0, SCRNX * SCRNY);
}

void copy(unsigned char *dst, unsigned char *src)
{
memcpy(dst, src, SCRNX * SCRNY);
}
void line(unsigned int x,unsigned int x1,unsigned int y,unsigned char c)
{
unsigned int t,i,j;
t=y*320;
i=min(x,x1);
j=max(x,x1);
memset(VIDEO_ADDRESS+t+i,c,j-i);
}
void draw(unsigned char *buf)
{
memcpy(VIDEO_ADDRESS, buf, SCRNX * SCRNY);
}



void trine(unsigned int v1x,unsigned int v1y,
unsigned int v2x,unsigned int v2y,
unsigned int v3x,unsigned int v3y,unsigned char c)
{
long ly, dx1, dx2, ix1, ix2;
int i,j;
unsigned int v4x,v4y;
if (v2y > v3y) {v4x = v2x; v2x = v3x; v3x = v4x;v4y = v2y; v2y = v3y; v3y = v4y;}
if (v1y > v3y) {v4x = v1x; v1x = v3x; v3x = v4x;v4y = v1y; v1y = v3y; v3y = v4y;}
if (v1y > v2y) {v4x = v1x; v1x = v2x; v2x = v4x;v4y = v1y; v1y = v2y; v2y = v4y;}
if (v3y == v1y) return;

ix1 = (v3x - v1x) * 65536 / (v3y - v1y);

if (v2y != v1y) {
ix2 = (v2x - v1x) * 65536 / (v2y - v1y);

dx1 = v1x * 65536;
dx2 = v1x * 65536;

for (ly = v1y; ly < v2y; ly++)
{
if ( (ly >= 0) && (ly <= 200) ){
dx1=(dx1>=320)?320:dx1;
dx2=(dx2>=320)?320:dx2;
dx1=(dx1<=0)?0:dx1;
dx2=(dx2<=0)?0:dx2;

line(dx1/65536,dx2/65536,ly,c);}
dx1 += ix1;
dx2 += ix2;
}
}


if (v3y != v2y) {
ix2 = (v3x - v2x) * 65536 / (v3y - v2y);

dx1 = v1x * 65536 + ((v2y - v1y) * ix1);
dx2 = v2x * 65536;

for (ly = v2y; ly <= v3y; ly++)
{
if ( (ly >= 0) && (ly <= 200) ){
dx1=(dx1>=320)?320:dx1;
dx2=(dx2>=320)?320:dx2;
dx1=(dx1<=0)?0:dx1;
dx2=(dx2<=0)?0:dx2;
line(dx1/65536,dx2/65536,ly,c);}

dx1 += ix1;
dx2 += ix2;
}
}
}



void do3d(float fig[], float atx, float aty, float atz, double fiy,double fix, double fiz)
{

float x[100], y[100];

int scale;
int np;
int nl;
int index=0;
int to,from,to1;
int i;
float ygVy;
int coll;
docam(&atx,&aty,&atz,&fix,&fiy,&fiz);
cos_fiy=cos(fiy); sin_fiy=sin(fiy);
cos_fiz=cos(fiz); sin_fiz=sin(fiz);
cos_fix=cos(fix); sin_fix=sin(fix);


scale = fig[index++];
np = fig[index++];
nl = fig[index++];

for( i=0 ; i < np ; i++ )
{
x0= scale * fig[index++];
z0= scale * fig[index++];
y0= scale * fig[index++];


xg = x0 * cos_fiy + z0 * -sin_fiy;
yg = y0;
zg = x0 * sin_fiy + z0 * cos_fiy;

x0=xg; y0=yg; z0=zg;


xg = x0;
yg = y0 * cos_fix + z0 * -sin_fix;
zg = y0 * sin_fix + z0 * cos_fix;

x0=xg; y0=yg; z0=zg;


xg = x0 * cos_fiz + y0 * -sin_fiz;
yg = x0 * sin_fiz + y0 * cos_fiz;
zg = z0;




xg += atx;
yg += aty;
zg += atz;

if( zg == 0 ) zg = .0000001;

x[i] = 160 + 200 * xg / zg;
y[i] = 100 - 200 * yg / zg;

}

draw(scr);
clear(scr);


for( i=0 ; i<nl ; i++)
{
coll=(fig[index++]);
from = fig[index++];
to = fig[index++];
to1 = fig[index++];

trine( x[from], y[from], x[to], y[to],x[to1],y[to1],coll);
}

}
void dograph(void) {

asm{
mov ax, 13h
int 10h
}
scr = (unsigned char *)malloc(SCRNX * SCRNY);
}



Comments

  • : this following programme i run in turbo c 3.0
    : but i can't see anything but black screen?
    : can you tell me what sould be the error?
    : the keyb.c and key_code.h
    : are simple key board routine
    : on this web which i download .
    :
    : #include
    : #include
    : #include
    : #include
    : #include
    : #include
    : #include
    : #include
    : #include "c:zxcvkeyb.c"
    : #include "c:zxcvkey_code.h"
    :
    :
    : #define SCRNX 320
    : #define SCRNY 200
    :
    : unsigned char *VIDEO_ADDRESS = (unsigned char *)0xa0000;
    : unsigned char *scr = NULL;
    : float cx=0,cy=0,cz=0;
    : float cx1=0,cy1=0,cz1=0;
    :
    : void dograph(void);
    : void do3d(float [], float , float , float , double ,double , double );
    : void domain(void);
    :
    : double cos_fiy, sin_fiy;
    : double cos_fiz, sin_fiz;
    : double cos_fix, sin_fix;
    : float x0,y0,z0, xg,yg,zg;
    : float cube[]={
    : 1000,8,4,
    : 1,1,1,-1,1,1,-1,1,-1,1,1,-1,
    : 1,-1,1,-1,-1,1,-1,-1,-1,1,-1,-1,
    : 1,0,1,2,
    : 20,1,2,3,
    : 40,4,5,6,
    : 60,5,6,7,
    : /* 80,
    : 100,
    : 120,
    : 140,
    : 160,
    : 180,
    : 200,
    : 240,*/
    : };
    : void main(void)
    : {
    : dograph();
    : domain();
    : }
    : void domain(void)
    : {
    : int b,x,y;char c;
    : long start,stop,a=0;
    : IniKeyb();
    : memset(scr,0,64000);
    : start=time(NULL);
    : while(1)
    : {
    :
    : if(key[KEY_Q]){cx1+=0.1;}
    : if(key[KEY_W]){cy1+=0.1;}
    : if(key[KEY_E]){cz1+=0.1;}
    : if(key[KEY_A]){cx1-=0.1;}
    : if(key[KEY_S]){cy1-=0.1;}
    : if(key[KEY_D]){cz1-=0.1;}
    :
    : if(key[KEY_R]){cx+=10;}
    : if(key[KEY_T]){cy+=10;}
    : if(key[KEY_Y]){cz+=10;}
    : if(key[KEY_F]){cx-=10;}
    : if(key[KEY_G]){cy-=10;}
    : if(key[KEY_H]){cz-=10;}
    : if(key[KEY_P]){break;}
    : do3d(cube , cx, cy, cz, 0, 0, 0);
    : a++;
    : }
    : CloseKeyb();
    : stop=time(NULL);
    : asm{
    : mov ax, 0x03
    : int 0x10
    : }
    : printf("fr=%f",(float)a/(stop-start));
    : free(scr);
    : }
    : void docam(float *x,float *y,float *z,double *fix,double *fiy,double *fiz)
    : {
    : x0 = *x-cx;y0 = *y-cy;z0 = *z-cz;
    : cos_fiy=cos(cy1); sin_fiy=sin(cy1);
    : cos_fiz=cos(cz1); sin_fiz=sin(cz1);
    : cos_fix=cos(cx1); sin_fix=sin(cx1);
    :
    : xg = x0 * cos_fiy + z0 * -sin_fiy;
    : yg = y0;
    : zg = x0 * sin_fiy + z0 * cos_fiy;
    :
    : x0=xg; y0=yg; z0=zg;
    :
    :
    : xg = x0;
    : yg = y0 * cos_fix + z0 * -sin_fix;
    : zg = y0 * sin_fix + z0 * cos_fix;
    :
    : x0=xg; y0=yg; z0=zg;
    :
    :
    : xg = x0 * cos_fiz + y0 * -sin_fiz;
    : yg = x0 * sin_fiz + y0 * cos_fiz;
    : zg = z0;
    :
    : *x=xg;
    : *y=yg;
    : *z=zg;
    : *fix+=cx1;
    : *fiy+=cy1;
    : *fiz+=cz1;
    : }
    : void clear(unsigned char *buf)
    : {
    : memset(buf, 0, SCRNX * SCRNY);
    : }
    :
    : void copy(unsigned char *dst, unsigned char *src)
    : {
    : memcpy(dst, src, SCRNX * SCRNY);
    : }
    : void line(unsigned int x,unsigned int x1,unsigned int y,unsigned char c)
    : {
    : unsigned int t,i,j;
    : t=y*320;
    : i=min(x,x1);
    : j=max(x,x1);
    : memset(VIDEO_ADDRESS+t+i,c,j-i);
    : }
    : void draw(unsigned char *buf)
    : {
    : memcpy(VIDEO_ADDRESS, buf, SCRNX * SCRNY);
    : }
    :
    :
    :
    : void trine(unsigned int v1x,unsigned int v1y,
    : unsigned int v2x,unsigned int v2y,
    : unsigned int v3x,unsigned int v3y,unsigned char c)
    : {
    : long ly, dx1, dx2, ix1, ix2;
    : int i,j;
    : unsigned int v4x,v4y;
    : if (v2y > v3y) {v4x = v2x; v2x = v3x; v3x = v4x;v4y = v2y; v2y = v3y; v3y = v4y;}
    : if (v1y > v3y) {v4x = v1x; v1x = v3x; v3x = v4x;v4y = v1y; v1y = v3y; v3y = v4y;}
    : if (v1y > v2y) {v4x = v1x; v1x = v2x; v2x = v4x;v4y = v1y; v1y = v2y; v2y = v4y;}
    : if (v3y == v1y) return;
    :
    : ix1 = (v3x - v1x) * 65536 / (v3y - v1y);
    :
    : if (v2y != v1y) {
    : ix2 = (v2x - v1x) * 65536 / (v2y - v1y);
    :
    : dx1 = v1x * 65536;
    : dx2 = v1x * 65536;
    :
    : for (ly = v1y; ly < v2y; ly++)
    : {
    : if ( (ly >= 0) && (ly <= 200) ){
    : dx1=(dx1>=320)?320:dx1;
    : dx2=(dx2>=320)?320:dx2;
    : dx1=(dx1<=0)?0:dx1;
    : dx2=(dx2<=0)?0:dx2;
    :
    : line(dx1/65536,dx2/65536,ly,c);}
    : dx1 += ix1;
    : dx2 += ix2;
    : }
    : }
    :
    :
    : if (v3y != v2y) {
    : ix2 = (v3x - v2x) * 65536 / (v3y - v2y);
    :
    : dx1 = v1x * 65536 + ((v2y - v1y) * ix1);
    : dx2 = v2x * 65536;
    :
    : for (ly = v2y; ly <= v3y; ly++)
    : {
    : if ( (ly >= 0) && (ly <= 200) ){
    : dx1=(dx1>=320)?320:dx1;
    : dx2=(dx2>=320)?320:dx2;
    : dx1=(dx1<=0)?0:dx1;
    : dx2=(dx2<=0)?0:dx2;
    : line(dx1/65536,dx2/65536,ly,c);}
    :
    : dx1 += ix1;
    : dx2 += ix2;
    : }
    : }
    : }
    :
    :
    :
    : void do3d(float fig[], float atx, float aty, float atz, double fiy,double fix, double fiz)
    : {
    :
    : float x[100], y[100];
    :
    : int scale;
    : int np;
    : int nl;
    : int index=0;
    : int to,from,to1;
    : int i;
    : float ygVy;
    : int coll;
    : docam(&atx,&aty,&atz,&fix,&fiy,&fiz);
    : cos_fiy=cos(fiy); sin_fiy=sin(fiy);
    : cos_fiz=cos(fiz); sin_fiz=sin(fiz);
    : cos_fix=cos(fix); sin_fix=sin(fix);
    :
    :
    : scale = fig[index++];
    : np = fig[index++];
    : nl = fig[index++];
    :
    : for( i=0 ; i < np ; i++ )
    : {
    : x0= scale * fig[index++];
    : z0= scale * fig[index++];
    : y0= scale * fig[index++];
    :
    :
    : xg = x0 * cos_fiy + z0 * -sin_fiy;
    : yg = y0;
    : zg = x0 * sin_fiy + z0 * cos_fiy;
    :
    : x0=xg; y0=yg; z0=zg;
    :
    :
    : xg = x0;
    : yg = y0 * cos_fix + z0 * -sin_fix;
    : zg = y0 * sin_fix + z0 * cos_fix;
    :
    : x0=xg; y0=yg; z0=zg;
    :
    :
    : xg = x0 * cos_fiz + y0 * -sin_fiz;
    : yg = x0 * sin_fiz + y0 * cos_fiz;
    : zg = z0;
    :
    :
    :
    :
    : xg += atx;
    : yg += aty;
    : zg += atz;
    :
    : if( zg == 0 ) zg = .0000001;
    :
    : x[i] = 160 + 200 * xg / zg;
    : y[i] = 100 - 200 * yg / zg;
    :
    : }
    :
    : draw(scr);
    : clear(scr);
    :
    :
    : for( i=0 ; i<nl ; i++)
    : {
    : coll=(fig[index++]);
    : from = fig[index++];
    : to = fig[index++];
    : to1 = fig[index++];
    :
    : trine( x[from], y[from], x[to], y[to],x[to1],y[to1],coll);
    : }
    :
    : }
    : void dograph(void) {
    :
    : asm{
    : mov ax, 13h
    : int 10h
    : }
    : scr = (unsigned char *)malloc(SCRNX * SCRNY);
    : }
    :
    :
    :
    :
    Yea, Try using a graphics lib and have it take care of all the video work. You can achieve what you want in 1/10 the code. A good lib makes all the difference in the world. Quit beating yourself up. Get SVGACC from the WEB. You'll sleep better. It also has 2d/3d routines for making,scaling,moving and rotating objects. Plus you can use PAGE FLIPPING.
    I have written a lot of stuff with it with great results. + it's easy to learn especilaly if your experienced in QBasic.



  • : : this following programme i run in turbo c 3.0
    : : but i can't see anything but black screen?
    : : can you tell me what sould be the error?
    : : the keyb.c and key_code.h
    : : are simple key board routine
    : : on this web which i download .
    : :
    : : #include
    : : #include
    : : #include
    : : #include
    : : #include
    : : #include
    : : #include
    : : #include
    : : #include "c:zxcvkeyb.c"
    : : #include "c:zxcvkey_code.h"
    : :
    : :
    : : #define SCRNX 320
    : : #define SCRNY 200
    : :
    : : unsigned char *VIDEO_ADDRESS = (unsigned char *)0xa0000;
    : : unsigned char *scr = NULL;
    : : float cx=0,cy=0,cz=0;
    : : float cx1=0,cy1=0,cz1=0;
    : :
    : : void dograph(void);
    : : void do3d(float [], float , float , float , double ,double , double );
    : : void domain(void);
    : :
    : : double cos_fiy, sin_fiy;
    : : double cos_fiz, sin_fiz;
    : : double cos_fix, sin_fix;
    : : float x0,y0,z0, xg,yg,zg;
    : : float cube[]={
    : : 1000,8,4,
    : : 1,1,1,-1,1,1,-1,1,-1,1,1,-1,
    : : 1,-1,1,-1,-1,1,-1,-1,-1,1,-1,-1,
    : : 1,0,1,2,
    : : 20,1,2,3,
    : : 40,4,5,6,
    : : 60,5,6,7,
    : : /* 80,
    : : 100,
    : : 120,
    : : 140,
    : : 160,
    : : 180,
    : : 200,
    : : 240,*/
    : : };
    : : void main(void)
    : : {
    : : dograph();
    : : domain();
    : : }
    : : void domain(void)
    : : {
    : : int b,x,y;char c;
    : : long start,stop,a=0;
    : : IniKeyb();
    : : memset(scr,0,64000);
    : : start=time(NULL);
    : : while(1)
    : : {
    : :
    : : if(key[KEY_Q]){cx1+=0.1;}
    : : if(key[KEY_W]){cy1+=0.1;}
    : : if(key[KEY_E]){cz1+=0.1;}
    : : if(key[KEY_A]){cx1-=0.1;}
    : : if(key[KEY_S]){cy1-=0.1;}
    : : if(key[KEY_D]){cz1-=0.1;}
    : :
    : : if(key[KEY_R]){cx+=10;}
    : : if(key[KEY_T]){cy+=10;}
    : : if(key[KEY_Y]){cz+=10;}
    : : if(key[KEY_F]){cx-=10;}
    : : if(key[KEY_G]){cy-=10;}
    : : if(key[KEY_H]){cz-=10;}
    : : if(key[KEY_P]){break;}
    : : do3d(cube , cx, cy, cz, 0, 0, 0);
    : : a++;
    : : }
    : : CloseKeyb();
    : : stop=time(NULL);
    : : asm{
    : : mov ax, 0x03
    : : int 0x10
    : : }
    : : printf("fr=%f",(float)a/(stop-start));
    : : free(scr);
    : : }
    : : void docam(float *x,float *y,float *z,double *fix,double *fiy,double *fiz)
    : : {
    : : x0 = *x-cx;y0 = *y-cy;z0 = *z-cz;
    : : cos_fiy=cos(cy1); sin_fiy=sin(cy1);
    : : cos_fiz=cos(cz1); sin_fiz=sin(cz1);
    : : cos_fix=cos(cx1); sin_fix=sin(cx1);
    : :
    : : xg = x0 * cos_fiy + z0 * -sin_fiy;
    : : yg = y0;
    : : zg = x0 * sin_fiy + z0 * cos_fiy;
    : :
    : : x0=xg; y0=yg; z0=zg;
    : :
    : :
    : : xg = x0;
    : : yg = y0 * cos_fix + z0 * -sin_fix;
    : : zg = y0 * sin_fix + z0 * cos_fix;
    : :
    : : x0=xg; y0=yg; z0=zg;
    : :
    : :
    : : xg = x0 * cos_fiz + y0 * -sin_fiz;
    : : yg = x0 * sin_fiz + y0 * cos_fiz;
    : : zg = z0;
    : :
    : : *x=xg;
    : : *y=yg;
    : : *z=zg;
    : : *fix+=cx1;
    : : *fiy+=cy1;
    : : *fiz+=cz1;
    : : }
    : : void clear(unsigned char *buf)
    : : {
    : : memset(buf, 0, SCRNX * SCRNY);
    : : }
    : :
    : : void copy(unsigned char *dst, unsigned char *src)
    : : {
    : : memcpy(dst, src, SCRNX * SCRNY);
    : : }
    : : void line(unsigned int x,unsigned int x1,unsigned int y,unsigned char c)
    : : {
    : : unsigned int t,i,j;
    : : t=y*320;
    : : i=min(x,x1);
    : : j=max(x,x1);
    : : memset(VIDEO_ADDRESS+t+i,c,j-i);
    : : }
    : : void draw(unsigned char *buf)
    : : {
    : : memcpy(VIDEO_ADDRESS, buf, SCRNX * SCRNY);
    : : }
    : :
    : :
    : :
    : : void trine(unsigned int v1x,unsigned int v1y,
    : : unsigned int v2x,unsigned int v2y,
    : : unsigned int v3x,unsigned int v3y,unsigned char c)
    : : {
    : : long ly, dx1, dx2, ix1, ix2;
    : : int i,j;
    : : unsigned int v4x,v4y;
    : : if (v2y > v3y) {v4x = v2x; v2x = v3x; v3x = v4x;v4y = v2y; v2y = v3y; v3y = v4y;}
    : : if (v1y > v3y) {v4x = v1x; v1x = v3x; v3x = v4x;v4y = v1y; v1y = v3y; v3y = v4y;}
    : : if (v1y > v2y) {v4x = v1x; v1x = v2x; v2x = v4x;v4y = v1y; v1y = v2y; v2y = v4y;}
    : : if (v3y == v1y) return;
    : :
    : : ix1 = (v3x - v1x) * 65536 / (v3y - v1y);
    : :
    : : if (v2y != v1y) {
    : : ix2 = (v2x - v1x) * 65536 / (v2y - v1y);
    : :
    : : dx1 = v1x * 65536;
    : : dx2 = v1x * 65536;
    : :
    : : for (ly = v1y; ly < v2y; ly++)
    : : {
    : : if ( (ly >= 0) && (ly <= 200) ){
    : : dx1=(dx1>=320)?320:dx1;
    : : dx2=(dx2>=320)?320:dx2;
    : : dx1=(dx1<=0)?0:dx1;
    : : dx2=(dx2<=0)?0:dx2;
    : :
    : : line(dx1/65536,dx2/65536,ly,c);}
    : : dx1 += ix1;
    : : dx2 += ix2;
    : : }
    : : }
    : :
    : :
    : : if (v3y != v2y) {
    : : ix2 = (v3x - v2x) * 65536 / (v3y - v2y);
    : :
    : : dx1 = v1x * 65536 + ((v2y - v1y) * ix1);
    : : dx2 = v2x * 65536;
    : :
    : : for (ly = v2y; ly <= v3y; ly++)
    : : {
    : : if ( (ly >= 0) && (ly <= 200) ){
    : : dx1=(dx1>=320)?320:dx1;
    : : dx2=(dx2>=320)?320:dx2;
    : : dx1=(dx1<=0)?0:dx1;
    : : dx2=(dx2<=0)?0:dx2;
    : : line(dx1/65536,dx2/65536,ly,c);}
    : :
    : : dx1 += ix1;
    : : dx2 += ix2;
    : : }
    : : }
    : : }
    : :
    : :
    : :
    : : void do3d(float fig[], float atx, float aty, float atz, double fiy,double fix, double fiz)
    : : {
    : :
    : : float x[100], y[100];
    : :
    : : int scale;
    : : int np;
    : : int nl;
    : : int index=0;
    : : int to,from,to1;
    : : int i;
    : : float ygVy;
    : : int coll;
    : : docam(&atx,&aty,&atz,&fix,&fiy,&fiz);
    : : cos_fiy=cos(fiy); sin_fiy=sin(fiy);
    : : cos_fiz=cos(fiz); sin_fiz=sin(fiz);
    : : cos_fix=cos(fix); sin_fix=sin(fix);
    : :
    : :
    : : scale = fig[index++];
    : : np = fig[index++];
    : : nl = fig[index++];
    : :
    : : for( i=0 ; i < np ; i++ )
    : : {
    : : x0= scale * fig[index++];
    : : z0= scale * fig[index++];
    : : y0= scale * fig[index++];
    : :
    : :
    : : xg = x0 * cos_fiy + z0 * -sin_fiy;
    : : yg = y0;
    : : zg = x0 * sin_fiy + z0 * cos_fiy;
    : :
    : : x0=xg; y0=yg; z0=zg;
    : :
    : :
    : : xg = x0;
    : : yg = y0 * cos_fix + z0 * -sin_fix;
    : : zg = y0 * sin_fix + z0 * cos_fix;
    : :
    : : x0=xg; y0=yg; z0=zg;
    : :
    : :
    : : xg = x0 * cos_fiz + y0 * -sin_fiz;
    : : yg = x0 * sin_fiz + y0 * cos_fiz;
    : : zg = z0;
    : :
    : :
    : :
    : :
    : : xg += atx;
    : : yg += aty;
    : : zg += atz;
    : :
    : : if( zg == 0 ) zg = .0000001;
    : :
    : : x[i] = 160 + 200 * xg / zg;
    : : y[i] = 100 - 200 * yg / zg;
    : :
    : : }
    : :
    : : draw(scr);
    : : clear(scr);
    : :
    : :
    : : for( i=0 ; i<nl ; i++)
    : : {
    : : coll=(fig[index++]);
    : : from = fig[index++];
    : : to = fig[index++];
    : : to1 = fig[index++];
    : :
    : : trine( x[from], y[from], x[to], y[to],x[to1],y[to1],coll);
    : : }
    : :
    : : }
    : : void dograph(void) {
    : :
    : : asm{
    : : mov ax, 13h
    : : int 10h
    : : }
    : : scr = (unsigned char *)malloc(SCRNX * SCRNY);
    : : }
    : :
    : :
    : :
    : :
    : Yea, Try using a graphics lib and have it take care of all the video work. You can achieve what you want in 1/10 the code. A good lib makes all the difference in the world. Quit beating yourself up. Get SVGACC from the WEB. You'll sleep better. It also has 2d/3d routines for making,scaling,moving and rotating objects. Plus you can use PAGE FLIPPING.
    : I have written a lot of stuff with it with great results. + it's easy to learn especilaly if your experienced in QBasic.
    :
    :
    : can any link me with any 3d or 2d graphics library which i can use
    with my tc programme like this one.
    :



  • : : : this following programme i run in turbo c 3.0
    : : : but i can't see anything but black screen?
    : : : can you tell me what sould be the error?
    : : : the keyb.c and key_code.h
    : : : are simple key board routine
    : : : on this web which i download .
    : : :
    : : : #include
    : : : #include
    : : : #include
    : : : #include
    : : : #include
    : : : #include
    : : : #include
    : : : #include
    : : : #include "c:zxcvkeyb.c"
    : : : #include "c:zxcvkey_code.h"
    : : :
    : : :
    : : : #define SCRNX 320
    : : : #define SCRNY 200
    : : :
    : : : unsigned char *VIDEO_ADDRESS = (unsigned char *)0xa0000;
    : : : unsigned char *scr = NULL;
    : : : float cx=0,cy=0,cz=0;
    : : : float cx1=0,cy1=0,cz1=0;
    : : :
    : : : void dograph(void);
    : : : void do3d(float [], float , float , float , double ,double , double );
    : : : void domain(void);
    : : :
    : : : double cos_fiy, sin_fiy;
    : : : double cos_fiz, sin_fiz;
    : : : double cos_fix, sin_fix;
    : : : float x0,y0,z0, xg,yg,zg;
    : : : float cube[]={
    : : : 1000,8,4,
    : : : 1,1,1,-1,1,1,-1,1,-1,1,1,-1,
    : : : 1,-1,1,-1,-1,1,-1,-1,-1,1,-1,-1,
    : : : 1,0,1,2,
    : : : 20,1,2,3,
    : : : 40,4,5,6,
    : : : 60,5,6,7,
    : : : /* 80,
    : : : 100,
    : : : 120,
    : : : 140,
    : : : 160,
    : : : 180,
    : : : 200,
    : : : 240,*/
    : : : };
    : : : void main(void)
    : : : {
    : : : dograph();
    : : : domain();
    : : : }
    : : : void domain(void)
    : : : {
    : : : int b,x,y;char c;
    : : : long start,stop,a=0;
    : : : IniKeyb();
    : : : memset(scr,0,64000);
    : : : start=time(NULL);
    : : : while(1)
    : : : {
    : : :
    : : : if(key[KEY_Q]){cx1+=0.1;}
    : : : if(key[KEY_W]){cy1+=0.1;}
    : : : if(key[KEY_E]){cz1+=0.1;}
    : : : if(key[KEY_A]){cx1-=0.1;}
    : : : if(key[KEY_S]){cy1-=0.1;}
    : : : if(key[KEY_D]){cz1-=0.1;}
    : : :
    : : : if(key[KEY_R]){cx+=10;}
    : : : if(key[KEY_T]){cy+=10;}
    : : : if(key[KEY_Y]){cz+=10;}
    : : : if(key[KEY_F]){cx-=10;}
    : : : if(key[KEY_G]){cy-=10;}
    : : : if(key[KEY_H]){cz-=10;}
    : : : if(key[KEY_P]){break;}
    : : : do3d(cube , cx, cy, cz, 0, 0, 0);
    : : : a++;
    : : : }
    : : : CloseKeyb();
    : : : stop=time(NULL);
    : : : asm{
    : : : mov ax, 0x03
    : : : int 0x10
    : : : }
    : : : printf("fr=%f",(float)a/(stop-start));
    : : : free(scr);
    : : : }
    : : : void docam(float *x,float *y,float *z,double *fix,double *fiy,double *fiz)
    : : : {
    : : : x0 = *x-cx;y0 = *y-cy;z0 = *z-cz;
    : : : cos_fiy=cos(cy1); sin_fiy=sin(cy1);
    : : : cos_fiz=cos(cz1); sin_fiz=sin(cz1);
    : : : cos_fix=cos(cx1); sin_fix=sin(cx1);
    : : :
    : : : xg = x0 * cos_fiy + z0 * -sin_fiy;
    : : : yg = y0;
    : : : zg = x0 * sin_fiy + z0 * cos_fiy;
    : : :
    : : : x0=xg; y0=yg; z0=zg;
    : : :
    : : :
    : : : xg = x0;
    : : : yg = y0 * cos_fix + z0 * -sin_fix;
    : : : zg = y0 * sin_fix + z0 * cos_fix;
    : : :
    : : : x0=xg; y0=yg; z0=zg;
    : : :
    : : :
    : : : xg = x0 * cos_fiz + y0 * -sin_fiz;
    : : : yg = x0 * sin_fiz + y0 * cos_fiz;
    : : : zg = z0;
    : : :
    : : : *x=xg;
    : : : *y=yg;
    : : : *z=zg;
    : : : *fix+=cx1;
    : : : *fiy+=cy1;
    : : : *fiz+=cz1;
    : : : }
    : : : void clear(unsigned char *buf)
    : : : {
    : : : memset(buf, 0, SCRNX * SCRNY);
    : : : }
    : : :
    : : : void copy(unsigned char *dst, unsigned char *src)
    : : : {
    : : : memcpy(dst, src, SCRNX * SCRNY);
    : : : }
    : : : void line(unsigned int x,unsigned int x1,unsigned int y,unsigned char c)
    : : : {
    : : : unsigned int t,i,j;
    : : : t=y*320;
    : : : i=min(x,x1);
    : : : j=max(x,x1);
    : : : memset(VIDEO_ADDRESS+t+i,c,j-i);
    : : : }
    : : : void draw(unsigned char *buf)
    : : : {
    : : : memcpy(VIDEO_ADDRESS, buf, SCRNX * SCRNY);
    : : : }
    : : :
    : : :
    : : :
    : : : void trine(unsigned int v1x,unsigned int v1y,
    : : : unsigned int v2x,unsigned int v2y,
    : : : unsigned int v3x,unsigned int v3y,unsigned char c)
    : : : {
    : : : long ly, dx1, dx2, ix1, ix2;
    : : : int i,j;
    : : : unsigned int v4x,v4y;
    : : : if (v2y > v3y) {v4x = v2x; v2x = v3x; v3x = v4x;v4y = v2y; v2y = v3y; v3y = v4y;}
    : : : if (v1y > v3y) {v4x = v1x; v1x = v3x; v3x = v4x;v4y = v1y; v1y = v3y; v3y = v4y;}
    : : : if (v1y > v2y) {v4x = v1x; v1x = v2x; v2x = v4x;v4y = v1y; v1y = v2y; v2y = v4y;}
    : : : if (v3y == v1y) return;
    : : :
    : : : ix1 = (v3x - v1x) * 65536 / (v3y - v1y);
    : : :
    : : : if (v2y != v1y) {
    : : : ix2 = (v2x - v1x) * 65536 / (v2y - v1y);
    : : :
    : : : dx1 = v1x * 65536;
    : : : dx2 = v1x * 65536;
    : : :
    : : : for (ly = v1y; ly < v2y; ly++)
    : : : {
    : : : if ( (ly >= 0) && (ly <= 200) ){
    : : : dx1=(dx1>=320)?320:dx1;
    : : : dx2=(dx2>=320)?320:dx2;
    : : : dx1=(dx1<=0)?0:dx1;
    : : : dx2=(dx2<=0)?0:dx2;
    : : :
    : : : line(dx1/65536,dx2/65536,ly,c);}
    : : : dx1 += ix1;
    : : : dx2 += ix2;
    : : : }
    : : : }
    : : :
    : : :
    : : : if (v3y != v2y) {
    : : : ix2 = (v3x - v2x) * 65536 / (v3y - v2y);
    : : :
    : : : dx1 = v1x * 65536 + ((v2y - v1y) * ix1);
    : : : dx2 = v2x * 65536;
    : : :
    : : : for (ly = v2y; ly <= v3y; ly++)
    : : : {
    : : : if ( (ly >= 0) && (ly <= 200) ){
    : : : dx1=(dx1>=320)?320:dx1;
    : : : dx2=(dx2>=320)?320:dx2;
    : : : dx1=(dx1<=0)?0:dx1;
    : : : dx2=(dx2<=0)?0:dx2;
    : : : line(dx1/65536,dx2/65536,ly,c);}
    : : :
    : : : dx1 += ix1;
    : : : dx2 += ix2;
    : : : }
    : : : }
    : : : }
    : : :
    : : :
    : : :
    : : : void do3d(float fig[], float atx, float aty, float atz, double fiy,double fix, double fiz)
    : : : {
    : : :
    : : : float x[100], y[100];
    : : :
    : : : int scale;
    : : : int np;
    : : : int nl;
    : : : int index=0;
    : : : int to,from,to1;
    : : : int i;
    : : : float ygVy;
    : : : int coll;
    : : : docam(&atx,&aty,&atz,&fix,&fiy,&fiz);
    : : : cos_fiy=cos(fiy); sin_fiy=sin(fiy);
    : : : cos_fiz=cos(fiz); sin_fiz=sin(fiz);
    : : : cos_fix=cos(fix); sin_fix=sin(fix);
    : : :
    : : :
    : : : scale = fig[index++];
    : : : np = fig[index++];
    : : : nl = fig[index++];
    : : :
    : : : for( i=0 ; i < np ; i++ )
    : : : {
    : : : x0= scale * fig[index++];
    : : : z0= scale * fig[index++];
    : : : y0= scale * fig[index++];
    : : :
    : : :
    : : : xg = x0 * cos_fiy + z0 * -sin_fiy;
    : : : yg = y0;
    : : : zg = x0 * sin_fiy + z0 * cos_fiy;
    : : :
    : : : x0=xg; y0=yg; z0=zg;
    : : :
    : : :
    : : : xg = x0;
    : : : yg = y0 * cos_fix + z0 * -sin_fix;
    : : : zg = y0 * sin_fix + z0 * cos_fix;
    : : :
    : : : x0=xg; y0=yg; z0=zg;
    : : :
    : : :
    : : : xg = x0 * cos_fiz + y0 * -sin_fiz;
    : : : yg = x0 * sin_fiz + y0 * cos_fiz;
    : : : zg = z0;
    : : :
    : : :
    : : :
    : : :
    : : : xg += atx;
    : : : yg += aty;
    : : : zg += atz;
    : : :
    : : : if( zg == 0 ) zg = .0000001;
    : : :
    : : : x[i] = 160 + 200 * xg / zg;
    : : : y[i] = 100 - 200 * yg / zg;
    : : :
    : : : }
    : : :
    : : : draw(scr);
    : : : clear(scr);
    : : :
    : : :
    : : : for( i=0 ; i<nl ; i++)
    : : : {
    : : : coll=(fig[index++]);
    : : : from = fig[index++];
    : : : to = fig[index++];
    : : : to1 = fig[index++];
    : : :
    : : : trine( x[from], y[from], x[to], y[to],x[to1],y[to1],coll);
    : : : }
    : : :
    : : : }
    : : : void dograph(void) {
    : : :
    : : : asm{
    : : : mov ax, 13h
    : : : int 10h
    : : : }
    : : : scr = (unsigned char *)malloc(SCRNX * SCRNY);
    : : : }
    : : :
    : : :
    : : :
    : : :
    : : Yea, Try using a graphics lib and have it take care of all the video work. You can achieve what you want in 1/10 the code. A good lib makes all the difference in the world. Quit beating yourself up. Get SVGACC26.zip from the WEB. You'll sleep better. It also has 2d/3d routines for making,scaling,moving and rotating objects. Plus you can use PAGE FLIPPING.
    : : I have written a lot of stuff with it with great results. + it's easy to learn especilaly if your experienced in QBasic.
    : :
    : :
    : : can any link me with any 3d or 2d graphics library which i can use
    : with my tc programme like this one.
    : :
    :
    :
    :
    :
    Try changing
    unsigned char *VIDEO_ADDRESS = (unsigned char *)0xa0000;
    to
    unsigned char *VIDEO_ADDRESS = (unsigned char *)0xB8000;

    According to "Using Assembly Language -Allen Wyatt"
    "The video buffer begins at absolute address B8000h(segment address B800:0000), as does the CGA"

    That assumes you are running a standard card. Having the wrong segment would give you a blank screen.

    As I said in the last message or didn't you read it, Download SVGACC26.zip. I think it is on this board. If not just search the web for it. This lib works great with TC.

    ET


Sign In or Register to comment.

Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Categories

In this Discussion