Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.89/89: Рейтинг темы: голосов - 89, средняя оценка - 4.89
Техник
 Аватар для DenProx
318 / 176 / 27
Регистрация: 09.10.2009
Сообщений: 3,109

Библиотека для работы с 3D графикой

27.05.2011, 13:05. Показов 17895. Ответов 62
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток. Посоветуйте какой ни будь инструмент для работы с 3D графикой в Билдере... на подобии GLScene если кто знает такой. Очень надо. Заранее спасибо!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.05.2011, 13:05
Ответы с готовыми решениями:

Библиотека для быстрой работы с графикой
Написал свой вариант тим-вьювера для бедных. Все работает, но на стандартных компонентах получились громоздкие обработки и медленная...

Библиотека для работы с графикой и текстом С++
Всем привет! Решил написать игру, в которой пользователь должен с клавиатуры писать команды роботу, и робот должен их выполнять, двигаться....

Написать пакет классов для работы с деловой графикой, предназначенный для работы в среде Windows
Написать пакет классовдля работы с деловой графикой, предназначенный для работы в среде Windows. Предусмотреть наличие в пакете классы для...

62
 Аватар для Vlad_IT
1452 / 360 / 61
Регистрация: 03.04.2010
Сообщений: 2,096
28.05.2011, 11:54
Ну. Знаю только что HGE
0
Кодер
 Аватар для n00b.vcxproj
50 / 49 / 7
Регистрация: 10.10.2010
Сообщений: 229
28.05.2011, 12:13
OpenGL
0
 Аватар для Maluda
1280 / 598 / 116
Регистрация: 18.08.2009
Сообщений: 832
28.05.2011, 13:10
Цитата Сообщение от DenProx Посмотреть сообщение
Посоветуйте какой ни будь инструмент для работы с 3D графикой в Билдере
Отлично к Билдеру прикручивается движок Blitz 3D

Я даже когда-то свой компонент для работы с ним делал.
Если заинтерисуешься, расскажу подробно как с этим движком работать
0
 Аватар для Vlad_IT
1452 / 360 / 61
Регистрация: 03.04.2010
Сообщений: 2,096
28.05.2011, 14:02
Maluda, А разве он не медленный? Вроде я слышал что у него куча недостатков. Которые правда сам не замечал когда работал на нем
0
 Аватар для Maluda
1280 / 598 / 116
Регистрация: 18.08.2009
Сообщений: 832
28.05.2011, 14:29
Смотря для чего нужен этот движок. Я не думаю, что человек, который это сейчас спрашивает,
будет Сталкера писать.

Первый недостаток этого движка - это то, что его последний релиз, если я не ошибаюсь,
вышел в 2007 году.

Он уступает по мощности, спецэффектам, документации очень многим современным движкам.

Но! Этот движок один из единственных, которые можно прикрутить к Билдеру.
Поэтому я его и посоветовал.

Если бы меня спросили о движке к VisualStudio, советовал бы совершенно другие.

Потом следующее:
- каждый движок имеет свою направленность, например, X-Plane - для авиасимуляторов,
OGRE - бесплатный для средних повседневных нужд, OpenSceneGraph - для работы с большими территориями.

Если человеку надо просто научиться работать с 3D движком,
понять принципы, - что такое камера, как ей управлять, как загружать текстуры, объекты,
как работать с системами частиц, спрайтами,
как строить игровую логику, Blitz 3D - неплохой вариант для этого.
0
 Аватар для Arnike
23 / 23 / 4
Регистрация: 26.12.2008
Сообщений: 142
28.05.2011, 14:39
а к XE версии этот движек хорошо прикручивается?
0
 Аватар для Vlad_IT
1452 / 360 / 61
Регистрация: 03.04.2010
Сообщений: 2,096
28.05.2011, 14:59
Maluda, Я с Вами согласен). Ну а еще добавлю, если автор хочет научится работать с 3D, то самый легкий вариант из всех которые я встречал, это конечно же конструктор 3D Game Strudio A7 с использованием Lite-C Он конечно не подключается к Borland C++, хотя и такое возможно если постаратся, но зато на нем можно изучить азы азов. Там кстати имеется поддержка библиотек OpenGL, DirectX и WinAPI
0
Техник
 Аватар для DenProx
318 / 176 / 27
Регистрация: 09.10.2009
Сообщений: 3,109
28.05.2011, 18:07  [ТС]
Вижу образовалась дискуссия ) Хотел бы разъяснить что нужно мне) С 3D графикой я знаком более менее но на другом движке (GLScene для Delphi) , просто по работе дали прогу в которую нужно добавить элементы 3Д графики с анимацией, а именно - добавить модель трубы с вырезом, и показать как течет вода в этой трубе, с изменением цвета градиентно от синего к красному. Это у меня уже реализовано на Delphi, но нужно именно на Билдере т.к. прога эта написана именно на нем... вот и все дела) углубления в графике меня не сильно интересуют, только поверхостно , чтобы сделать то что нужно заказчику...
0
 Аватар для Maluda
1280 / 598 / 116
Регистрация: 18.08.2009
Сообщений: 832
30.05.2011, 10:44
Лучший ответ Сообщение было отмечено как решение

Решение

Вот здесь выкладываю пример по работе с blitz.
Должен быть установлен SDK Blitz3d и TMS Components

В корень с программой надо закинуть папку media из SDK.
Ну, в общем, там лёгкий пример, можно пересобрать со своими компонентами,
вместо TMS

Да, закинул длл-ку Blitz и уже конвертированную Lib-ку
Вложения
Тип файла: rar BlitzProject.rar (328.7 Кб, 180 просмотров)
3
Техник
 Аватар для DenProx
318 / 176 / 27
Регистрация: 09.10.2009
Сообщений: 3,109
30.05.2011, 12:57  [ТС]
Цитата Сообщение от Maluda Посмотреть сообщение
Должен быть установлен SDK Blitz3d
а где их взять?
0
 Аватар для QVO
652 / 462 / 80
Регистрация: 26.10.2010
Сообщений: 1,263
Записей в блоге: 4
30.05.2011, 13:06
Цитата Сообщение от DenProx Посмотреть сообщение
а где их взять?
http://www.blitz3d.net/
1
Техник
 Аватар для DenProx
318 / 176 / 27
Регистрация: 09.10.2009
Сообщений: 3,109
30.05.2011, 13:07  [ТС]
Nouko, уже нашел))
0
 Аватар для Maluda
1280 / 598 / 116
Регистрация: 18.08.2009
Сообщений: 832
30.05.2011, 15:56
Для тех, у кого возникли проблемы при затягивании проекта, особенно, у кого Cbuilder 6,
сделал простенький проект, в котором всё строится динамически

для этого надо:
1. Создать проект VCL Forms
2. Подключить blitz3dsdk.lib
3. Забросить ниже указанный код

UnitBlitzClearVCL.h
C++
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
// ---------------------------------------------------------------------------
 
#ifndef UnitBlitzClearVCLH
#define UnitBlitzClearVCLH
// ---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
 
// ---------------------------------------------------------------------------
class TForm1 : public TForm {
__published: // IDE-managed Components
    void __fastcall FormCreate(TObject *Sender);
    void __fastcall FormCloseQuery(TObject *Sender, bool &CanClose);
    void __fastcall FormDestroy(TObject *Sender);
 
private: // User declarations
    void __fastcall OnTimerFPSTimer(TObject *Sender);
 
    void __fastcall OnTimerRendererTimer(TObject *Sender);
 
    void __fastcall OnCheckEngineClick(TObject *Sender);
 
    void __fastcall StartEngine();
 
public: // User declarations
    __fastcall TForm1(TComponent* Owner);
};
 
// ---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
// ---------------------------------------------------------------------------
#endif
UnitBlitzClearVCL.cpp
C++
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
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
// ---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "UnitBlitzClearVCL.h"
#include "blitz3dsdk.h"
#include "blitz3dsdkexamples.h"
// ---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
 
struct TWorld3D {
    TWorld3D() {
        my_cam_xr = 0.0;
        my_cam_yr = 0.0;
        my_cam_zr = 0.0;
 
        my_cam_x = 0.0;
        my_cam_y = 0.0;
        my_cam_z = 0.0;
 
        iStat = 0;
 
        sOutputText = "";
    };
 
    // параметры камыре
    float my_cam_xr;
    float my_cam_yr;
    float my_cam_zr;
 
    float my_cam_x;
    float my_cam_y;
    float my_cam_z;
 
    // величина fps
    int iStat;
 
    // главная камера сцены
    BBCamera my_camera;
 
    // 3д объект - Дракон
    BBMD2Model my_dragon;
 
    // динамические компоненты, которые добавятся на форму
    TCheckBox *CheckBoxEngine;
    TTimer *TimerRenderer;
    TTimer *TimerFPS;
 
    // строка, показывающая ФПС
    AnsiString sOutputText;
 
    void ClearDynamicComponents() {
        if (CheckBoxEngine) {
            delete CheckBoxEngine;
        }
        if (TimerRenderer) {
            delete TimerRenderer;
        }
        if (TimerFPS) {
            delete TimerFPS;
        }
    }
 
};
 
TWorld3D World3D;
 
// ---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) {
 
}
// ---------------------------------------------------------------------------
 
void __fastcall TForm1::FormCreate(TObject *Sender) {
    // будет останавливать-запускать движок
    World3D.CheckBoxEngine = new TCheckBox(this);
    World3D.CheckBoxEngine->Parent = this;
    World3D.CheckBoxEngine->Top = 3;
    World3D.CheckBoxEngine->Left = 3;
    World3D.CheckBoxEngine->Width = 200;
    World3D.CheckBoxEngine->OnClick = &OnCheckEngineClick;
    World3D.CheckBoxEngine->Caption = "Запуск (остановка) движка";
    // таймер, который будет рендерить кадры
    World3D.TimerRenderer = new TTimer(this);
    World3D.TimerRenderer->Enabled = false;
    World3D.TimerRenderer->Interval = 16;
    World3D.TimerRenderer->OnTimer = &OnTimerRendererTimer;
    // таймер, который будет считать FPS
    World3D.TimerFPS = new TTimer(this);
    World3D.TimerFPS->Enabled = false;
    World3D.TimerFPS->Interval = 1000;
    World3D.TimerFPS->OnTimer = &OnTimerFPSTimer;
}
 
// ---------------------------------------------------------------------------
void __fastcall TForm1::FormDestroy(TObject *Sender) {
    World3D.ClearDynamicComponents();
}
 
// ---------------------------------------------------------------------------
void __fastcall TForm1::FormCloseQuery(TObject *Sender, bool &CanClose) {
    if (World3D.CheckBoxEngine->Checked) {
        ShowMessage("Остановите работу с движком!");
        CanClose = false;
    }
}
 
// ---------------------------------------------------------------------------
 
void __fastcall TForm1::OnCheckEngineClick(TObject *Sender) {
    if (World3D.CheckBoxEngine) {
        if (World3D.CheckBoxEngine->Checked) {
            // запускаем движок
            StartEngine();
            // запускаем рендер
            World3D.TimerRenderer->Enabled = true;
            // считаем fps
            World3D.TimerFPS->Enabled = true;
        }
        else {
            // останавливаем рендер
            World3D.TimerRenderer->Enabled = false;
            // остановка подсчёта fps
            World3D.TimerFPS->Enabled = false;
            // закрываем работу с движком
            bbEndBlitz3D();
        }
    }
}
// ---------------------------------------------------------------------------
 
void __fastcall TForm1::OnTimerRendererTimer(TObject *Sender) {
    if (bbKeyDown(KEY_LEFT))
        World3D.my_cam_yr -= 2.0;
    if (bbKeyDown(KEY_RIGHT))
        World3D.my_cam_yr += 2.0;
 
    if (bbKeyDown(KEY_UP)) {
        World3D.my_cam_xr += 2;
        if (World3D.my_cam_xr > 90)
            World3D.my_cam_xr = 90;
    }
    if (bbKeyDown(KEY_DOWN)) {
        World3D.my_cam_xr -= 2;
        if (World3D.my_cam_xr < 5)
            World3D.my_cam_xr = 5;
    }
    if (bbKeyDown(KEY_LEFTBRACKET))
        World3D.my_cam_zr += 2.0;
    if (bbKeyDown(KEY_RIGHTBRACKET))
        World3D.my_cam_zr -= 2.0;
 
    if (bbKeyDown(KEY_W)) {
        World3D.my_cam_z += 1.0;
        if (World3D.my_cam_z > -10)
            World3D.my_cam_z = -10;
    }
    if (bbKeyDown(KEY_S)) {
        World3D.my_cam_z -= 1.0;
        if (World3D.my_cam_z < -180)
            World3D.my_cam_z = -180;
    }
    if (bbKeyDown(KEY_A)) {
        World3D.my_cam_x -= 1;
        // if(cam_z>-10)cam_z=-10;
    }
    if (bbKeyDown(KEY_D)) {
        World3D.my_cam_x += 1;
        // if(cam_z<-180)cam_z=-180;
    }
 
    bbPositionEntity(World3D.my_camera, 0, 0, 0);
    bbRotateEntity(World3D.my_camera, World3D.my_cam_xr, World3D.my_cam_yr,
        World3D.my_cam_zr);
    bbMoveEntity(World3D.my_camera, World3D.my_cam_x, World3D.my_cam_y, World3D.my_cam_z);
 
    // считаем FPS
    World3D.iStat++;
 
    bbUpdateWorld();
    bbRenderWorld();
 
    bbText(100, 100, World3D.sOutputText.c_str());
 
    bbFlip();
}
// ---------------------------------------------------------------------------
 
void __fastcall TForm1::OnTimerFPSTimer(TObject *Sender) {
    World3D.sOutputText = "Привет всем ! FPS: " + AnsiString(World3D.iStat);
    World3D.iStat = 0;
}
// ---------------------------------------------------------------------------
 
void __fastcall TForm1::StartEngine() {
    bbBeginBlitz3D();
 
    // размеры 3Д окна
    bbGraphics3D(800, 600, 32, 2);
 
    /*
    ;0,40  : idle
    ;40,46 : run
    ;46,54 : attack
    ;54,58 : paina
    ;58,62 : painb
    ;62,66 : painc
    ;66,72 : jump
    ;72,84 : flip
     */
 
    // environment cube
    BBMeshModel cube = bbCreateCube();
    bbFitMesh(cube, -250, 0, -250, 500, 500, 500);
    bbFlipMesh(cube);
    BBTexture tex = bbLoadTexture("media/dragon/chorme-2.bmp");
    bbScaleTexture(tex, 1.0 / 3, 1.0 / 3);
    bbEntityTexture(cube, tex);
    bbEntityAlpha(cube, .4);
    bbEntityFX(cube, 1);
 
    BBMirror m = bbCreateMirror();
 
    // simple light
    BBLight light = bbCreateLight();
    bbTurnEntity(light, 45, 45, 0);
 
    // camera
 
    World3D.my_camera = bbCreateCamera();
 
    World3D.my_cam_xr = 30;
    World3D.my_cam_yr = 0;
    World3D.my_cam_zr = 0;
 
    World3D.my_cam_x = 0;
    World3D.my_cam_y = 0;
    World3D.my_cam_z = -100;
 
    // cool dragon model!
 
    BBTexture tex2 = bbLoadTexture("media/dragon/dragon.bmp");
    World3D.my_dragon = bbLoadMD2("media/dragon/dragon.md2");
 
    bbEntityTexture(World3D.my_dragon, tex2);
    bbPositionEntity(World3D.my_dragon, 0, 25, 0);
    bbTurnEntity(World3D.my_dragon, 0, 150, 0);
 
    bbAnimateMD2(World3D.my_dragon, 1, .05, 40, 46);
}
 
// ---------------------------------------------------------------------------
4. В проект надо подключить blitz3dsdkexamples.h и blitz3dsdkexamples.cpp
5. Бросить папку media из SDK в папку с проектом
1
Техник
 Аватар для DenProx
318 / 176 / 27
Регистрация: 09.10.2009
Сообщений: 3,109
30.05.2011, 17:08  [ТС]
Цитата Сообщение от Maluda Посмотреть сообщение
2. Подключить blitz3dsdk.lib
А как подключать? )
0
 Аватар для QVO
652 / 462 / 80
Регистрация: 26.10.2010
Сообщений: 1,263
Записей в блоге: 4
30.05.2011, 18:49
Maluda, сделай FAQ видео гайд
0
 Аватар для Maluda
1280 / 598 / 116
Регистрация: 18.08.2009
Сообщений: 832
30.05.2011, 21:49
В том, архиве, который я выкладывал, лежит эта lib-ка,
её надо переместить в папку lib\ Билдера, или, если хотите, чтобы она лежала в другом месте,
этот путь надо добавить в глобальные пути Билдера, затем надо её подключить,
с помощью Add to project.
После этого она появится в списке файлов проекта.

Файл blitz3dsdk.dll надо закинуть либо в папку с exe-шником,
либо в папку bin\ Билдера
2
Техник
 Аватар для DenProx
318 / 176 / 27
Регистрация: 09.10.2009
Сообщений: 3,109
31.05.2011, 12:28  [ТС]
Ни чего не получается... не компилится...

пишет:


[Linker Error] Unresolved external 'dragontest()' referenced from C:\PROGRAM FILES\BORLAND\CBUILDER6\PROJECTS\BLITZPR OJECT\UNITVISUALTHREAD.OBJ
0
 Аватар для Maluda
1280 / 598 / 116
Регистрация: 18.08.2009
Сообщений: 832
31.05.2011, 12:36
Народ, пожалуйста, читайте внимательно, то что я написал

Цитата Сообщение от Maluda Посмотреть сообщение
4. В проект надо подключить blitz3dsdkexamples.h и blitz3dsdkexamples.cpp
5. Бросить папку media из SDK в папку с проектом
Добавлено через 1 минуту
Цитата Сообщение от DenProx Посмотреть сообщение
dragontest()
Объявлена в blitz3dsdkexamples.h, тело функции лежит в blitz3dsdkexamples.cpp,
компилятор говорит, что не может найти тело функции, значит не подключён к проекту blitz3dsdkexamples.cpp

Добавлено через 1 минуту
DenProx, используй последний пример, который я написал, там всё элементарно и не требует никаких дополнительных библиотек
0
Техник
 Аватар для DenProx
318 / 176 / 27
Регистрация: 09.10.2009
Сообщений: 3,109
31.05.2011, 12:39  [ТС]
теперь не может найти функцию "sprintf_s" в blitz3dsdkexamples.cpp
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
31.05.2011, 12:39
Помогаю со студенческими работами здесь

Для работы с графикой
Ребята, помогите подобрать компьютер для работы с графикой. Основные программы: Illustrator CS5, планируется перейти на версию CC ...

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

Настольный ПК для работы с графикой
Выбираю многозадачный компьютер для дома. Из требовательных задач много работаю с фото, кодирую видео. Изредка 3Д-графика. В игры не играю....

Компьютер для работы с графикой
Добрый день всем! Нужна помощь в подборе конфигурации системника без монитора для дизайнерской работы. Цена 25000-30000 р. или 6000...

Конфигурация для работы с графикой
Собираю комп для работы с графикой, CorelDRAW, Photoshop.... в 3D НЕ работаю, в игры НЕ играю.. После долгих раздумий у меня выстроилась...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG-файла с альфа-каналом с помощью библиотеки SDL3_image на Android
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru