null Le 05/10/2002 à 14:36 par contre pour avoir les deplacements d'un doom-like (vue a la 1ere personne), tu dois faire les translations AVANT les rotations...
Ah, bon ?
J'ai essayé mais ça ne marche carrément pas !
Quand mon cube tourne il sort tout de suite de l'écran. :-(
Je vois pas comment je pourrais faire.
Sinon j'ai fait une truc qui marche très bien d'après ce que tu m'as expliqué:
static int Cos[360]={128,128,128,128,128,128,127,127,127,126,126,126,125,125,124,124,123,122,122,121,120,119,119,118,117,116,115,114,113,112,111,110,109,107,106,105,104,102,100,99,98,97,95,94,92,91,89,87,86,84,82,81,79,77,75,73,72,70,68,66,64,62,60,58,56,54,52,50,48,46,44,42,40,37,35,33,31,29,27,24,22,20,18,16,13,11,9,7,4,2,0,-2,-4,-7,-9,-11,-13,-16,-18,-20,-22,-24,-27,-29,-31,-33,-35,-37,-40,-42,-44,-46,-48,-50,-52,-54,-56,-58,-60,-62,-64,-66,-68,-70,-72,-73,-75,-77,-79,-81,-82,-84,-86,-87,-89,-91,-92,-94,-95,-97,-98,-99,-101,-102,-104,-105,-106,-107,-109,-110,-111,-112,-113,-114,-115,-116,-117,-118,-119,-119,-120,-121,-122,-122,-123,-124,-124,-125,-125,-126,-126,-126,-127,-127,-127,-128,-128,-128,-128,-128,-128,-128,-128,-128,-128,-128,-127,-127,-127,-126,-126,-126,-125,-125,-124,-124,-123,-122,-122,-121,-120,-119,-119,-118,-117,-116,-115,-114,-113,-112,-111,-110,-109,-107,-106,-105,-104,-102,-100,-99,-98,-97,-95,-94,-92,-91,-89,-87,-86,-84,-82,-81,-79,-77,-75,-73,-72,-70,-68,-66,-64,-62,-60,-58,-56,-54,-52,-50,-48,-46,-44,-42,-40,-37,-35,-33,-31,-29,-27,-24,-22,-20,-18,-16,-13,-11,-9,-7,-4,-2,0,2,4,7,9,11,13,16,18,20,22,24,27,29,31,33,35,37,40,42,44,46,48,50,52,54,56,58,60,62,64,66,68,70,72,73,75,77,79,81,82,84,86,87,89,91,92,94,95,97,98,99,101,102,104,105,106,107,109,110,111,112,113,114,115,116,117,118,119,119,120,121,122,122,123,124,124,125,125,126,126,126,127,127,127,128,128,128,128,128};
static int Sin[360]={0,2,4,7,9,11,13,16,18,20,22,24,27,29,31,33,35,37,40,42,44,46,48,50,52,54,56,58,60,62,64,66,68,70,72,73,75,77,79,81,82,84,86,87,89,91,92,94,95,97,98,99,101,102,104,105,106,107,109,110,111,112,113,114,115,116,117,118,119,119,120,121,122,122,123,124,124,125,125,126,126,126,127,127,127,128,128,128,128,128,128,128,128,128,128,128,127,127,127,126,126,126,125,125,124,124,123,122,122,121,120,119,119,118,117,116,115,114,113,112,111,110,109,107,106,105,104,102,100,99,98,97,95,94,92,91,89,87,86,84,82,81,79,77,75,73,72,70,68,66,64,62,60,58,56,54,52,50,48,46,44,42,40,37,35,33,31,29,27,24,22,20,18,16,13,11,9,7,4,2,0,-2,-4,-7,-9,-11,-13,-16,-18,-20,-22,-24,-27,-29,-31,-33,-35,-37,-40,-42,-44,-46,-48,-50,-52,-54,-56,-58,-60,-62,-64,-66,-68,-70,-72,-73,-75,-77,-79,-81,-82,-84,-86,-87,-89,-91,-92,-94,-95,-97,-98,-99,-101,-102,-104,-105,-106,-107,-109,-110,-111,-112,-113,-114,-115,-116,-117,-118,-119,-119,-120,-121,-122,-122,-123,-124,-124,-125,-125,-126,-126,-126,-127,-127,-127,-128,-128,-128,-128,-128,-128,-128,-128,-128,-128,-128,-127,-127,-127,-126,-126,-126,-125,-125,-124,-124,-123,-122,-122,-121,-120,-119,-119,-118,-117,-116,-115,-114,-113,-112,-111,-110,-109,-107,-106,-105,-104,-102,-100,-99,-98,-97,-95,-94,-92,-91,-89,-87,-86,-84,-82,-81,-79,-77,-75,-73,-72,-70,-68,-66,-64,-62,-60,-58,-56,-54,-52,-50,-48,-46,-44,-42,-40,-37,-35,-33,-31,-29,-27,-24,-22,-20,-18,-16,-13,-11,-9,-7,-4,-2};
Vertex[0].x=-20; Vertex[0].y=-20; Vertex[0].z=-20;
Vertex[1].x=20; Vertex[1].y=-20; Vertex[1].z=-20;
Vertex[2].x=20; Vertex[2].y=20; Vertex[2].z=-20;
Vertex[3].x=-20; Vertex[3].y=20; Vertex[3].z=-20;
Vertex[4].x=20; Vertex[4].y=-20; Vertex[4].z=20;
Vertex[5].x=-20; Vertex[5].y=-20; Vertex[5].z=20;
Vertex[6].x=-20; Vertex[6].y=20; Vertex[6].z=20;
Vertex[7].x=20; Vertex[7].y=20; Vertex[7].z=20;
Vertex[8].x=0; Vertex[8].y=0; Vertex[8].z=0;
inline void RotationY(void)
{
Transform[t].x =Vertex[t].x*Cos[i] + Vertex[t].z*Sin[i]; ;
Transform[t].y =(Vertex[t].y<<7);
Transform[t].z =(-Vertex[t].x)*Sin[i] + Vertex[t].z*Cos[i] ;
}
inline void RotationX(void)
{
Transform[t].x = (Vertex[t].x<<7);
Transform[t].y = Vertex[t].y*Cos[i] - Vertex[t].z*Sin[i];
Transform[t].z = Vertex[t].y*Sin[i] + Vertex[t].z*Cos[i];
}
inline void RotationZ(void)
{
Transform[t].x = Vertex[t].x*Cos[i] + Vertex[t].y*Sin[i];
Transform[t].y = (-Vertex[t].x)*Sin[i] + Vertex[t].y*Cos[i];
Transform[t].z = (Vertex[t].z<<7);
}
do{
for(i=0;i<361;i++)
{
if (_keytest (RR_F2))
{
rotation=0;
}
if (_keytest (RR_F3))
{
rotation=1;
}
if (_keytest (RR_F4))
{
rotation=2;
}
if (_keytest (RR_RIGHT))
{
camera.x++;
}
if (_keytest (RR_LEFT))
{
camera.x--;
}
if (_keytest (RR_UP))
{
camera.z--;
}
if (_keytest (RR_DOWN))
{
camera.z++;
}
for(t=0;t<9;t++)
{
if(!rotation)
{
RotationX();
}
if(rotation==1)
{
RotationZ();
}
if(rotation==2)
{
RotationY();
}
x = Transform[t].x + (camera.x<<7);
y = Transform[t].y + (camera.y<<7);
z = Transform[t].z + (camera.z<<7);
Pixel[t].x = (x<<1)/(z>>7) + 80; //Pixel[t].x = ((x/128) *256)/(z>>7) + 80;
Pixel[t].y = (y<<1)/(z>>7) + 50; //Pixel[t].y = ((y/128) *256)/(z>>7) + 50;
}
DrawFastLine(buffer,Pixel[0].x,Pixel[0].y,Pixel[1].x,Pixel[1].y);
DrawFastLine(buffer,Pixel[1].x,Pixel[1].y,Pixel[2].x,Pixel[2].y);
DrawFastLine(buffer,Pixel[2].x,Pixel[2].y,Pixel[3].x,Pixel[3].y);
DrawFastLine(buffer,Pixel[0].x,Pixel[0].y,Pixel[3].x,Pixel[3].y);
DrawFastLine(buffer,Pixel[4].x,Pixel[4].y,Pixel[5].x,Pixel[5].y);
DrawFastLine(buffer,Pixel[5].x,Pixel[5].y,Pixel[6].x,Pixel[6].y);
DrawFastLine(buffer,Pixel[6].x,Pixel[6].y,Pixel[7].x,Pixel[7].y);
DrawFastLine(buffer,Pixel[4].x,Pixel[4].y,Pixel[7].x,Pixel[7].y);
DrawFastLine(buffer,Pixel[0].x,Pixel[0].y,Pixel[5].x,Pixel[5].y);
DrawFastLine(buffer,Pixel[1].x,Pixel[1].y,Pixel[4].x,Pixel[4].y);
DrawFastLine(buffer,Pixel[2].x,Pixel[2].y,Pixel[7].x,Pixel[7].y);
DrawFastLine(buffer,Pixel[3].x,Pixel[3].y,Pixel[6].x,Pixel[6].y);
DrawFastLine(buffer,Pixel[0].x,Pixel[0].y,Pixel[8].x,Pixel[8].y);
DrawFastLine(buffer,Pixel[1].x,Pixel[1].y,Pixel[8].x,Pixel[8].y);
DrawFastLine(buffer,Pixel[2].x,Pixel[2].y,Pixel[8].x,Pixel[8].y);
DrawFastLine(buffer,Pixel[3].x,Pixel[3].y,Pixel[8].x,Pixel[8].y);
FastCopyScreen(buffer,LCD_MEM);
memset(buffer, 0, 3840);
}
}while(!_keytest (RR_ESC));
J'ai juste mis les partie les plus importante du programme.
Par contre si j'inverse la rotation et la translation (en cheangeant les variables sans rien faire d'autre) il y a des gros pb !
Et si je fait ce que tu dis c'est la caméra qui va tourner au lieu de se déplacer avec une caméra fixe, non ?
Et pour faire des rotations avec la caméra on fait comment ? Et puis dans le moteur 3D que tu as fait les translations sont faites avant les rotations ?
www.wikio.fr/user1921&info=comments