Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для мобильных телефонов > MidletPascal > Проекты на MidletPascal

Ответ
 
Опции темы
Старый 16.05.2011, 20:31   #1
ssanek
AnyKey`щик
 
Регистрация: 31.08.2010
Сообщений: 7
Написано одно полезное сообщение
(для 2 участников)
Смех Парни помогите.

Короче пишу 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 быстрее.
Зарание спасибо.
Вложения
Тип файла: rar 3D049.rar (25.8 Кб, 451 просмотров)

Последний раз редактировалось ssanek, 16.05.2011 в 20:33. Причина: Файл добавить забыл)))
(Offline)
 
Ответить с цитированием
Старый 16.05.2011, 21:20   #2
Igor
Мастер
 
Аватар для Igor
 
Регистрация: 03.05.2010
Адрес: Подмосковье
Сообщений: 1,218
Написано 438 полезных сообщений
(для 790 пользователей)
Ответ: Парни помогите.

Код более-менее понятен, но: где комментарии? где табуляция?
И ещё - всё слишком мощно организовано. Можно было бы и попроще.
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 не должно быть ";"?
__________________
О¯О ¡¡¡ʁɔvʎнdǝʚǝdǝu dиW
(Offline)
 
Ответить с цитированием
Старый 17.05.2011, 17:02   #3
ssanek
AnyKey`щик
 
Регистрация: 31.08.2010
Сообщений: 7
Написано одно полезное сообщение
(для 2 участников)
Ответ: Парни помогите.

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


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


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


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com