На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела "Программирование графики"
1) Данный раздел предназначен для обсуждения проблем, возникающих при программировании задач, связанных с чтением, сохранением, обработкой, созданием, отрисовкой графической информации (в том числе - 3D [OpenGL, Direct3D] и анимации [в т.ч. VFW, DirectShow, OpenDML]).
Флэш обсуждают здесь!.

2) Если вы хотите получить совет для конкретной платформы/языка программирования, обязательно укажите их в вопросе.

3) Уважаемые новички! Мы приветствуем Ваше желание научить всех посетителей раздела правильному программированию. Но огромная просьба, перед тем, как писать поучения в старых (последний ответ - "старее" месяца, а особенно, если вопрошавший не появляется на форуме уже не первый месяц, в чем можно убедиться в его профиле) темах, хорошо подумать, будет ли кому-нибудь, кроме Вас cамих, это интересно.



Ваше мнение о модераторах: user posted imageBarazuk, user posted imageOpenGL, user posted imageMikle
Модераторы: OpenGL, Mikle
  
> Изменение текстуры куба и сферы через системный проводник , Работаю в RAD Studio 10.3 и GLScene 1.8
    Добрый вечер! Я прохожу текстуры и библиотеку материалов GLMaterialLibrary. У меня есть программа с формой, полотном, геометрическими фигурами (кубом и сферой), источниками освещения и библиотекой материалов. Я сделал меню для куба и сферы с возможностями сфокусироваться на объекте, убрать фокус и поменять текстуру. Моя идея - по нажатии на команду меню открыть стандартный проводник OpenDialog, выбрать нужное изображение и после подтверждения назначить для куба библиотеку материалов, создать у неё новый объект и прописать у него в свойствах текстуры выбранное изображение, причём не напрямую, а через GLMaterialLibrary. Я воспользовался примером из методички, но компилятор выдал ошибки. Подскажите, что и где нужно заменить.

    CPP-файл:
    ExpandedWrap disabled
      #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-файл:
    ExpandedWrap disabled
      #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 везде прописана?

    Ошибки:
    ExpandedWrap disabled
      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
    0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
    0 пользователей:


    Рейтинг@Mail.ru
    [ Script execution time: 0,0227 ]   [ 15 queries used ]   [ Generated: 29.03.24, 00:35 GMT ]