Модераторы: Snowy, Alexeis, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> OpenGL программка, вешает компьютер ( 
:(
    Опции темы
welt
Дата 27.3.2008, 00:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 21.5.2005
Где: UnderGround

Репутация: нет
Всего: нет



Возникала такая проблема. 
Экспортировал .STL файл в код на с++. В коде по точкам построен объект на OpenGL.
Перевел код в делфи.
Вставил в проект. Вот что вышло. 
Привожу код экспортикованного в файл обекта и далее куда я его вставил.

Код


procedure gra_function;
label m0,m1,start;

var
  quadObj: GLUquadricObj;

const
  data1: array [0..3] of double =
  (+1.000000000e+000,+1.000000000e+000,+1.000000000e+000,+1.000000000e+000);
  data2: array [0..3] of double =
  (+1.000000000e+000,+1.000000000e+000,+1.000000000e+000,+1.000000000e+000);
  data3: array [0..3] of double =
  (+1.000000000e+000,+1.000000000e+000,+1.000000000e+000,+1.000000000e+000);

begin
quadObj := gluNewQuadric;
goto start;
m0:
    glNewList(1, GL_COMPILE);
    glScalef(+1.772968844e-002, +1.772968844e-002, +1.772968844e-002);
    glTranslatef(-1.119659424e+000, -7.942279816e+000, -3.500000000e+001);
    glBegin(GL_TRIANGLES);
    glNormal3f(-4.200000000e+003, -9.100000000e+003, -7.800000000e+003);
    glVertex3f(-3.138034058e+001, -2.205772018e+001, +0.000000000e+000);
    glNormal3f(-8.400000000e+003, +4.550000000e+003, -3.900000000e+003);
    glVertex3f(-3.138034058e+001, +3.794227982e+001, +0.000000000e+000);
    glNormal3f(+4.200000000e+003, +9.100000000e+003, -7.800000000e+003);
    glVertex3f(+3.361965942e+001, +3.794227982e+001, +0.000000000e+000);
    glNormal3f(+4.200000000e+003, +9.100000000e+003, -7.800000000e+003);
    glVertex3f(+3.361965942e+001, +3.794227982e+001, +0.000000000e+000);
    glNormal3f(+8.400000000e+003, -4.550000000e+003, -3.900000000e+003);
    glVertex3f(+3.361965942e+001, -2.205772018e+001, +0.000000000e+000);
    glNormal3f(-4.200000000e+003, -9.100000000e+003, -7.800000000e+003);
    glVertex3f(-3.138034058e+001, -2.205772018e+001, +0.000000000e+000);
    glNormal3f(-8.400000000e+003, -4.550000000e+003, +7.800000000e+003);
    glVertex3f(-3.138034058e+001, -2.205772018e+001, +7.000000000e+001);
    glNormal3f(+4.200000000e+003, -9.100000000e+003, +3.900000000e+003);
    glVertex3f(+3.361965942e+001, -2.205772018e+001, +7.000000000e+001);
    glNormal3f(+8.400000000e+003, +4.550000000e+003, +7.800000000e+003);
    glVertex3f(+3.361965942e+001, +3.794227982e+001, +7.000000000e+001);
    glNormal3f(+8.400000000e+003, +4.550000000e+003, +7.800000000e+003);
    glVertex3f(+3.361965942e+001, +3.794227982e+001, +7.000000000e+001);
    glNormal3f(-4.200000000e+003, +9.100000000e+003, +3.900000000e+003);
    glVertex3f(-3.138034058e+001, +3.794227982e+001, +7.000000000e+001);
    glNormal3f(-8.400000000e+003, -4.550000000e+003, +7.800000000e+003);
    glVertex3f(-3.138034058e+001, -2.205772018e+001, +7.000000000e+001);
    glNormal3f(-4.200000000e+003, -9.100000000e+003, -7.800000000e+003);
    glVertex3f(-3.138034058e+001, -2.205772018e+001, +0.000000000e+000);
    glNormal3f(+8.400000000e+003, -4.550000000e+003, -3.900000000e+003);
    glVertex3f(+3.361965942e+001, -2.205772018e+001, +0.000000000e+000);
    glNormal3f(+4.200000000e+003, -9.100000000e+003, +3.900000000e+003);
    glVertex3f(+3.361965942e+001, -2.205772018e+001, +7.000000000e+001);
    glNormal3f(+4.200000000e+003, -9.100000000e+003, +3.900000000e+003);
    glVertex3f(+3.361965942e+001, -2.205772018e+001, +7.000000000e+001);
    glNormal3f(-8.400000000e+003, -4.550000000e+003, +7.800000000e+003);
    glVertex3f(-3.138034058e+001, -2.205772018e+001, +7.000000000e+001);
    glNormal3f(-4.200000000e+003, -9.100000000e+003, -7.800000000e+003);
    glVertex3f(-3.138034058e+001, -2.205772018e+001, +0.000000000e+000);
    glNormal3f(+8.400000000e+003, -4.550000000e+003, -3.900000000e+003);
    glVertex3f(+3.361965942e+001, -2.205772018e+001, +0.000000000e+000);
    glNormal3f(+4.200000000e+003, +9.100000000e+003, -7.800000000e+003);
    glVertex3f(+3.361965942e+001, +3.794227982e+001, +0.000000000e+000);
    glNormal3f(+8.400000000e+003, +4.550000000e+003, +7.800000000e+003);
    glVertex3f(+3.361965942e+001, +3.794227982e+001, +7.000000000e+001);
    glNormal3f(+8.400000000e+003, +4.550000000e+003, +7.800000000e+003);
    glVertex3f(+3.361965942e+001, +3.794227982e+001, +7.000000000e+001);
    glNormal3f(+4.200000000e+003, -9.100000000e+003, +3.900000000e+003);
    glVertex3f(+3.361965942e+001, -2.205772018e+001, +7.000000000e+001);
    glNormal3f(+8.400000000e+003, -4.550000000e+003, -3.900000000e+003);
    glVertex3f(+3.361965942e+001, -2.205772018e+001, +0.000000000e+000);
    glNormal3f(+4.200000000e+003, +9.100000000e+003, -7.800000000e+003);
    glVertex3f(+3.361965942e+001, +3.794227982e+001, +0.000000000e+000);
    glNormal3f(-8.400000000e+003, +4.550000000e+003, -3.900000000e+003);
    glVertex3f(-3.138034058e+001, +3.794227982e+001, +0.000000000e+000);
    glNormal3f(-4.200000000e+003, +9.100000000e+003, +3.900000000e+003);
    glVertex3f(-3.138034058e+001, +3.794227982e+001, +7.000000000e+001);
    glNormal3f(-4.200000000e+003, +9.100000000e+003, +3.900000000e+003);
    glVertex3f(-3.138034058e+001, +3.794227982e+001, +7.000000000e+001);
    glNormal3f(+8.400000000e+003, +4.550000000e+003, +7.800000000e+003);
    glVertex3f(+3.361965942e+001, +3.794227982e+001, +7.000000000e+001);
    glNormal3f(+4.200000000e+003, +9.100000000e+003, -7.800000000e+003);
    glVertex3f(+3.361965942e+001, +3.794227982e+001, +0.000000000e+000);
    glNormal3f(-8.400000000e+003, +4.550000000e+003, -3.900000000e+003);
    glVertex3f(-3.138034058e+001, +3.794227982e+001, +0.000000000e+000);
    glNormal3f(-4.200000000e+003, -9.100000000e+003, -7.800000000e+003);
    glVertex3f(-3.138034058e+001, -2.205772018e+001, +0.000000000e+000);
    glNormal3f(-8.400000000e+003, -4.550000000e+003, +7.800000000e+003);
    glVertex3f(-3.138034058e+001, -2.205772018e+001, +7.000000000e+001);
    glNormal3f(-8.400000000e+003, -4.550000000e+003, +7.800000000e+003);
    glVertex3f(-3.138034058e+001, -2.205772018e+001, +7.000000000e+001);
    glNormal3f(-4.200000000e+003, +9.100000000e+003, +3.900000000e+003);
    glVertex3f(-3.138034058e+001, +3.794227982e+001, +7.000000000e+001);
    glNormal3f(-8.400000000e+003, +4.550000000e+003, -3.900000000e+003);
    glVertex3f(-3.138034058e+001, +3.794227982e+001, +0.000000000e+000);
    glEnd();
    glEndList();
    nextStart:=1;
m1:
    glClear(GL_COLOR_BUFFER_BIT);
    glClear(GL_DEPTH_BUFFER_BIT);
    glEnable(GL_NORMALIZE);
    glEnable(GL_DEPTH_TEST);
//    float data[] = {+1.000000000e+000f,+1.000000000e+000f,+1.000000000e+000f,+1.000000000e+000f};
        glLightfv(GL_LIGHT1, GL_AMBIENT, @data1);

//    float data[] = {+1.000000000e+000f,+1.000000000e+000f,+1.000000000e+000f,+1.000000000e+000f};
        glLightfv(GL_LIGHT1, GL_DIFFUSE, @data2);

//    float data[] = {+1.000000000e+000f,+1.000000000e+000f,+1.000000000e+000f,+1.000000000e+000f};
        glLightfv(GL_LIGHT1, GL_SPECULAR, @data3);

    glEnable(GL_LIGHT1);
    glEnable(GL_LIGHTING);
    glPushMatrix();
    glCallList(1);
    glPopMatrix();

start:
    case nextStart of
     0: goto m0;
     1: goto m1;
  end;
end;


На форму кинул кнопку, вот обработчик кнопки 

Код

....
hrc: HGLRC;
dc : HDC;
....

procedure TForm1.Button1Click(Sender: TObject);
var
 ps : TPaintStruct;
begin
 BeginPaint (Panel1.Handle, ps);
 wglMakeCurrent(dc, hrc);
 glViewPort (0, 0, Panel1.ClientWidth, Panel1.ClientHeight);
 glClearColor (0.75, 0.75, 0.5, 1.0);
 glClear (GL_COLOR_BUFFER_BIT);

 glBegin (GL_QUADS);
   gra_function;
 glEnd;

 SwapBuffers(Panel1.Handle);
 wglMakeCurrent(0, 0);
 EndPaint (Panel1.Handle, ps);
end;


Также есть инициализация

Код

procedure TForm1.FormCreate(Sender: TObject);
begin
 dc := GetDC (Panel1.Handle);
 SetDCPixelFormat(dc);
 hrc := wglCreateContext(dc);
end;
 

После компиляции компбютер зависает так, что сделать ничего нельзя, даже сдвинуть мышь.
Буду рад. если кто подскажет, как откомпилировать нормально
PM MAIL   Вверх
Graf_h
Дата 27.3.2008, 10:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 482
Регистрация: 18.10.2007
Где: г. Ровно, Украина

Репутация: нет
Всего: 5



Если честно, то сразу трудно сказать в чем проблема! Я бы на твоем месте пошагово компилировал бы прогу и нашел в каком именно месте зависает! smile 


--------------------
Иногда переменная - это просто переменная
PM MAIL ICQ   Вверх
Alexeis
Дата 27.3.2008, 11:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 55
Всего: 459



welt, просто ужас тихий. Какие GoTo в мирное время? Цикл получился сильно разветвленным и труднопредсказуемым, это раз.
Второе  SwapBuffers это та функция, которая сбросит картинку в видеопамять. Она должна вызываться после окончания формирования каждого кадра. И три, чтобы программа реагировала на действия пользователя нужно обрабатывать очередь сообщений smile , а тут в бесконечном цикле ни разу не передается управление в основной цикл обработки сообщений, попросту говоря не вызывается applicatin.processmessges;


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Звук, графика и видео"
Girder
Snowy
Alexeis

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • По вопросам разработки игр стоит заглянуть сюда

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема »


 




[ Время генерации скрипта: 0.0686 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.