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

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

Вернуться   www.boolean.name > Программирование игр для мобильных телефонов > MidletPascal > Наше Open Source Software

Наше Open Source Software Наработки для использования в Ваших проектах

Результаты опроса: Нужен ли Вам этот модуль?
да 8 61.54%
нет 5 38.46%
Голосовавшие: 13. Вы ещё не голосовали в этом опросе

Ответ
 
Опции темы
Старый 14.08.2011, 15:18   #1
Igor
Мастер
 
Аватар для Igor
 
Регистрация: 03.05.2010
Адрес: Подмосковье
Сообщений: 1,217
Написано 436 полезных сообщений
(для 784 пользователей)
3д модуль

Пытался сделать 3д графику, для удобства написал это. Библиотек не использует. Супер возможностей нет, модуль только проецирует точку на экран и выдаёт её координаты. Всё остальное на совести программиста:)

Значительная часть функций для работы с векторами, также управление перемещением и направлением камеры, масштабом изображения.
Описание:

Писалось в MP3.3, при компиляции в MP2.2 ошибок не выдаёт.

Функций много, но практически без всех можно обойтись.

Базовые:
function ToPoint(x,y,z)
возвращает точку (тип point) с координатами x,y,z
procedure SetCamPoint(p:point);
устанавливает координаты камеры
procedure SetCamTarget(p:point);
нацеливает камеру на точку p;
function PointToScreen(p:point):screenPoint;
выдаёт экранные координаты точки

Пример использования:
var sp:screenPoint;
...
SetCamPoint(ToPoint(10,10,0));
SetCamTerget(ToPoint(0,0,0));
...
sp:=pointToScreen(ToPoint(1,1,1));

...
if sp.visible then
plot(sp.x,sp.y);


тип данных - точка экрана. Возвращается функцией PointToScreen
visible=true если точка не находится позади камеры (примерно половина точек) ,но не факт что точка поместится на экран. (могут быть числа x,y вроде -10 или 700)
ScreenPoint=record
x,y:integer;
visible:boolean;
end;


Тип данных - точка в 3д пространстве, по совместительству и вектор из начала координат в эту точку
point=record
x,y,z:real;
end;

IntPoint=ScreenPoint;
какой-то глюк: Иногда при попытке использовать screenPoint компилятор выдаёт ошибку :( ,при использовании IntPoint всё норм

ОПЕРАЦИИ НАД ВЕТОРАМИ
создание точки, вектора
function ToPoint(x,y,z:real):point;

//скалярное произведение
function Scalar(p1,p2:point):real;

//сложение координат точек
function Plus(p1,p2:point):point;

//вычитание координат точек
function Minus(p1,p2:point):point;

//умножение числа на вектор
function KN(n:real;p:point):point;

//Возвращает длину вектора
function VectorLen(p:point):real;

//квадрат длины векторa
function VectorSQR(p:point):real;

//приведение вектора к длине L
function VectorToLen(p:point;L:real):point;

//ОПЕРАЦИИ НАД УГЛАМИ

приведение угла к диапазону -pi до pi
function AngleToPI(b:real):real;

//возвращает true если угол в промежутке от -pi до pi;
function AngleInPi(a:real):boolean;




//КАМЕРA И ОТРИСОВКA
выдаёт экранные координаты точки
function PointToScreen(p:point):screenPoint;

устанавливает камеру в точку p
procedure SetCamPoint(p:point);

возвращает координаты камеры
function GetCamPoint:point;

Двигает камеру в обычной системе отсчёта "p" в данном случае вектор перемещения
Procedure MoveCamPoint(p:point);

двигает камеру отноcительно системы отсчёта предыдущего положения камеры
x:вперёд-назад, y:вправо-влево, z:вверх-вниз
Procedure MoveCam(p:point);

//ориентирует камеру в направлении точки p;
procedure SetCamTarget(p:point);

//МАСШТАБ
при масштабе =1 угол в 45 градусов является отклонением от центра изображения на 1 пиксель.
Более-менее адекватно выглядит при масштабе 200-400, зависит от размера крана

возвращает масштаб
function GetScale:real;

устанавливает масштаб
procedure SetScale(r:real);

умножение масштаба на число
procedure ScaleMul(a:real);

//УГЛЫ НАКЛОНА КАМЕРЫ (hor - азимут, Vert - высота )
возвращает горизонтальный угол наклона камеры в радианах
function GetHor:real;

устанавливает горизонтальный угол наклона камеры
procedure SetHor(a:real);

увеличивает горизонтальный угол наклона на "а"
procedure AddHor(a:real);

возвращает вертикальный угол наклона камеры в радианах
function GetVert:real;

устанавливает вертикальный угол наклона камеры
procedure SetVert(a:real);

увеличивает вертикальный угол наклона на "а"
procedure AddVert(a:real);)

Советую использовать вместе с данной модификацией компилятора MP3.3 - появится функция рисования треугольников и возможность хранить цвет в одной переменной.
Вложения
Тип файла: rar 3d modul.rar (11.4 Кб, 196 просмотров)
Тип файла: rar demo.rar (26.3 Кб, 215 просмотров)
__________________
О¯О ¡¡¡ʁɔvʎнdǝʚǝdǝu dиW
(Offline)
 
Ответить с цитированием
Эти 6 пользователя(ей) сказали Спасибо Igor за это полезное сообщение:
.:MaSe:. (15.07.2014), im_zorg (16.08.2011), JACUK (17.08.2011), Kalter (03.04.2014), odd (07.09.2011), Zorba (15.08.2011)
Ответ


Опции темы

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

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


Часовой пояс GMT +1, время: 11:20.


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