Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.04.2009, 01:22   #11
qpokyc
Форумчанин
 
Аватар для qpokyc
 
Регистрация: 07.04.2009
Сообщений: 117
По умолчанию

Цитата:
Каждый вызов glTranslatef домножает текущую матрицу на новую, => рисуете вы там, куда попали после всех преобразований. Последний пост(код) по очереди передвигает объект на все вектора Xn,Yn, не рисуя после каждого раза.
У него в самом начале прорисовки стоит вызов glLoadidentity, что возвращает центр координат на свое первоначальное место, так что это не то. Чичаз подумаю и мб чтонить напишу...
Copyright © qpokyc (qpy[the dog]bk.ru), 2008-2009 г.
qpokyc вне форума Ответить с цитированием
Старый 10.04.2009, 04:36   #12
qpokyc
Форумчанин
 
Аватар для qpokyc
 
Регистрация: 07.04.2009
Сообщений: 117
Хорошо

Вот
Внутри программа вроде твоей (с иходниками).
Там правдо в мелочах отличается, но там справишся (все основное подробно закоментированно)

Набор мыслей:
1) Если нужна плоская фигура - не включай модель освещения glEnable(GL_LIGHTING);.
2) Там в основном функции из GLU, но их использование вынесено в отдельный модуль и они легко переписываются на аналогичные. Кроме gluLookAt в прорисовке формы, но ее вообще можно убрать.
3) Можешь переписать/так оставить/copy-paste
4) В OpenGL очень важно именно то, в какой последовательности происходит вызов функций. Если что-то рисуется не так как должно, то нужно в первую очередь посмотреть - в каком порядке что включается, рисуется, происходит.
5) Перемещение происходит в 3 координатах =)
6) Метод Paint формы перезаписывается и принудительно вызывать его не надо - он сам вызывается.

И исчо я вляпал где-то лишнюю перерисовку (если заметно - найди!)
Вложения
Тип файла: zip GLShape.zip (245.0 Кб, 76 просмотров)
Copyright © qpokyc (qpy[the dog]bk.ru), 2008-2009 г.

Последний раз редактировалось qpokyc; 10.04.2009 в 04:50.
qpokyc вне форума Ответить с цитированием
Старый 10.04.2009, 17:06   #13
Selestis
Форумчанин
 
Аватар для Selestis
 
Регистрация: 21.01.2009
Сообщений: 719
По умолчанию

Прошу прощения, я был уверен, что у вас уже готовы их прототипы... Вроде как фундаментальные функции работы с веторами) Напишите свой модуль геометрии со всем этим, пригодиться, а мои ф-ии вот:
Код:
type TVector4f = array[0..3] of single;
type TVector = TVector4f;
const NullVector: TVector = ((0),(0),(0),(0));

function VectorAdd(V1,V2: TVector): TVector;
var V: TVector;
begin
V[0]:=V1[0]+V2[0];
V[1]:=V1[1]+V2[1];
V[2]:=V1[2]+V2[2];
Result:=V;
end;

function Distance(V1,V2: TVector): single;
begin
Result:=Sqrt(Sqr(V1[0]-V2[0])+Sqr(V1[1]-V2[1])+Sqr(V1[2]-V2[2]));
end;

function VectorScale(Vector: TVector; f: single): TVector;
var V: TVector;
begin
V[0]:=Vector[0]*f;
V[1]:=Vector[1]*f;
V[2]:=Vector[2]*f;
Result:=V;
end;

function VectorLength(V: TVector): single;
var a: single;
begin
a:=Sqr(V[0])+Sqr(V[1])+Sqr(V[2]);
Result:=Sqrt(A);
end;

function VectorNormalize(V: TVector): TVector;
var L: single;
begin
L:=VectorLength(V);
if L = 0 then begin
   Result:=NullVector;
   Exit;
end;
Result[0]:=V[0]/L;
Result[1]:=V[1]/L;
Result[2]:=V[2]/L;  
end;

function VectorCross(V1,V2: TVector): TVector;
var V: TVector;
begin
V[0]:=V1[1]*V2[2]-V1[2]*V2[1];
V[1]:=V1[2]*V2[0]-V1[0]*V2[2];
V[2]:=V1[0]*V2[1]-V1[1]*V2[0];
Result:=V;
end;

function VectorNegate(Vector: TVector): TVector;
var V: TVector;
begin
V[0]:= -Vector[0];
V[1]:= -Vector[1];
V[2]:= -Vector[2];
Result:=V;
end;

function VectorSubtract(V1,V2: TVector): TVector;
begin
Result:=VectorAdd(V1,VectorNegate(V2));
end;
Изобретатель велосипедов
Selestis вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
С помощью методов и свойств объекта осуществляется управление терминалом. Имя (идентификатор) объекта User>lia Общие вопросы Delphi 4 16.01.2009 16:37
Движение объекта на форме по щелчку мыши Dux Gamedev - cоздание игр: Unity, OpenGL, DirectX 1 08.12.2008 06:35
Движение объекта по синусоиде? Roberto Помощь студентам 10 14.05.2008 17:00
Движение объекта по кругу Roberto Помощь студентам 2 06.05.2008 15:44
Движение объекта к точке frai Общие вопросы Delphi 3 10.01.2008 00:42