Форум программистов, компьютерный форум, киберфорум
Delphi: Графика, звук, видео
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
5706 / 2297 / 466
Регистрация: 20.11.2009
Сообщений: 7,721
Записей в блоге: 1
1

Инициализация DirectX

20.06.2017, 21:40. Показов 847. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Привет всем, в общем решил поиграться с DirectX9

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

ваяю в DelphiXE, если возникнут вопросы))) для начала решил тут поиграться

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, D3DX9, Direct3D9, DXTypes, ExtCtrls;
 
type
 
  TCustomVertex = record
    X, Y, Z: Single;
    RWH: Single;
    Color: DWord;
  end;
 
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure FormPaint(Sender: TObject);
  private
    D3D: IDirect3D9;
    D3DMode: D3DDISPLAYMODE;
    D3DParam: D3DPRESENT_PARAMETERS;
    D3DDevice: IDirect3DDevice9;
 
    TR: Array [0..2]of TCustomVertex;
    V: IDirect3DVertexBuffer9;
    PBV: Pointer;
 
  public
    { Public-Deklarationen }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  D3D := Direct3DCreate9(D3D_SDK_VERSION);
  D3D.GetAdapterDisplayMode(D3DADAPTER_DEFAULT, D3DMode);
 
  ZeroMemory(@D3DParam, SizeOf(D3DParam));
 
  D3DParam.BackBufferWidth := ClientWidth;
  D3DParam.BackBufferHeight := ClientHeight;
 
  D3DParam.Windowed := True;
  D3DParam.SwapEffect := D3DSWAPEFFECT_FLIP;
  D3DParam.BackBufferFormat := D3DMode.Format;
 
  D3DParam.FullScreen_RefreshRateInHz := D3DPRESENT_RATE_DEFAULT;
  D3DParam.PresentationInterval := D3DPRESENT_INTERVAL_DEFAULT;
 
  D3D.CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, Handle, D3DCREATE_SOFTWARE_VERTEXPROCESSING, @D3DParam, D3DDevice);
 
  TR[0].X := 300;
  TR[0].Y := 300;
  TR[0].Z := 0.5;
  TR[0].RWH := 1;
  TR[0].Color := 255;
 
  TR[1].X := 150;
  TR[1].Y := 300;
  TR[1].Z := 0.5;
  TR[1].RWH := 1;
  TR[1].Color := 255;
 
  TR[2].X := 150;
  TR[2].Y := 150;
  TR[2].Z := 0.5;
  TR[2].RWH := 1;
  TR[2].Color := 255;
 
  D3DDevice.CreateVertexBuffer(3 * SizeOf(TCustomVertex), 0, D3DFVF_XYZ or D3DFVF_DIFFUSE, D3DPOOL_DEFAULT, V, nil);
 
  PBV := nil;
 
  V.Lock(0, SizeOf(TR), PBV, 0);
  CopyMemory(PBV, @TR, SizeOf(TR));
  V.Unlock;
 
end;
 
procedure TForm1.FormDestroy(Sender: TObject);
begin
  D3D := nil;
  D3DDevice := nil;
end;
 
procedure TForm1.FormPaint(Sender: TObject);
begin
  D3DDevice.Clear(0, nil, D3DCLEAR_TARGET, D3DCOLOR_XRGB(255, 255, 255), 1, 0);
 
  D3DDevice.BeginScene;
 
  D3DDevice.SetStreamSource(0, V, 0, SizeOf(TCustomVertex));
  D3DDevice.SetFVF(D3DFVF_XYZ or D3DFVF_DIFFUSE);
  D3DDevice.DrawPrimitive(D3DPT_TRIANGLELIST, 0, 1);
 
  D3DDevice.EndScene;
 
  D3DDevice.Present(nil, nil, 0, nil);
end;
 
end.
возможно тут нету просто матрицы проекции или чего-то там еще, как наподобии это делается в OpenGL, куча всяких матриц.. но этот пример 1 в 1 должен быть с якобы "рабочего". Заранее спасибо!

Добавлено через 23 минуты
хм.... присмотрелся что я там написал.. и как я объявил структуру вершин и увидел смысл

Delphi
1
2
3
4
5
  TCustomVertex = record
    X, Y, Z: Single;
    RWH: Single;
    Color: DWord;
  end;
тут 3 параметра для координат, что значит RWH я пока что не знаю, и 1 параметр для Color, то надо вот тут вот, тоже сказать, какую структуру я использовать буду

до
Delphi
1
D3DDevice.CreateVertexBuffer(3 * SizeOf(TCustomVertex), 0, D3DFVF_XYZ or D3DFVF_DIFFUSE, D3DPOOL_DEFAULT, V, nil);
а надо
Delphi
1
D3DDevice.CreateVertexBuffer(3 * SizeOf(TCustomVertex), 0, D3DFVF_XYZRHW or D3DFVF_DIFFUSE, D3DPOOL_DEFAULT, V, nil);
вся разница в D3DFVF_XYZRHW, и заработало! Будем разбираться дальше
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.06.2017, 21:40
Ответы с готовыми решениями:

DirectX D7
Скажите как установить?! Имеется две dll (d3dx9_33.dll, DXErr9ab.dll)! Что-то еще нужно?! И что...

Инициализация ComboBox
Имеется код public partial class Form1 : Form { public ComboBox cb = new ComboBox();...

инициализация glut
вот собственно разобрался я немного с библиотекой глута и вот нашел примерчик program Project3;...

DirectX в Delphi7
Всем доброго времени суток! Возможно вопрос уже обсуждался на форуме, но мне не удалось найти...

3
3759 / 2263 / 705
Регистрация: 29.05.2013
Сообщений: 9,613
22.06.2017, 15:59 2
{ Public-Deklarationen }
У вас что Delphi на немецком языке?
0
5706 / 2297 / 466
Регистрация: 20.11.2009
Сообщений: 7,721
Записей в блоге: 1
23.06.2017, 20:25  [ТС] 3
Да, на немецком, а что такого? Я и живу в Германии
0
5859 / 4588 / 1447
Регистрация: 14.04.2014
Сообщений: 20,348
Записей в блоге: 20
26.06.2017, 10:21 4
может взять готовый фреймворк?
http://asphyre.net/
0
26.06.2017, 10:21
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.06.2017, 10:21
Помогаю со студенческими работами здесь

DirectX - работа со звуком
Всем привет, подскажите пожалуйста, какую ни будь литературу или примеры работы со звуком с помощью...

Инициализация directX
Здравствуйте. Делал инициализацию directX по книге Горнакова. Ошибки я исправил, и компилятор...

Инициализация DirectX 9
когда создаю устройство с флагом D3DCREATE_HARDWARE_VERTEXPROCESSING приложение работает до...

инициализация DirectX
Я недавно начал заниматься DirectX на C++.Я уже перепробовал кучу разных кодов, но компилятор...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru