forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Проекты на MidletPascal (http://forum.boolean.name/forumdisplay.php?f=88)
-   -   Парни помогите. (http://forum.boolean.name/showthread.php?t=14748)

ssanek 16.05.2011 20:31

Парни помогите.
 
Вложений: 1
Короче пишу 3d движок.Вот версия с кометами...В чём проблема а проблема в даже не в 3D а в 2D что меня воще выводит. короче если линия сильно выходит за одну сторону экрана телефон автоматом выведит её с другой стороны...Чтобы это устранить я придумал вот это
if ((x>camera.h) or (x<0) or (x1>camera.h) or (x1<0)) and(x-x1<>0) then
begin
xf:=x;
yf:=y;
x1f:=x1;
y1f:=y1;
a:=(yf-y1f)/(xf-x1f);
b:=y1f-x1f*a;
if x<0 then begin y:=trunc(b); x:=0; end else
if x>camera.h then begin y:=trunc(camera.h*a+b); x:=camera.h; end;
if x1>camera.h then begin y1:=trunc(camera.h*a+b); x1:=camera.h; end else
if x1<0 then begin y1:=trunc(b);x1:=0; end;
end;

if ((y>camera.w) or (y<0) or (y1>camera.w) or (y1<0)) and (y-y1<>0) then
begin
xf:=y;
yf:=x;
x1f:=y1;
y1f:=x1;
a:=(yf-y1f)/(xf-x1f);
b:=y1f-x1f*a;
if y<0 then begin x:=trunc(b); y:=0; end else
if y>camera.w then begin x:=trunc(camera.w*a+b); y:=camera.w; end;
if y1>camera.w then begin x1:=trunc(camera.w*a+b); y1:=camera.w; end else
if y1<0 then begin x1:=trunc(b);y1:=0; end;
end;
но это не работает я уже заколебался а закрывать проэт не хочу... короче задача проста есть две 2D точки образующии отрезок надо чтобы эти отрезки отсекались краями экрана и получались новые 2D точки. короче помогите кому не сложно.заодно движок потестите,после того как эту проблему устраню оптимизирую его он сейчас нормально конечно работает но может раза 2-3 быстрее.
Зарание спасибо.:)

Igor 16.05.2011 21:20

Ответ: Парни помогите.
 
Код более-менее понятен, но: где комментарии? где табуляция?
И ещё - всё слишком мощно организовано. Можно было бы и попроще.
PHP код:

procedure draw3dline(p,p1:poin);
var 
r:poinx,y,x1,y1:integerj:integera,b,xf,yf,x1f,y1f:real;
begin
j
:=0
if 
p1.z>p.z then 
  begin r
:=p1p1:=pp:=rend;
if (
p1.z>=camera.lthen 
  begin
  j
:=1;
  
x:=trunc(camera.l*p.x/p.z);
  
x1:=trunc(camera.l*p1.x/p1.z);
  
y:=trunc(camera.l*p.y/p.z);
  
y1:=trunc(camera.l*p1.y/p1.z);
  
end;  //?!
else
if (
p.z>camera.lthen ... 

Тебе не кажется что в конструкции if then begin end else не должно быть ";"?

ssanek 17.05.2011 17:02

Ответ: Парни помогите.
 
Хе хе.. интересно... интересно то что паскаль ошибки в этом не видит... это интересно... я конечно исправил ,но это была не основная ошибка, такчто. возвращаемся к сообщению номер один ,т.к за весь день новых идей ,у меня, не появилось ,что обидно, но является фактом.


Часовой пояс GMT +4, время: 12:54.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot