Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.07.16;
Скачать: CL | DM;

Вниз

gluProject вызывает Run time error?!   Найти похожие ветки 

 
Кефир87 ©   (2005-11-12 21:59) [0]

Может я что-то такое в этой цункции не понимаю, но она именно так и делает... Вроде все как у Краснова:

function cglProject;
var
 modelMatrix,
 projMatrix : array[0..15] of GLdouble;
 view : array[0..3] of GLint;
 winx,winy,winz:Double;
begin

 glGetIntegerv(GL_VIEWPORT, @view);
 glGetFloatv(GL_MODELVIEW_MATRIX,  @modelMatrix);
 glGetFloatv(GL_PROJECTION_MATRIX, @projMatrix);

 gluProject(x, y, z, @modelMatrix, @projMatrix, @view, winx, winy, winz);

 Result.X := winx;
 Result.Y := winy;
 Result.Z := winz;
end;


А потом БАЦ! И все к чертям летит 8(


 
Zeqfreed ©   (2005-11-12 22:17) [1]

Кефир87 ©   (12.11.05 21:59)
Номер ошибки-то какой? Я так полагаю, что 216?


 
XProger ©   (2005-11-13 01:12) [2]


modelMatrix,
projMatrix : array[0..15] of GLdouble;
...
glGetFloatv(GL_MODELVIEW_MATRIX,  @modelMatrix);
glGetFloatv(GL_PROJECTION_MATRIX, @projMatrix);


Итак, жмёшь F1 и ищешь тему про типы переменных...!


 
Кефир87 ©   (2005-11-13 22:16) [3]

Ладно. Лохнулся. Только вот всеравно не работает нихрена! И вроде матрици не меню после проэкци... Может кто объяснит как это дело все вообще работает, а то у краснова мильком об этом сказанно... Мне не срочно 8) Это просто интересно 8)


 
XProger ©   (2005-11-14 02:23) [4]

У тебя рантайм еррора не будет, т.к. компилятор этот код не скомпилирует ;)
Показывай код!?


 
Кефир87 ©   (2005-11-14 20:12) [5]

Да я натупил. Заполняю массив теперь всетаки из GLfloat 8) Ран тайма больше нет, но точка проэцируется не правильно! Я всетаки не понимаю... Матрици которые прожекту передаются являются текущими. Проэкционная меняется каждый кадр в начале (камера, потом считаю фрустум) и в конце когда текст вывожу. Так вот я сначала хочу выяснить проэкцию в экранных координатах, а потом в этом месте, в ортогональной проэкции вывесть некую надпись. Вот эту функцию:

function cglProject(x,y,z:Single):TPoint;
var
 modelMatrix,
 projMatrix : array[0..15] of GLfloat;
 view : array[0..3] of GLint;
 winx,winy,winz:Double;
begin

 glGetIntegerv(GL_VIEWPORT, @view);
 glGetFloatv(GL_MODELVIEW_MATRIX,  @modelMatrix);
 glGetFloatv(GL_PROJECTION_MATRIX, @projMatrix);

 gluProject(x, y, z, @modelMatrix, @projMatrix, @view, winx, winy, winz);

 Result.X := Trunc(winx);
 Result.Y := Trunc(winy);
end;

Вызываю после установки камеры, подсчета фрустума, вывода всех объектов (причем для каждого меняется объектная матрица...). Потом делаю ортогональную проэкцию и вывожу тест в той точке которую вернула моя функция... Но текст выводится всегда строго в середине экрана! Но иногда получается так извернуть камеру что он (текст) кудато сползает... В чем же может быть дело. Думаю я что-то с матрицами натупил... Или просто не понимаю как работает gluProject...

З.Ы: XProger, все у меня отлично компилировалось, как ни странно 8)


 
XProger ©   (2005-11-15 01:31) [6]

function cglProject;
ни при каких условиях не скомпилируется ;)))
Почему матрицы не из double? ;)


 
Кефир87 ©   (2005-11-15 18:39) [7]

Ты што?! Издиваешься?! Как она может не откомпилороваться, если она компилируется и компилятор при этом молчит! Наверно ты не понял того что полный заголовок функции у меня находится перед implamentation 8) А я его забыл написать 8)

На счет типов матриц я уже запутался... Ну короче поверю Краснову... Вот!

Мое!

function cglProject;
var
 modelMatrix,
 projMatrix : array[0..15] of GLdouble;
 view : array[0..3] of GLint;
 winx,winy,winz:Double;
begin

 glGetIntegerv(GL_VIEWPORT, @view);
 glGetFloatv(GL_MODELVIEW_MATRIX,  @modelMatrix);
 glGetFloatv(GL_PROJECTION_MATRIX, @projMatrix);

 gluProject(x, y, z, @modelMatrix, @projMatrix, @view, winx, winy, winz);

 Result.X := Trunc(winx);
 Result.Y := CWE_SHEIGHT-Trunc(winy);
end;

Краснова:

procedure TfrmGL.Print;
var
 Viewport : Array [0..3] of GLint;
 mvMatrix, ProjMatrix : Array [0..15] of GLdouble;
 wx, wy, wz : GLdouble; // îêîííûå êîîðäèíàòû
begin
 // çàïîëíåíèå ìàññèâîâ ìàòðèö
 glGetlntegerv (GL_VIEWPORT, @Viewport);
 glGetDoublev (GL_MODELVIEW_MATRIX, @mvMatrix),
 glGetDoublev (GL_PROJECTION_MATRIX, @ProjMatrix);
 // ïåðåâîä êîîðäèíàò îáúåêòà â îêîííûå êîîðäèíàòû
 gluProject (0, 0, -0.5, @mvMatrix, @ProjMatrix, @Viewport, wx, wy, wz);
 // ñîáñòâåííî âûâîä ïîëó÷åííûõ îêîííûõ êîîðäèíàò
 Memol.Clear; Memol.Lines.Add("") ,
 Memol.Lines.Add("Îêîííûå êîîðäèíàòû.");
 Memol.Lines.Add(" x = " + FloatToStr (wx) ) ;
 Memol.Lines.Add(" ó = " + FloatToStr (ClientHeight - wy) ) ;
 Memol.Lines.Add(" z = " + FloatToStr (wz));
end;


Найдите 10 отличий 8)


 
Кефир87 ©   (2005-11-15 18:44) [8]

Опять забыл:

function cglProject(x,y,z:Single):TPoint;


 
XProger ©   (2005-11-15 21:04) [9]

Краснов дядя умный, и ему никто 3 поста подряд не вдалбливал, что float и double это не одно и то же!!!
Так с какого перепугу ты делаешь glGetFloatv для GLdouble матриц???


 
Кефир87 ©   (2005-11-17 19:12) [10]

Нда... Во меня переклинило...

 glGetFloatv(GL_MODELVIEW_MATRIX,  @modelMatrix);
glGetFloatv(GL_PROJECTION_MATRIX, @projMatrix);

-----

 glGetDoublev (GL_MODELVIEW_MATRIX, @mvMatrix),
glGetDoublev (GL_PROJECTION_MATRIX, @ProjMatrix);



Страницы: 1 вся ветка

Текущий архив: 2006.07.16;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.031 c
2-1151515879
GudenTak
2006-06-28 21:31
2006.07.16
функция PosEx


2-1151651681
FFFF
2006-06-30 11:14
2006.07.16
Как открыть документ Word


15-1150414104
Бат
2006-06-16 03:28
2006.07.16
Можно ли ВиндосХР поставить на винчестер на мобилрэксе?


15-1150463110
if then
2006-06-16 17:05
2006.07.16
Chto takoe iskustvennyj intelekt


2-1151630252
NigthSkif
2006-06-30 05:17
2006.07.16
Tedit