Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.133.149.168] |
|
Сообщ.
#1
,
|
|
|
Добрый вечер! Я прохожу текстуры и библиотеку материалов GLMaterialLibrary. У меня есть программа с формой, полотном, геометрическими фигурами (кубом и сферой), источниками освещения и библиотекой материалов. Я сделал меню для куба и сферы с возможностями сфокусироваться на объекте, убрать фокус и поменять текстуру. Моя идея - по нажатии на команду меню открыть стандартный проводник OpenDialog, выбрать нужное изображение и после подтверждения назначить для куба библиотеку материалов, создать у неё новый объект и прописать у него в свойствах текстуры выбранное изображение, причём не напрямую, а через GLMaterialLibrary. Я воспользовался примером из методички, но компилятор выдал ошибки. Подскажите, что и где нужно заменить.
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 Картинки здесь: http://www.cyberforum.ru/attachments/1079318d1572450455 http://www.cyberforum.ru/attachments/1079319d1572450455 http://www.cyberforum.ru/attachments/1079320d1572450455 http://www.cyberforum.ru/attachments/1079321d1572450455 http://www.cyberforum.ru/attachments/1079322d1572450455 http://www.cyberforum.ru/attachments/1079323d1572450500 http://www.cyberforum.ru/attachments/1079324d1572450500 |