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

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

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.11.2019, 11:08   #1
VolodyaBuzin
Пользователь
 
Регистрация: 10.11.2017
Сообщений: 56
По умолчанию Изменение текстуры куба и сферы через системный проводник и библиотеку материалов в C++ Builder

Добрый вечер! Я прохожу текстуры и библиотеку материалов GLMaterialLibrary. У меня есть программа с формой, полотном, геометрическими фигурами (кубом и сферой), источниками освещения и библиотекой материалов. Я сделал меню для куба и сферы с возможностями сфокусироваться на объекте, убрать фокус и поменять текстуру. Моя идея - по нажатии на команду меню открыть стандартный проводник OpenDialog, выбрать нужное изображение и после подтверждения назначить для куба библиотеку материалов, создать у неё новый объект и прописать у него в свойствах текстуры выбранное изображение, причём не напрямую, а через GLMaterialLibrary. Я воспользовался примером из методички, но компилятор выдал ошибки. Подскажите, что и где нужно заменить.
Изображения
Тип файла: jpg задание-лаба-3-1.jpg (64.2 Кб, 29 просмотров)
Тип файла: jpg задание-лаба-3-2.jpg (62.6 Кб, 17 просмотров)
Тип файла: jpg задание-лаба-3-3.jpg (95.2 Кб, 17 просмотров)
Тип файла: jpg задание-лаба-3-4.jpg (77.3 Кб, 17 просмотров)
Тип файла: jpg меню-для-куба.jpg (41.3 Кб, 17 просмотров)
Тип файла: jpg меню-для-сферы.jpg (41.7 Кб, 17 просмотров)
Тип файла: jpg текстуры-скриншот.jpg (36.9 Кб, 17 просмотров)
VolodyaBuzin вне форума Ответить с цитированием
Старый 05.11.2019, 11:08   #2
VolodyaBuzin
Пользователь
 
Регистрация: 10.11.2017
Сообщений: 56
По умолчанию

CPP-файл:
Код:
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "GLBaseClasses"
#pragma link "GLCoordinates"
#pragma link "GLCrossPlatform"
#pragma link "GLObjects"
#pragma link "GLScene"
#pragma link "GLWin32Viewer"
#pragma link "GLCadencer"
#pragma link "GLKeyboard"
#pragma link "GLMaterial"
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::GoToTheCube1Click(TObject *Sender)
{
GLSceneViewer1->Camera=GLCamera1;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::GoToTheSphere1Click(TObject *Sender)
{
GLSceneViewer1->Camera=GLCamera2;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::NotFocus1Click(TObject *Sender)
{
GLSceneViewer1->Camera=NULL;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::NotFocus2Click(TObject *Sender)
{
GLSceneViewer1->Camera=NULL;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::GLCadencer1Progress(TObject *Sender, const double deltaTime,
          const double newTime)
{
GLCube1->Turn(deltaTime*10);
GLSphere1->Turn(deltaTime*10);
//Движение вперед по клавишам ‘ц’ и’ w’
if (IsKeyDown('ц') || IsKeyDown('w')) { GLSceneViewer1->Camera->Move(2*deltaTime); }
//Движение назад по клавишам ‘ы’ и ‘s’
if (IsKeyDown('ы') || IsKeyDown('s')) { GLSceneViewer1->Camera->Move(-2*deltaTime); }
//Поворот влево по клавишам ‘ф’ и’ a’
if (IsKeyDown('ф') || IsKeyDown('a')) { GLSceneViewer1->Camera->Slide(-2*deltaTime); }
//Поворот вправо по клавишам ‘в’ и ‘d’
if (IsKeyDown('в') || IsKeyDown('d')) { GLSceneViewer1->Camera->Slide(2*deltaTime); }
//Движение вверх по клавишам ‘u’ и ‘г’
if (IsKeyDown('u') || IsKeyDown('г')) { GLSceneViewer1->Camera->Lift(0.01); }
//Движение вниз по клавишам ‘n’ и ‘т’
if (IsKeyDown('n') || IsKeyDown('т')) { GLSceneViewer1->Camera->Lift(-0.01); }
if (IsKeyDown('c') || IsKeyDown('с')) { GLSceneViewer1->Camera=GLCamera1; }
if (IsKeyDown('v') || IsKeyDown('м')) { GLSceneViewer1->Camera=GLCamera2; }
if (IsKeyDown('b') || IsKeyDown('и')) { GLSceneViewer1->Camera=NULL; }
 
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormMouseWheel(TObject *Sender, TShiftState Shift, int WheelDelta,
          TPoint &MousePos, bool &Handled)
{
if(GLSceneViewer1->MouseInControl==true) GLSceneViewer1->Camera->AdjustDistanceToTarget(Power(1.1,-WheelDelta/120));
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::LoadImageOnCube1Click(TObject *Sender)
{
if(OpenDialog1->Execute())
{
GLCube1->Material->MaterialLibrary = GLMaterialLibrary1;
GLMaterialLibrary1->Materials->Add
{
Name = 'CubeTexture';
Material–>Texture–>Image–>LoadFromFile(OpenDialog1->FileName);
Material–>Texture–>TextureMode = tmModulate;
Material–>BlendingMode = bmTransparency;
Material–>Texture–>Disabled = False;
}
}
}
H-файл:
Код:
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <System.Classes.hpp>
#include <Vcl.Controls.hpp>
#include <Vcl.StdCtrls.hpp>
#include <Vcl.Forms.hpp>
#include "GLBaseClasses.hpp"
#include "GLCoordinates.hpp"
#include "GLCrossPlatform.hpp"
#include "GLObjects.hpp"
#include "GLScene.hpp"
#include "GLWin32Viewer.hpp"
#include "GLKeyboard.hpp"
#include "Math.hpp"
#include <Vcl.Menus.hpp>
#include "GLCadencer.hpp"
#include "GLMaterial.hpp"
#include <Vcl.Dialogs.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:    // IDE-managed Components
    TGLScene *GLScene1;
    TGLSceneViewer *GLSceneViewer1;
    TGLCamera *GLCamera1;
    TGLCube *GLCube1;
    TGLSphere *GLSphere1;
    TGLCamera *GLCamera2;
    TGLLightSource *GLLightSource1;
    TGLLightSource *GLLightSource2;
    TMainMenu *MainMenu1;
    TMenuItem *Cube1;
    TMenuItem *Sphere1;
    TMenuItem *GoToTheCube1;
    TMenuItem *NotFocus1;
    TMenuItem *GoToTheSphere1;
    TMenuItem *NotFocus2;
    TGLCadencer *GLCadencer1;
    TOpenDialog *OpenDialog1;
    TGLMaterialLibrary *GLMaterialLibrary1;
    TMenuItem *LoadImageOnCube1;
    TMenuItem *LoadImageOnSphere1;
    void __fastcall GoToTheCube1Click(TObject *Sender);
    void __fastcall GoToTheSphere1Click(TObject *Sender);
    void __fastcall NotFocus1Click(TObject *Sender);
    void __fastcall NotFocus2Click(TObject *Sender);
    void __fastcall GLCadencer1Progress(TObject *Sender, const double deltaTime, const double newTime);
    void __fastcall FormMouseWheel(TObject *Sender, TShiftState Shift, int WheelDelta,
          TPoint &MousePos, bool &Handled);
    void __fastcall LoadImageOnCube1Click(TObject *Sender);
 
private:    // User declarations
public:     // User declarations
    __fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
И вдобавок - почему не работает клавиатура, хотя библиотека GLKeyboard везде прописана?

Ошибки:
Код:
Checking project dependencies...
Compiling Project1.cbproj (Debug, Win32)
bcc32 command line for "Unit1.cpp"
  c:\program files (x86)\embarcadero\studio\20.0\bin\bcc32.exe -D_DEBUG -DUSEPACKAGES -n.\Win32\Debug -I"c:\program files 
  (x86)\embarcadero\studio\20.0\include\windows\vcl";"c:\program files (x86)\embarcadero\studio\20.0\include";"c:\program files 
  (x86)\embarcadero\studio\20.0\include\dinkumware";"c:\program files (x86)\embarcadero\studio\20.0\include\windows\crtl";"c:\program files 
  (x86)\embarcadero\studio\20.0\include\windows\sdk";"c:\program files (x86)\embarcadero\studio\20.0\include\windows\rtl";"c:\program files 
  (x86)\embarcadero\studio\20.0\include\windows\vcl";"c:\program files (x86)\embarcadero\studio\20.0\include\windows\fmx";
  C:\Users\Public\Documents\Embarcadero\Studio\20.0\hpp\Win32;D:\GLScene\include\win32;C:\Users\Public\Documents\Embarcadero\Studio\20.0\hpp\Win32 -y 
  -Q -k -r- -c -tR -tM -tU -tW -C8 -o.\Win32\Debug\Unit1.obj -w-par -Od -v -vi- -H=.\Win32\Debug\Project1.pch -H Unit1.cpp 
[bcc32 Error] Unit1.cpp(82): E2235 Member function must be called or its address taken
  Full parser context
    Unit1.cpp(77): parsing: void _fastcall TForm1::LoadImageOnCube1Click(TObject *)
[bcc32 Error] Unit1.cpp(82): E2379 Statement missing ;
  Full parser context
    Unit1.cpp(77): parsing: void _fastcall TForm1::LoadImageOnCube1Click(TObject *)
[bcc32 Warning] Unit1.cpp(83): W8098 Multi-character character constant
  Full parser context
    Unit1.cpp(77): parsing: void _fastcall TForm1::LoadImageOnCube1Click(TObject *)
[bcc32 Error] Unit1.cpp(83): E2129 Character constant too long (or empty)
  Full parser context
    Unit1.cpp(77): parsing: void _fastcall TForm1::LoadImageOnCube1Click(TObject *)
Failed
Elapsed time: 00:00:04.5
VolodyaBuzin вне форума Ответить с цитированием
Старый 05.11.2019, 11:40   #3
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Код:
GLMaterialLibrary1->Materials->Add;
p51x вне форума Ответить с цитированием
Старый 05.11.2019, 15:37   #4
VolodyaBuzin
Пользователь
 
Регистрация: 10.11.2017
Сообщений: 56
По умолчанию

RAD Studio 10.3, GLScene 1.8
VolodyaBuzin вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Написание функции для создания точек внутри куба и сферы: перевод кода из C++ в Delphi VolodyaBuzin Gamedev - cоздание игр: Unity, OpenGL, DirectX 7 23.09.2019 13:30
Не работает сохранение через проводник Win после активации компонента SaveDialog ger555 Компоненты Delphi 2 01.07.2019 13:21
Дана длина ребра куба.Найти площади грани,площадь полной повернхонсти и объем этого куба Name95 Паскаль, Turbo Pascal, PascalABC.NET 1 25.12.2012 13:35
Как подключить библиотеку OpenCV 2.4.3 к CodeGear C++ Builder 2007 andrejf92 C++ Builder 6 23.11.2012 16:57