Текущий архив: 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.47 MB
Время: 0.01 c