⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unit1.pas

📁 delphi 最好的3D控件GLScene_Demos
💻 PAS
字号:
{: TexCombineShader demo / mini-lab.<p>

   This is an advanced demo, which showcases use and setup of extra texture
   units, along with texture combination possibilities.<p>

   The texture combiner allows to declare how each texture unit should
   be used, and how each should be combined with the others. Basicly,
   a texture combiner "code" defines how each texture should be combined,
   knowing that the result of the last texture unit (the one with the higher
   index) defines the final output.<br>
   Note that if the code allows you to declare the combiners in any order,
   the hardware will evaluate them in their index order, and will only accept
   one combiner assignement for each texture unit.
}
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  Dialogs, GLScene, GLTexture, GLObjects, StdCtrls, jpeg, ExtCtrls,
  GLWin32Viewer, GLMisc, OpenGL1x, GLTexCombineShader, GLHUDObjects;

type
  TForm1 = class(TForm)
    GLScene: TGLScene;
    SceneViewer: TGLSceneViewer;
    Image1: TImage;
    Image2: TImage;
    BUApply: TButton;
    GLCamera: TGLCamera;
    GLDummyCube: TGLDummyCube;
    GLMaterialLibrary: TGLMaterialLibrary;
    Image3: TImage;
    Label1: TLabel;
    Image4: TImage;
    GLTexCombineShader: TGLTexCombineShader;
    GLHUDSprite: TGLHUDSprite;
    PATex1: TPanel;
    PATex2: TPanel;
    PATex3: TPanel;
    CBTex0: TCheckBox;
    CBTex1: TCheckBox;
    CBTex2: TCheckBox;
    CBTex3: TCheckBox;
    Label3: TLabel;
    Label4: TLabel;
    Panel1: TPanel;
    MECombiner: TMemo;
    Label2: TLabel;
    ColorDialog: TColorDialog;
    PAPrimary: TPanel;
    procedure FormCreate(Sender: TObject);
    procedure BUApplyClick(Sender: TObject);
    procedure SceneViewerPostRender(Sender: TObject);
    procedure CBTex0Click(Sender: TObject);
    procedure PAPrimaryClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

uses GLTextureCombiners;

procedure TForm1.FormCreate(Sender: TObject);
begin
   // load the textures
   SetCurrentDir('..\..\media');
   with GLMaterialLibrary.Materials do begin
      Image1.Picture.LoadFromFile('beigemarble.jpg');
      Items[0].Material.Texture.Image.Assign(Image1.Picture);
      Image2.Picture.LoadFromFile('flare1.bmp');
      Items[1].Material.Texture.Image.Assign(Image2.Picture);
      Image3.Picture.LoadFromFile('clover.jpg');
      Items[2].Material.Texture.Image.Assign(Image3.Picture);
      Image4.Picture.LoadFromFile('cm_front.jpg');
      Items[3].Material.Texture.Image.Assign(Image4.Picture);
   end;
   GLTexCombineShader.Combiners:=MECombiner.Lines;
   Application.HintHidePause:=30000;
end;

procedure TForm1.BUApplyClick(Sender: TObject);
begin
   // Apply new combiner code
   // Depending on shader and hardware, errors may be triggered during render
   GLTexCombineShader.Combiners:=MECombiner.Lines;
end;

procedure TForm1.SceneViewerPostRender(Sender: TObject);
var
   n : Integer;
begin
   // disable whatever texture units are not supported by the local hardware
   n:=SceneViewer.Buffer.LimitOf[limNbTextureUnits];
   PATex1.Visible:=(n<2);  CBTex1.Enabled:=(n>=2);
   PATex2.Visible:=(n<3);  CBTex2.Enabled:=(n>=3);
   PATex3.Visible:=(n<4);  CBTex3.Enabled:=(n>=4);
   CBTex1.Checked:=CBTex1.Checked and CBTex1.Enabled;
end;

procedure TForm1.CBTex0Click(Sender: TObject);
var
   libMat : TGLLibMaterial;
begin
   // This event is used for all 4 checkboxes of the 4 texture units
   libMat:=GLMaterialLibrary.Materials.GetLibMaterialByName((Sender as TCheckBox).Caption);
   if Assigned(libMat) then
      libMat.Material.Texture.Enabled:=TCheckBox(Sender).Checked;
end;

procedure TForm1.PAPrimaryClick(Sender: TObject);
begin
   // Allow choosing the primary color
   ColorDialog.Color:=PAPrimary.Color;
   if ColorDialog.Execute then begin
      PAPrimary.Color:=ColorDialog.Color;
      with GLMaterialLibrary.Materials[0].Material.FrontProperties do
         Diffuse.AsWinColor:=ColorDialog.Color;
      SceneViewer.Invalidate;
   end;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -