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

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

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.02.2012, 15:22   #1
DooMik
 
Регистрация: 30.01.2011
Сообщений: 8
Печаль Текстура OpenGL по условию.

Ребят прошу помощи, пишу дипломную работу.
Вопрос следующий: Как реализовать выбор текстуры по условию.
Поясню. Имею 2 формы: 1форма - форма настроек ( в этой форме выбирается пример текстуры для фигуры с примером её отображения ) и 2 форма в которой отображается собственно 3д модель.

Мне необходимо следующие: Реализовать наложение текстуры на фигуру (форма2) из условия ListBox ( форма1 ), на If не реагирует почему то.

Приложен архив с исходниками.. Пожалуйста, помогите разобраться.
Зарание спасибо.
Вложения
Тип файла: rar Дипломная работа.rar (4.42 Мб, 17 просмотров)

Последний раз редактировалось DooMik; 14.02.2012 в 15:34.
DooMik вне форума Ответить с цитированием
Старый 15.02.2012, 11:13   #2
DooMik
 
Регистрация: 30.01.2011
Сообщений: 8
По умолчанию

Ребят, что никто не знает ?
DooMik вне форума Ответить с цитированием
Старый 15.02.2012, 19:58   #3
Rin
Негодник
Форумчанин
 
Аватар для Rin
 
Регистрация: 10.11.2009
Сообщений: 880
По умолчанию

Складывается впечатление, что ты копировал код, не понимая как это работает.
Разберись хоть немного.
На будущее, используй
Код:
case ListBox1.ItemIndex of
0: {какие-то операторы} ;
1: {какие-то операторы };
....
N: {какие-то операторы};
end;
Вместо
Код:
If  {условие}Then  {какие-то операторы}  по 100 раз.
Это не беспочвенные обвинения. Из-да этого трассировать код не удобно.
И не скромный вопрос не по делу из-за своего любопытства - Ты где учишься, что такая дипломная работа лёгкая?
Вложения
Тип файла: rar Дипломная работа.rar (4.11 Мб, 8 просмотров)
Если помог, проси поставить минус. Будь оригинален!

Последний раз редактировалось Rin; 15.02.2012 в 20:02.
Rin вне форума Ответить с цитированием
Старый 16.02.2012, 00:28   #4
DooMik
 
Регистрация: 30.01.2011
Сообщений: 8
По умолчанию

учусь в техникуме ( г.Тирасполь, Приднестровье ). Это ещё достаточно тяжелая ))) большое спасибо за помощь, то что нужно....

можно сказать что конкретный вопрос стоял в этой строчке
wrkPointer :=ReadBitmap(Form1.pathTexture, sWidth, tHeight);
DooMik вне форума Ответить с цитированием
Старый 16.02.2012, 01:26   #5
Rin
Негодник
Форумчанин
 
Аватар для Rin
 
Регистрация: 10.11.2009
Сообщений: 880
По умолчанию

Техникум. Тоже хорошее дело. Но вышку не забудь . Если знаешь англ. и хорошо подготовишься, то можно и в Гарвард на он-лайн обучение НА ХАЛЯВУ.
Цитата:
можно сказать что конкретный вопрос стоял в этой строчке
wrkPointer :=ReadBitmap(Form1.pathTexture, sWidth, tHeight);
Если не занудствовать, то можно и так сказать )))
Если помог, проси поставить минус. Будь оригинален!

Последний раз редактировалось Rin; 16.02.2012 в 01:35.
Rin вне форума Ответить с цитированием
Старый 12.03.2012, 13:19   #6
Rin
Негодник
Форумчанин
 
Аватар для Rin
 
Регистрация: 10.11.2009
Сообщений: 880
По умолчанию

glTranslatef отвечает за перемещение объектов по сцене. Прикрутил к исходнику.

На счёт прыжка куба я тебя не совсем понял, глянь сурс - так, не так?

На счёт других фигур.
Ты все равно юзаешь GLUT , поэтому приведу все фигуры из этого модуля.

Код:
procedure DrawBox(Size : GLfloat; DrawType : GLenum);
procedureglutWireCube(Size : GLDouble);
procedure glutSolidCube(Size :GLDouble);
procedure glutWireSphere(
  Radius : GLdouble;
  Slices : GLint;
  Stacks : GLint);
procedure glutSolidSphere(
  Radius : GLdouble;
  Slices : GLint;
  Stacks : GLint);
procedure glutWireCone(
  Base : GLdouble;
  Height : GLdouble;
  Slices : GLint;
  Stacks : GLint);
procedure glutSolidCone(
  Base : GLdouble;  Height : GLdouble;
  Slices : GLint;  Stacks : GLint);
procedure glutWireTorus(
  innerRadius : GLdouble;  outerRadius :GLdouble;
  nsides : GLint;
  rings : GLint);
procedure glutSolidTorus(
  innerRadius : GLdouble;  outerRadius :GLdouble;
  nsides : GLint;
  rings : GLint);
procedure glutWireDodecahedron;
procedure glutSolidDodecahedron;
procedure Octaheadron(ShadeType :GLenum);
procedure glutWireOctaheadron;
procedure glutSolidOctaheadron;
procedure Icosahedron(ShadeType :GLenum);
procedure glutWireIcosahedron;
procedure glutSolidIcosahedron;
procedure Tetrahedron(ShadeType :GLenum);
procedure glutWireTetrahedron;
procedure glutSolidTetrahedron;
procedure Teapot(Grid :GLint; Scale : GLdouble; ShadeType : GLenum);
procedurу glutWireTeapot(Scale : GLdouble);
procedure glutSolidTeapot(Scale :GLdouble);
Вложения
Тип файла: rar Выбор текстуры и наложение на куб.rar (4.11 Мб, 11 просмотров)
Если помог, проси поставить минус. Будь оригинален!

Последний раз редактировалось Rin; 12.03.2012 в 13:39. Причина: Грамматику подправить.
Rin вне форума Ответить с цитированием
Старый 12.03.2012, 15:02   #7
DooMik
 
Регистрация: 30.01.2011
Сообщений: 8
Печаль

Насчёт прыжка вот прикрепил файл, просто диплом немного дорабатывал. Насчёт GLTranslatef тоже так же делал, но сказал препод что да, можно но было бы лучше что бы фигура перемещалась как в скринсейвере "Летающие предметы Windows ", а не как бы по невидимой оси. Думал в этом поможет непосредственно перерисовка фигуры, в частности её координаты, но почему то она стоит на месте как и была... не изменяется положение её ... изменяется положение в GLTranslatef в процедуре FormCreate. вот если как там осуществить её перемещение было бы то что нужно. т.е. я там менял изначальное положение фигуры например не (0,0), а (2,0) и фигура в правой стороне экрана становится. Вот примерно нужно как то так её перемещать, вообще не понимаю как это сделать
Вложения
Тип файла: rar Diplom.rar (3.08 Мб, 10 просмотров)
DooMik вне форума Ответить с цитированием
Старый 12.03.2012, 17:16   #8
Rin
Негодник
Форумчанин
 
Аватар для Rin
 
Регистрация: 10.11.2009
Сообщений: 880
По умолчанию

Измени названия текстур на цифры с 0 до 9 и исправь присвоение pathTexture новых имён файлов.

Случай 1. Динамическое появление фигуры
Добавил глобальную переменную inter_val:byte=22;, в FormCreate дописал randomize; и изменил код процедуры таймера.
Код:
procedure TForm2.TimerTimer(Sender: TObject);
var a:integer;
begin
  a:=Form1.TrackBar1.Position;
  Angle := (Angle + a) mod 360;
  inter_val:=inter_val-1;

  if inter_val<=0 then
  begin
  Form1.pathTexture:=GetCurrentDir+'\Textures\'+inttostr(random(10))+'.bmp';
  BmpTexture;
  inter_val:=45;
  end;

  InvalidateRect(Handle, nil, False);
end;
Случай 2. Летающие фигуры Windows.
Добавил 4 глобальные переменные - x:smallint=0; y:smallint=0; dx:smallint=0.05; dy:smallint=0.05; , заменил код таймера на такой:
Код:
procedure TForm2.TimerTimer(Sender: TObject);
var a:integer;
begin
  a:=Form1.TrackBar1.Position;
  Angle := (Angle + a) mod 360;
 
  x:=x+dx;
  if (x>4)or(x<-4.3) then dx:=dx*-1;

  y:=y+dy;
  if (y>2.5)or(y<-4.3) then dy:=dy*-1;

  InvalidateRect(Handle, nil, False);
end;
В FormResize изменил последний параметр на 20 в gluPerspective , иначе фигура обрезается.
И в FormPaint вызываю glTranslatef(x,y,0). Только glTranslatef вызывается до glRotatef , а не наоборот. И напомню, что все преобразования делаются внутри glPushMatrix ----- ---------glPopMatrix.
Если помог, проси поставить минус. Будь оригинален!
Rin вне форума Ответить с цитированием
Старый 12.03.2012, 17:16   #9
Rin
Негодник
Форумчанин
 
Аватар для Rin
 
Регистрация: 10.11.2009
Сообщений: 880
По умолчанию

Измени названия текстур на цифры с 0 до 9 и исправь присвоение pathTexture новых имён файлов.

Случай 1. Динамическое появление фигуры
Добавил глобальную переменную inter_val:byte=22;, в FormCreate дописал randomize; и изменил код процедуры таймера.
Код:
procedure TForm2.TimerTimer(Sender: TObject);
var a:integer;
begin
  a:=Form1.TrackBar1.Position;
  Angle := (Angle + a) mod 360;
  inter_val:=inter_val-1;

  if inter_val<=0 then
  begin
  Form1.pathTexture:=GetCurrentDir+'\Textures\'+inttostr(random(10))+'.bmp';
  BmpTexture;
  inter_val:=45;
  end;

  InvalidateRect(Handle, nil, False);
end;
Случай 2. Летающие фигуры Windows.
Добавил 4 глобальные переменные - x:smallint=0; y:smallint=0; dx:smallint=0.05; dy:smallint=0.05; , заменил код таймера на такой:
Код:
procedure TForm2.TimerTimer(Sender: TObject);
var a:integer;
begin
  a:=Form1.TrackBar1.Position;
  Angle := (Angle + a) mod 360;
 
  x:=x+dx;
  if (x>4)or(x<-4.3) then dx:=dx*-1;

  y:=y+dy;
  if (y>2.5)or(y<-4.3) then dy:=dy*-1;

  InvalidateRect(Handle, nil, False);
end;
В FormResize изменил последний параметр на 20 в gluPerspective , иначе фигура обрезается.
И в FormPaint вызываю glTranslatef(x,y,0). Только glTranslatef вызывается до glRotatef , а не наоборот. И напомню, что все преобразования делаются внутри glPushMatrix ----- ---------glPopMatrix.
Если помог, проси поставить минус. Будь оригинален!
Rin вне форума Ответить с цитированием
Старый 15.03.2012, 22:36   #10
DooMik
 
Регистрация: 30.01.2011
Сообщений: 8
По умолчанию

Rin спасибо большое ) очень очень помогли. У меня если Вам не трудно конечно будет, ещё один вопрос... в общем последнее что попросили реализовать это для примера ещё использовать фигуры просто с цветом .. т.е. можно выбрать Текстурированные фигуры и Цветные фигуры... при выборе появляются соответствующие настройки. Вопрос в общем вот в чём состоит, не могу понять в чём соль данного вопроса... в общем если я использую Цветные фигуры ( Выбираю цвет всё работает хорошо ) и затем перехожу на текстурированные ( Выбираю текстуру так же всё хорошо выбирается ), но вот если назад на цветные перехожу при выборе цвета он не применяется к фигуре... а цвет на фигуре такой как на текстуре.. можно ли реализовать что бы цвет применялся к цветным фигурам и текстура к текстурированным. В примере прописал только для RadioButton7 . Спасибо)
Вложения
Тип файла: rar Diplom.rar (4.73 Мб, 10 просмотров)
DooMik вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Разная текстура для каждой грани куба OpenGL DIgorevich Мультимедиа в Delphi 4 16.12.2011 12:17
Красивая текстура ZvEr_HaCkEr Свободное общение 4 05.01.2011 10:20
Текстура на 2D объект OpenGL saggy Мультимедиа в Delphi 0 30.06.2010 13:52
Прозрачная текстура Miha85193 Мультимедиа в Delphi 1 01.04.2010 20:59
Прозрачная текстура Miha85193 Компоненты Delphi 0 29.03.2010 12:34