Shaderobjekt: Unterschied zwischen den Versionen

Aus AquaSoft Wiki
Zur Navigation springenZur Suche springen
 
(2 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 7: Zeile 7:
 
     procedure SetParamInt(ParamName: string; Value: Integer);
 
     procedure SetParamInt(ParamName: string; Value: Integer);
 
     procedure SetParamFloat(ParamName: string; Value: Float);
 
     procedure SetParamFloat(ParamName: string; Value: Float);
 +
    procedure SetParamFloat2(ParamName: string; V1, V2: Single);
 +
    procedure SetParamFloat3(ParamName: string; V1, V2, V3: Single);
 +
    procedure SetParamFloat4(ParamName: string; V1, V2, V3, V4: Single);
 +
    procedure SetParamRangeValue(ParamName: string; Value: IRangeValue);
 +
    procedure SetParamRangeValue2(ParamName: string; V1, V2: IRangeValue);
 +
    procedure SetParamRangeValue3(ParamName: string; V1, V2, V3: IRangeValue);
 +
    procedure SetParamRangeValue4(ParamName: string; V1, V2, V3, V4: IRangeValue);
 
     function GetPostProcessing: Boolean;
 
     function GetPostProcessing: Boolean;
 
     procedure SetPostProcessing(const Value: Boolean);
 
     procedure SetPostProcessing(const Value: Boolean);
Zeile 13: Zeile 20:
 
     function GetMeshRows: Integer;
 
     function GetMeshRows: Integer;
 
     procedure SetMeshRows(const P: Integer);
 
     procedure SetMeshRows(const P: Integer);
 +
    procedure SetMesh(const Mesh: TVertexArray; const Indices: TIndexArray);
 +
    procedure AddTexture(const Texture: ICanvas);
 +
    procedure SetTexture(const TextureIndex: Integer; const Texture: ICanvas);
 +
    function GetTexture(const TextureIndex: Integer): ICanvas;
 +
    procedure DeleteTexture(const TextureIndex: Integer);
 +
    procedure ClearTextures;
 +
    function TextureCount: Integer;
 +
    property DrawPersistent: Boolean;
 
</code>
 
</code>
  
Zeile 38: Zeile 53:
 
</code>
 
</code>
  
 +
* DrawPersistent: Damit ein Bildgebendes ShaderObjekt liegen bleibt, muss DrawPersistent = True sein.
 +
 +
 +
= Beispiel =
 +
 +
== Pixelshader-Effekte ==
 +
 +
Verpixeln: Presets\Scripts\Pixelate.sss
 +
 +
== Eigene Geometrie übergeben ==
 +
 +
Vollständiger Code, siehe Toolbox-Objekt "Dreieck": Presets\Scripts\GeometryTriangle.sss
 +
<code>
 +
  var Mesh: TVertexArray;
 +
 
 +
  // Dreieck:
 +
  //
 +
  // (-0.5, 0.5)----(0, 0.5)----(0.5, 0.5)
 +
  // |                /\                |
 +
  // |            /      \              |
 +
  // |          /          \            |
 +
  // |        /                \        |
 +
  // |      /      (0, 0)      \      |
 +
  // |  /                        \    |
 +
  // | /                            \  |
 +
  // (-0.5, -0.5)--------------(0.5, -0.5)
 +
 
 +
  // Mesh := [Vertex(0, 0.5), Vertex(0.5, 0.5), Vertex(-0.5, 0.5)];
 +
  Mesh.SetLength(3);
 +
  Mesh[0] := Vertex(0, 0.5);
 +
  Mesh[1] := Vertex(0.5, -0.5);
 +
  Mesh[2] := Vertex(-0.5, -0.5);
 +
  Shader.SetMesh(Mesh, []);
 +
</code>
  
 
[[Kategorie:Scripting-API]]
 
[[Kategorie:Scripting-API]]

Aktuelle Version vom 9. September 2016, 15:18 Uhr

Das Bildobjekt ist vom Typ IShader und leitet von ISlideShowObject ab.

 IShader inherits from ISlideShowObject
   function Filename: IFilename;
   procedure SetTechnique(TechniqueName: string);
   procedure SetParamInt(ParamName: string; Value: Integer);
   procedure SetParamFloat(ParamName: string; Value: Float);
   procedure SetParamFloat2(ParamName: string; V1, V2: Single);
   procedure SetParamFloat3(ParamName: string; V1, V2, V3: Single);
   procedure SetParamFloat4(ParamName: string; V1, V2, V3, V4: Single);
   procedure SetParamRangeValue(ParamName: string; Value: IRangeValue);
   procedure SetParamRangeValue2(ParamName: string; V1, V2: IRangeValue);
   procedure SetParamRangeValue3(ParamName: string; V1, V2, V3: IRangeValue);
   procedure SetParamRangeValue4(ParamName: string; V1, V2, V3, V4: IRangeValue);
   function GetPostProcessing: Boolean;
   procedure SetPostProcessing(const Value: Boolean);
   function GetMeshColumns: Integer;
   procedure SetMeshColumns(const P: Integer);
   function GetMeshRows: Integer;
   procedure SetMeshRows(const P: Integer);
   procedure SetMesh(const Mesh: TVertexArray; const Indices: TIndexArray);
   procedure AddTexture(const Texture: ICanvas);
   procedure SetTexture(const TextureIndex: Integer; const Texture: ICanvas);
   function GetTexture(const TextureIndex: Integer): ICanvas;
   procedure DeleteTexture(const TextureIndex: Integer);
   procedure ClearTextures;
   function TextureCount: Integer;
   property DrawPersistent: Boolean;

Methoden

  • Objekt Erzeugung

 function CreateShaderObject: IShader;

  • Der Dateiname des Shaders. Hierbei ist eine konkreter Quelltextdatei eines HLSL-Shaders für DirectX 9 gemeint (meist *.fx).

 function Filename: IFilename;

  • Falls im Shaderquelltext mehr als eine Shader-Technik enthalten ist, kann sie über SetTechnique gesetzt werden

 procedure SetTechnique(TechniqueName: string);

  • Ein Shader benötigt verschiedene Parameter. Welche das sind und hängt vom tatsächlich verwendeten Shader ab. Über die SetParamXXX-Funktionen können entsprechende Werte an den Shader übergeben werden.

 procedure SetParamInt(ParamName: string; Value: Integer);
 procedure SetParamFloat(ParamName: string; Value: Float);

  • DrawPersistent: Damit ein Bildgebendes ShaderObjekt liegen bleibt, muss DrawPersistent = True sein.


Beispiel

Pixelshader-Effekte

Verpixeln: Presets\Scripts\Pixelate.sss

Eigene Geometrie übergeben

Vollständiger Code, siehe Toolbox-Objekt "Dreieck": Presets\Scripts\GeometryTriangle.sss

 var Mesh: TVertexArray;
 
 // Dreieck:
 //
 // (-0.5, 0.5)----(0, 0.5)----(0.5, 0.5)
 // |                /\                 |
 // |             /      \              |
 // |           /          \            |
 // |        /                \         |
 // |      /       (0, 0)       \       |
 // |   /                         \     |
 // | /                             \   |
 // (-0.5, -0.5)--------------(0.5, -0.5)
 
 // Mesh := [Vertex(0, 0.5), Vertex(0.5, 0.5), Vertex(-0.5, 0.5)];
 Mesh.SetLength(3);
 Mesh[0] := Vertex(0, 0.5);
 Mesh[1] := Vertex(0.5, -0.5);
 Mesh[2] := Vertex(-0.5, -0.5);
 Shader.SetMesh(Mesh, []);