[DELPHI] W czym grafikę 3D?

0

Witam, mam dwa problemy:

  1. Chciałbym zrobić planszę, około 500m2 a na środku jakiś budynek do którego da się wejść. Chciałbym aby sterować można było za pomocą strzałek i myszki. Czyli ogólnie grafika 3d, użyć do tego OpenGL, czy czegoś innego?
  2. Czy istnieje jakiś program, w którym rysuje się jakąś planszę 3D a on przerabia ją na kod Delphi?
0
  1. Może być OpenGL lub DirectX (tu poczytaj o DelphiX lub Asphire)
  2. Grafiki nie przerabia się na kod tylko ładuje jako siatki. Co do programów ddo robienia modeli 3D to wszelkiego rodzaju Blendery czy 3D Studio Max'y.
0

Asphyre to chyba grafika 3D?

0

Przecież o 3D było pytanie.

0
lukawojna... napisał(a)

Asphyre to chyba grafika 2D?

0

Jakiś czas temu DirectDraw i Direct3D połączono pod wspólną nazwą DirectX Graphics. Od tej pory wiele zbiorów nagłówków wspiera 2D i 3D jednocześnie.

http://asphyre.afterwarp.net/wiki/Main_Page napisał(a)

The project initially aimed at 2D/3D graphics, but the community members added components for displaying video and playing sounds.

0

Asphyre to i grafika 2D i 3D i jest naprawde swietne. Jest to taki bardziej zaawansowany wrapper na DirectX 9.0c. Niemniej bedzie Ci trudno od tego zaczac. Do tego co Ty chcesz zrobic polecam GLScene.

0
  1. Czy istnieje jakiś program, w którym rysuje się jakąś planszę 3D a on przerabia ją na kod Delphi?

Pargan Mulm 3D :S nigdzie go nie dostaniesz. http://img293.imageshack.us/my.php?image=pm3dth3.gif
Ale to raczej powinno byc tak tworzysz sobie sam jakis plik ktory jest zbudowany z okreslonych scian i tekstur i pozniej jak cos sie znmienia to rysujesz co innego

Wielkosc planszy zalezy np. od predkosci poruiszania sie po niej i odpowiednim skalowaniu ale ogolnie 1 jest ustawione jako 1 czyli 1 metr = 1 (przynajmniej w OpenGL), jest tylko problem a mianowicie aspekt kolizji i tutaj pewnie leżysz, jak juz nie wczesniej

co do poruszania sie:
nie bede tego rozpisywal co co robi bo to nie wazne chodzi o to ze na sulaco.co.za masz przyklad basic engine gdzie mozna sie poruszac za pomoca strzalek.

up_acceleration;
down_acceleration;
right_acceleration;
left_acceleration;
godown_acceleration;
goup_acceleration;
{if (isup    in unit1.panel1.dxinput2.states)  then begin CL_ACCELERATE := CL_ACCELERATE +CL_ACCELERATE_UP; cosik := cosik + 1; end;
if(isdown  in unit1.panel1.dxinput2.states)  then  begin CL_ACCELERATE := CL_ACCELERATE +CL_ACCELERATE_BACK;cosik := cosik + 1; end;
if(isleft  in unit1.panel1.dxinput2.states)  then begin CL_ACCELERATE := CL_ACCELERATE +CL_ACCELERATE_LEFT; cosik := cosik + 1;end;
if(isright in unit1.panel1.dxinput2.states)    then begin CL_ACCELERATE := CL_ACCELERATE +CL_ACCELERATE_RIGHT; cosik := cosik + 1;end;}
CL_ACCELERATE := 1;
move_vector.x := move_vector.x + (sin(glop*imopi)*cos(heading*imopi)*FrameTime/g_movefactor)*CL_ACCELERATE_UP;

if not COLLISION_ENABLED then
move_vector.y := move_vector.y - (sin(heading*imopi)*FrameTime/g_movefactor)*CL_ACCELERATE_UP;

move_vector.z :=move_vector.z - (cos(glop*imopi)*cos(heading*imopi)*FrameTime/g_movefactor)*CL_ACCELERATE_UP;


move_vector.x := move_vector.x - (sin(glop*imopi)*cos(heading*imopi)*FrameTime/g_movefactor)*CL_ACCELERATE_BACK;

if not COLLISION_ENABLED then
move_vector.y := move_vector.y + (sin(heading*imopi)*FrameTime/g_movefactor)*CL_ACCELERATE_BACK;

move_vector.z := move_vector.z + (cos(glop*imopi)*cos(heading*imopi)*FrameTime/g_movefactor)*CL_ACCELERATE_BACK;


move_vector.x := move_vector.x - (sin((glop+90)*imopi)*FrameTime/g_movefactor)*CL_ACCELERATE_LEFT;
move_vector.z := move_vector.z + (cos((glop+90)*imopi)*FrameTime/g_movefactor)*CL_ACCELERATE_LEFT;

move_vector.x := move_vector.x + (sin((glop+90)*imopi)*FrameTime/g_movefactor)*CL_ACCELERATE_RIGHT;
move_vector.z := move_vector.z - (cos((glop+90)*imopi)*FrameTime/g_movefactor)*CL_ACCELERATE_RIGHT;

move_vector.y := move_vector.y-0.05*CL_ACCELERATE_GODOWN;

move_vector.y := move_vector.y+0.05*CL_ACCELERATE_GOUP;

gdzie kazdy acceleration to:

procedure up_acceleration;
begin
if (isup    in unit1.panel1.dxinput2.states) then begin

if not START_CL_ACCELERATE_UP then begin
START_CL_ACCELERATE_UP := true;
CL_ACCELERATE_UP_TIME := gettickcount();
BEZWLAD_UP := false;
end;

if porownaj( CL_ACCELERATE_UP_TIME,1) then
if CL_ACCELERATE_UP < 1 then
CL_ACCELERATE_UP := CL_ACCELERATE_UP + CL_ACCELERATEVECT else CL_ACCELERATE_UP := 1;


end else begin


if START_CL_ACCELERATE_UP then begin
START_CL_ACCELERATE_UP := false;
CL_ACCELERATE_UP_TIME := gettickcount();
BEZWLAD_UP := true;
end;

Co to robi eee no zwalniasz i przyspeiszasz w czasie >> np. biegniesz do przodu i nagle puszczasz klawisz to jeszcze przez pewien czas płyniesz w kierunku w ktorym szedłeś aż do całkowitego wyhamowania, z kolei gdy stoisz to przyspeiszasz by osiagnac predkosc maksymalna



Co do myszki:
patrzymy w stronę: SUPER POINT tylko go sie odejmuje nie dodaje :P
glop to kąt Lewo prawo ja to tak nazywam a heading to góra dół (inaczej niz w tym przykladzie z sulaco.co.za)

zeby zmienic kat patrzenia dodajemy lub odejmujemy odpowiednio Stara pozycje myszki od nowej lub na odwrot nie pamietam ale masz kod:
```delphi
procedure move_mouse;
begin
if usem = true then
begin
GetCursorPos(mpos);
SetCursorPos(curx ,cury);
ompos.x := ompos.x + abs(curx-mpos.x);
ompos.y := ompos.y + abs(cury-mpos.y);
if not TREATASCURSOR then begin
staryglop := glop;
staryheading := heading;
glop := glop - (curx- mpos.x)/100 * MouseSpeed;
heading := heading - (cury - mpos.y)/100 * MouseSpeed;


 
if heading > 89   then heading := 89;
if heading < -89  then heading := -89;
if glop    > 360  then    glop := 0;
if glop    < -360 then    glop := 0;

end else begin

end;

end;
end;

SUPERPOINT.x := 1000000000000*(sin(glopimopi)cos(headingimopi));
SUPERPOINT.z := 1000000000000
(cos(glopimopi)cos(headingimopi));
SUPERPOINT.y := 1000000000000
(sin(heading*imopi));

glulookat(old.x,old.y,old.z,old.x+SUPERPOINT.x,old.y-SUPERPOINT.y,old.z-SUPERPOINT.z,0,1,0); //glulookat to instrukcja gdzie nasza kamera patrzec ma.</image></image>

1 użytkowników online, w tym zalogowanych: 0, gości: 1