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

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

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.08.2010, 19:40   #1
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию Движок на OpenGL

Вот, нашёл некое подобие движка на OpenGL. Решил перевести его на DirectX.К счастью движок короткий, да и несложный.Правда, OpenGL я знаю плохо, так что прошу о помощи в переводе.
1. Как я понимаю, это что-то типа инициализации OpenGL?
Код:
procedure SetDCPixelFormat;
var
  pfd:TPixelFormatDescriptor;
  nPixelFormat:Integer;
begin
  FillChar(pfd,SizeOf(pfd),0);
  pfd.dwFlags:=PFD_DRAW_TO_WINDOW or
               PFD_DOUBLEBUFFER or
               PFD_SUPPORT_OPENGL;
  nPixelFormat:=ChoosePixelFormat(DC,@pfd);
  SetPixelFormat(DC,nPixelFormat,@pfd);
end;
2. И это тоже?
Код:
DC:=GetDC(Handle);
  SetDCPixelFormat;
  HRC:=wglCreateContext(DC);
  wglMakeCurrent(DC,HRC);
3.А вот это я вообще не понимаю.
Код:
 glEnable(GL_DEPTH_TEST);
  glNewList(1,GL_COMPILE);
    glBegin(GL_LINES);
      glColor3f(0.7,1.0,0.7);
      for i:=-50 to 50 do
      begin
        glVertex3f(-50,-1,i);
        glVertex3f(50,-1,i);
        glVertex3f(i,-1,-50);
        glVertex3f(i,-1,50);
      end;
    glEnd;
  glEndList;
_-Re@l-_ вне форума Ответить с цитированием
Старый 23.08.2010, 23:47   #2
.pixel
c++, dx/ogl
Форумчанин
 
Аватар для .pixel
 
Регистрация: 10.11.2008
Сообщений: 131
По умолчанию

Цитата:
1
Код:
Function SetupPP():D3DPRESENT_PARAMETERS;
Var
PP:D3DPRESENT_PARAMETERS;
DM:D3DDISPLAYMODE;
Begin
D3D.GetAdapterDisplayMode(D3DADAPTER_DEFAULT, DM);
pp.Windowed:=True; 
pp.SwapEffect :=D3DSWAPEFFECT_DISCARD;
pp.BackBufferCount:=1;
pp.BackBufferFormat := DM.Format;
pp.PresentationInterval:=D3DPRESENT_INTERVAL_IMMEDIATE;
Result:=PP;
End

Цитата:
2.
Аналог в dx: вызов CreateDevice и скармливание ему HWND вашего окна)

Цитата:
3.
Блоки состояний рендеринга. И у m$ dx даже такое есть Оо!
В общем говоря, это подготовка геометрии… что бы ее потом рисовать в одну строчку glCallList(1) и не писать/вызывать потом весь код каждый раз;

Цитата:
Смена состояний довольно дорогая операция и поэтому чем реже меняются состояния, тем лучше. ... Состояния рендеринга используются следующим образом: если у вас есть несколько групп объектов, которые нужно выводить в различных состояниях, то сначала устанавливается состояние для первой группы, все объекты этой группы выводятся, далее происходит смена состояния, выводится вторая группа объектов и т.д.

С помощью состояний рендеринга можно влиять на работу графического конвейера на различных стадиях: непосредственно на геометрию, на освещение, на текстурирование и даже на пиксели.
lpDevice->BeginStateBlock()
...
lpDevice->EndStateBlock();
“Batch, Batch, Batch:” What Does It Really Mean?
I am a donut! Ask not how many tris/batch, but
rather how many batches/frame!
.pixel вне форума Ответить с цитированием
Старый 24.08.2010, 11:45   #3
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

В общем-то, спасибо, .pixel.
А вот про пункт 3. Проще говоря, это подготовка вершин?
_-Re@l-_ вне форума Ответить с цитированием
Старый 24.08.2010, 19:47   #4
.pixel
c++, dx/ogl
Форумчанин
 
Аватар для .pixel
 
Регистрация: 10.11.2008
Сообщений: 131
По умолчанию

Цитата:
А вот про пункт 3. Проще говоря, это подготовка вершин?
Ну да, генерация некоторой геометрии и закрепление ее за некоторым списком отображения.
“Batch, Batch, Batch:” What Does It Really Mean?
I am a donut! Ask not how many tris/batch, but
rather how many batches/frame!
.pixel вне форума Ответить с цитированием
Старый 25.08.2010, 10:26   #5
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

Цитата:
Код:

Function SetupPP():D3DPRESENT_PARAMETERS;
Var
PP:D3DPRESENT_PARAMETERS;
DM:D3DDISPLAYMODE;
Begin
D3D.GetAdapterDisplayMode(D3DADAPTER_DEFAULT, DM);
pp.Windowed:=True; 
pp.SwapEffect :=D3DSWAPEFFECT_DISCARD;
pp.BackBufferCount:=1;
pp.BackBufferFormat := DM.Format;
pp.PresentationInterval:=D3DPRESENT_INTERVAL_IMMEDIATE;
Result:=PP;
End
Вот только сколько я помню делается так:
Код:
Function TForm1.InitSAME: HResult;
Var
   d3dDisplayInfo: TD3DDisplayMode;
   d3dParams:      TD3DPresentParameters;
Begin
     Result:=E_FAIL;
     SAMED3D:=Direct3DCreate9(D3D_SDK_VERSION);
     If SAMED3D = NIL Then Exit;
     Result:=SAMED3D.GetAdapterDisplayMode(D3DADAPTER_DEFAULT,d3dDisplayInfo);
     If Failed(Result) Then Exit;
     ZeroMemory(@d3dParams,SizeOf(d3dParams));
     d3dParams.Windowed:=False;
     d3dParams.SwapEffect:=D3DSWAPEFFECT_DISCARD;
     d3dParams.BackBufferFormat:=d3dDisplayInfo.Format;
     Result:=SAMED3D.CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,Form1.Handle,
     D3DCREATE_SOFTWARE_VERTEXPROCESSING,@d3dParams,SAMED3DDevice);
End;
InitSAME - так я обозвал инициализацию движка.
_-Re@l-_ вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
3D Движок zmey31313 Gamedev - cоздание игр: Unity, OpenGL, DirectX 17 30.05.2010 10:14
Что мощнее или портативнее движок directx или opengl? albatros Помощь студентам 2 08.12.2009 17:43
2D движок Sergeu Gamedev - cоздание игр: Unity, OpenGL, DirectX 19 01.11.2009 22:47
Помогитеу становить движок на сайт. Движок Joomla acmilan WordPress и другие CMS 2 01.04.2009 11:26
Движок на openGL CyberOrcX Gamedev - cоздание игр: Unity, OpenGL, DirectX 8 05.10.2008 20:03