Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 2006.07.16;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.008 c
2-1151569501
learner
2006-06-29 12:25
2006.07.16
Управление VCL из нити


15-1150439258
Ega23
2006-06-16 10:27
2006.07.16
Просто любопытно - как Query Analyzer написан?


3-1147685443
yozh_programmer
2006-05-15 13:30
2006.07.16
Could not find database ID 104 (...). Ошибка не в тему


3-1147511930
vishnia
2006-05-13 13:18
2006.07.16
Почему не выполняется запрос - создание хранимой процедуры?


2-1151467285
Freze_Kati
2006-06-28 08:01
2006.07.16
Как вставить часть французского текста?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский