Перейти до вмісту

3D графіка


Повідомлень в темі: 30

#1 Selena

    Місцевий

  • Користувачі
  • PipPipPipPipPipPip
  • 212 повідомлень
  • Стать:Жінка

Відправлено 07.08.2007 – 21:22

  • 30
Будь-ласка допоможіть! В графіці новачок, не знаю з чого починати вивчення.
Необхідна порада ;) . Чи можна засобами OpenGL створити силует людини (в тривимірному просторі)?
Якщо так, то які книжки мені варто дивитись, як початківцю. Наперед всім дякую B) !

#2 volodymyr_ch

    Абориген

  • Користувачі
  • PipPipPipPip
  • 96 повідомлень
  • Стать:Чоловік

Відправлено 07.08.2007 – 21:47

Якщо ти тільки почала вивчати програмування графіки з використання OpenGL, то до створення моделі людини, ІМХО, ще ой як далеко. Спочатку необхідно зрозуміти основи - полігони, перетворення, освітлення і т.д. , а потім вже намагатися робити більш складні речі. Щодо книжок:

М.Ву, Т. Девіс, Дж. Нейдер, Д. Шрайнер - "OpenGL. Руководство по программированию" - класика. В ній детально розказується про більшість функцій OpenGL та надаються приклади на мові C

Річард С.Райт-молодший, Бенджамін Ліпчак - "OpenGL - Суперкнига" - книга написана зрозумілою мовою. Містить багато корисної інформації про застосування OpenGL, опис функцій та приклади використання. Вся книга поділена на три розділи - "Классический OpenGL", "OpenGL Повсюду"( реалізація бібліотеки на різних платформах) та "OpenGL - следующее поколение" ( нововведення в OpenGL та новітні технології, наприклад мова програмування шейдерів).

ЗІ. Вибач, що назви книг давав російською, але, наскільки я знаю, цих книг українською мовою не видавали ( хоча може я й помиляюсь).

ЗЗІ. Може в твоєму випадку простіше буде вивчити якусь студію моделювання 3D, наприклад 3DSMax, Maya чи Blender ?

Повідомлення відредагував vladimir_ch: 07.08.2007 – 21:49

  • 0

#3 Archon-ua

    Літають тут всякі...

  • Користувачі
  • PipPipPipPipPipPipPipPipPip
  • 998 повідомлень
  • Стать:Чоловік
  • Місто:Земля і біля неї...

Відправлено 07.08.2007 – 22:03

Взагалі то моделі і робляться в спец. 3D редакторах. А потім вже підгружаються програмою в OpenGL
  • 0

#4 Selena

    Місцевий

  • Користувачі
  • PipPipPipPipPipPip
  • 212 повідомлень
  • Стать:Жінка

Відправлено 08.08.2007 – 09:52

Дякую, що так швидко відгукнулись ;) .
Я знала, що поставила собі нелегку задачу. А скільки часу буде потрібно, щоб освоїти OpenGL настільки, щоб я могла зробити задумане? Додам, що вчуся досить швидко. Доречі, дякую за літературу!!!
  • 0

#5 Archon-ua

    Літають тут всякі...

  • Користувачі
  • PipPipPipPipPipPipPipPipPip
  • 998 повідомлень
  • Стать:Чоловік
  • Місто:Земля і біля неї...

Відправлено 08.08.2007 – 10:13

Раджу ще заглянути СЮДИ ;)
  • 0

#6 Гість_Brazier_*

  • Гості

Відправлено 08.08.2007 – 10:31

Легше вже знайти готову модель з ігри та просто змінити зовнішні текстури як тобі подобаеться ... ;)
  • 0

#7 Archon-ua

    Літають тут всякі...

  • Користувачі
  • PipPipPipPipPipPipPipPipPip
  • 998 повідомлень
  • Стать:Чоловік
  • Місто:Земля і біля неї...

Відправлено 08.08.2007 – 10:39

Перегляд дописуBrazier (8.08.2007 11:31) писав:

Легше вже знайти готову модель з ігри та просто змінити зовнішні текстури як тобі подобаеться ... ;)
Ну хіба що потестити...
Якщо прога/гра попаде в інет то можуть доколупатись.
  • 0

#8 Selena

    Місцевий

  • Користувачі
  • PipPipPipPipPipPip
  • 212 повідомлень
  • Стать:Жінка

Відправлено 13.09.2007 – 09:58

Я все таки розпочала вивчення OpenGl :happy1: . І от з чим я стикнулась. Зараз я виводжу графіку на поверхню всієї форми, а мені потрібно або на Image, або на певну частину форми. Знаю що це можливо, бо можна виводити теоретично на поверхню будь-якого компонента, який має властивість Canvas.Handle. Але на практиці не получається :yes: Як це зробити? Перерила книжку, а там все тільки на словах... :D Допоможіть, будь-ласка!! Буду дуже вдячна!
  • 0

#9 volodymyr_ch

    Абориген

  • Користувачі
  • PipPipPipPip
  • 96 повідомлень
  • Стать:Чоловік

Відправлено 13.09.2007 – 15:59

А ти не забуваєш обирати правильний формат пікселів для контексту(DC) Canvas`у ?

Повідомлення відредагував vladimir_ch: 13.09.2007 – 16:02

  • 0

#10 Selena

    Місцевий

  • Користувачі
  • PipPipPipPipPipPip
  • 212 повідомлень
  • Стать:Жінка

Відправлено 14.09.2007 – 07:59

В мене для встановлення формату пікселів є така процедура

procedure TForm1.PixelFormat;
var
pfd:TPIXELFORMATDESCRIPTOR;
nPixelFormat:integer;
begin
FillChar(pfd,SizeOf(pfd),0);
pfd.nSize := sizeof(pfd);
pfd.nVersion := 1;
pfd.dwFlags := PFD_DRAW_TO_WINDOW +PFD_SUPPORT_OPENGL+PFD_DOUBLEBUFFER;
pfd.dwLayerMask := PFD_MAIN_PLANE;
pfd.iPixelType := PFD_TYPE_RGBA;
pfd.cColorBits := 24;
pfd.cDepthBits := 32;
pfd.cAccumBits := 64;
pfd.cStencilBits := 64;
pfd.cAlphaBits := 64;
nPixelFormat := ChoosePixelFormat(DC, @pfd);
if nPixelFormat <> 0 then SetPixelFormat(DC,nPixelFormat,@pfd);
end;

Викликаю її при створенні форми. Там же і отримую контекст малювання...

procedure TForm1.FormCreate(Sender: TObject);
begin
DC:=GetDC(Handle);
PixelFormat;
hrc:=wglCreateContext(DC);
wglMakeCurrent(DC,hrc);
end;

Цей рядок DC:=GetDC(Handle) треба поміняти на такий DC:=GetDC(Image1.Canvas.Handle) ? Де я помиляюсь? :yes: Допоможи....
  • 0

#11 volodymyr_ch

    Абориген

  • Користувачі
  • PipPipPipPip
  • 96 повідомлень
  • Стать:Чоловік

Відправлено 14.09.2007 – 14:47

Цитата

Цей рядок DC:=GetDC(Handle) треба поміняти на такий DC:=GetDC(Image1.Canvas.Handle) ? Де я помиляюсь? unsure.gif Допоможи....

треба DC:=GetDC(Handle) замінити на DC:=Image1.Canvas.Handle, оскільки Form.Handle - це дескриптор вікна( тип HWND), а Canvas.Handle - це дескриптор контексту(тип HDC)

Повідомлення відредагував vladimir_ch: 14.09.2007 – 14:48

  • 0

#12 Selena

    Місцевий

  • Користувачі
  • PipPipPipPipPipPip
  • 212 повідомлень
  • Стать:Жінка

Відправлено 16.09.2007 – 17:55

Я замінила і в результаті Image стає білим і все :blink: Треба ще щось змінити в коді? Сподіваюсь на допомогу...
  • 0

#13 volodymyr_ch

    Абориген

  • Користувачі
  • PipPipPipPip
  • 96 повідомлень
  • Стать:Чоловік

Відправлено 17.09.2007 – 16:26

Цитата

...
pfd.nVersion := 1;
pfd.dwFlags := PFD_DRAW_TO_WINDOW +PFD_SUPPORT_OPENGL+PFD_DOUBLEBUFFER;
pfd.dwLayerMask := PFD_MAIN_PLANE;
...

Зверни увагу на константу, що виділена жирним. В тебе ввімкнена подвійна буферизація, тому після завершення побудови сцени необхідно викликати функцію SwapBuffers(DC).

Повідомлення відредагував vladimir_ch: 17.09.2007 – 16:26

  • 0

#14 Selena

    Місцевий

  • Користувачі
  • PipPipPipPipPipPip
  • 212 повідомлень
  • Стать:Жінка

Відправлено 28.09.2007 – 17:31

Перегляд дописуArchon-ua (8.08.2007 11:39) писав:

Ну хіба що потестити...
Якщо прога/гра попаде в інет то можуть доколупатись.

Міг би підказати, де можна знайти програмний код побудови такої моделі ( це я про силует людини) ? Мені порадили знайти такий код і вже на ньому пробувати розбиратись... Кажуть, так простіше і швидше освоюється матеріал... Непогано було б спробувати :(

Була б рада допомозі! Наперед дякую! ;)
  • 0

#15 Selena

    Місцевий

  • Користувачі
  • PipPipPipPipPipPip
  • 212 повідомлень
  • Стать:Жінка

Відправлено 28.09.2007 – 18:54

Перегляд дописуvladimir_ch (17.09.2007 17:26) писав:

Зверни увагу на константу, що виділена жирним. В тебе ввімкнена подвійна буферизація, тому після завершення побудови сцени необхідно викликати функцію SwapBuffers(DC).

Дякую!! Розібралась! Вже вийшло! ;)
  • 0

#16 Гість_Rul'_*

  • Гості

Відправлено 07.10.2007 – 18:38

Звертаюсь до людей що знають OpenGL та Microsoft Visual C++ 6.
Моя ситуація така:
{
Я хочу навчитися програмувати на OpenGL за допомогою MVC++6. Маю нібито добру книжку
і маю купу ісходніків(доречі як це слово буде по укр.), та потім щось йде не так. Навіть елементарну програму з функціями OpenGL не вдається зробити. Спершу всьо добре компілюється, а потім при такій операції як Build чи створені Exe-файлу вискакують купа помилок зв'язаних виключно з функціями OpenGL :D . Спершу думав що проблема з тим що вмене нема якихось "робочих" файлів.Але заявляю що в мене здається всі файли є. Ось здається весь список:
gl.h,glu.h,glut.h,glaux.h;
glu32.lib,glut32.lib,glaux.lib;
opengl.dll,opengl32.dll,glu32.dll,gl.dll,glut32.dll,glut.dll,glmf.dll;(.dll-файли лежать в С:\\Windows\system32\)
Як на мене ці файли потрібні для правильної роботи OpenGL, тут не має glaux.lib, та в більшості файлах підключення glaux.h не було тому я ним не користувався.
А це повідомлення яке не дає мені спокою:
error LNK2001: unresolved external symbol __imp__glVertex3d@24
головне в ньому "error LNK2001: unresolved external symbol __" а потім ідуть різні функції із різних бібліотек.
Також варто сказати що звичайні програми йдуть добре.
PS: можливо помилка в розміщені dll-файлів чи можливо в мене немає якихось необхідних файлів.
}
  • 0

#17 volodymyr_ch

    Абориген

  • Користувачі
  • PipPipPipPip
  • 96 повідомлень
  • Стать:Чоловік

Відправлено 09.10.2007 – 19:38

Необхідно додати до списку бібліотек, що будуть лінкуватися, opengl32.lib, glu32.lib в налаштуваннях проекту, або використавши такі директиви препроцесора:

#pragma comment(lib, "opengl32.lib")
#pragma comment(lib, "glu32.lib")



P.S. Раджу забути про GLAux... Ця бібліотека не є актуальною...

Повідомлення відредагував vladimir_ch: 09.10.2007 – 19:41

  • 0

#18 Гість_Rul'_*

  • Гості

Відправлено 11.10.2007 – 16:05

Перегляд дописуvladimir_ch (9.10.2007 20:38) писав:

Необхідно додати до списку бібліотек, що будуть лінкуватися, opengl32.lib, glu32.lib в налаштуваннях проекту, або використавши такі директиви препроцесора:

#pragma comment(lib, "opengl32.lib")
#pragma comment(lib, "glu32.lib")
P.S. Раджу забути про GLAux... Ця бібліотека не є актуальною...

Усьо можете закривати тему, пішло, дууууууже дякую vladimir_ch. :D
  • 0

#19 Selena

    Місцевий

  • Користувачі
  • PipPipPipPipPipPip
  • 212 повідомлень
  • Стать:Жінка

Відправлено 22.10.2007 – 19:29

В мене виникла одна проблемка... Я хочу створити куб за допомогою вершинних масивів. Ось такий код...

glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer(3,Glint,0,vert);
glDrawElements(GL_QUADS,24,GL_UNSIGNED_BYTE,index);

але мені вибиває помилку - [Error] Unit1.pas(85): Undeclared identifier: 'glEnableClientState'... І так для всіх трьох команд ;)

Думала, можливо не правильно підключаю бібліотеку OpenGL, але прочитала в книжці : "Если вы используете Delphi, то всё необходимое для работы с OpenGL находится в модуле OpenGL.dcu... Первым делом нужно подключить заголовочные файлы: uses OpenGL... ". Значить помилка не тут? А може мені треба оновити бібліотеки OpenGL ? Будь-ласка, допоможіть :)
  • 0

#20 volodymyr_ch

    Абориген

  • Користувачі
  • PipPipPipPip
  • 96 повідомлень
  • Стать:Чоловік

Відправлено 23.10.2007 – 05:31

Прототипів деяких функцій там немає. Необхідні прототипи та константи:

procedure glVertexPointer (size: GLint; atype: GLenum;
		  stride: GLsizei; data: pointer); stdcall; external OpenGL32;

procedure glColorPointer (size: GLint; atype: GLenum; stride: GLsizei;
		  data: pointer); stdcall; external OpenGL32;

procedure glDrawArrays (mode: GLenum; first: GLint; count: GLsizei);
		  stdcall; external OpenGL32;

procedure glEnableClientState (aarray: GLenum); stdcall; external OpenGL32;

procedure glDisableClientState (aarray: GLenum); stdcall; external OpenGL32; 


const GL_VERTEX_ARRAY = $8074; GL COLOR ARRAY  = $8076;

  • 0



Кількість користувачів, що читають цю тему: 1

0 користувачів, 1 гостей, 0 анонімних


Магазин кубиков Рубика Cubes.in.ua