Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   glScene mesh Farbgebung (https://www.delphipraxis.net/176395-glscene-mesh-farbgebung.html)

yogie 2. Sep 2013 12:34


glScene mesh Farbgebung
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo zusammen,

unter Verwendung eines Beispiels habe ich das hier gezeigte Testprogramm erstellt. Es erzeugt ein mesh mit 2 Farben und über den Button kann die Lichtquelle ein und aus geschaltet. werden. Dabei ändert sich, wie erwartet, die Darstellung Bei anderen Tests habe ich gesehen, daß eine Einstellung der Farbe für glScnene-Objekten über
xxx.Material.FrontProperties.Emission.Color := color
bzw.
xxx.Material.BackProperties.Emission.Color := color
zu einer Farbdarstellung führt, die unabhängig von einer Lichtquelle ist.

Ich würde nun gerne mein mesh mit verschiedenen Farben pro vertex versehen, wobei die Farben auch nicht von einer Lichtquelle abhängig sein sollen.

Ich vermute aber, daß sich
mesh1.Material.BackProperties.Emission.Color := color
immer auf das gesamte mesh bezieht.

Verschiedene Eistellungen des VertexModes brachten mich nicht weiter. Im Moment ist VertexMode := vmVNCT eingetragen

Delphi-Quellcode:
unit MeshTest;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, GLScene, GLMesh, GLMisc, GLObjects, GLWin32Viewer, StdCtrls, cGLCoordinateAxes, GLWindowsFont,
  GLBitmapFont, GLTexture, GLState, VectorTypes, VectorGeometry, GLContext,
  GLPolyhedron, GLGeomObjects, GLGraph;

type
  TForm1 = class(TForm)
    GLSceneViewer1: TGLSceneViewer;
    GLScene1: TGLScene;
    DummyCube1: TGLDummyCube;
    Mesh1: TGLMesh;
    GLLightSource1: TGLLightSource;
    GLCamera1: TGLCamera;
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    procedure CreateTestMesh;
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.CreateTestMesh;
var
   cResolution : integer;
   x, y : Integer;
   xs, ys : single;
   invRes : single;
   invRes2 : single;

   pTopLeft, pTopRight, pBottomRight, pBottomLeft : TAffineVector;
   function MakeVect(const x, y : Single) : TAffineVector;
   begin
      SetVector(Result, x*invRes, sin((x*x+y*y)*invRes2), y*invRes);
   end;

   procedure AddTriangle(const p1, p2, p3 : TAffineVector;
                         const color : TColorVector);
   begin
      with Mesh1.Vertices do begin
         AddVertex(p1, NullVector, color);
         AddVertex(p2, NullVector, color);
         AddVertex(p3, NullVector, color);
      end;
   end;

begin
   // scaling precalcs for our math func
   cResolution := 10;
   invRes:=10/cResolution;
   invRes2:=0.1*Sqr(invRes);
   // Triangles
   with Mesh1 do begin
      Mode:=mmTriangles;
      Vertices.Clear;

      for y:=-cResolution to cResolution do begin
         for x:=-cResolution to cResolution do begin
            pTopLeft   := MakeVect(x,  y+1);
            pTopRight  := MakeVect(x+1, y+1);
            pBottomRight:= MakeVect(x+1, y);
            pBottomLeft := MakeVect(x,  y);

            // top left triangle
            AddTriangle(pBottomLeft, pTopLeft, pTopRight, clrBlue);
            // bottom right triangle
            AddTriangle(pTopRight, pBottomRight, pBottomLeft, clrRed);
         end; //for x ...
      end; //for y ...
      CalcNormals(fwCounterClockWise);
    end;
end;

{------------------------------------------------------------------------------}
procedure TForm1.FormCreate(Sender: TObject);
begin
  CreateTestMesh;
end;
{------------------------------------------------------------------------------}

procedure TForm1.Button1Click(Sender: TObject);
begin
  glLightSource1.Shining := not glLightSource1.Shining;
end;
{------------------------------------------------------------------------------}

end.

Der schöne Günther 2. Sep 2013 13:14

AW: glScene mesh Farbgebung
 
Ich habe mit OpenGL keine Praxiserfahrung, aber ich hätte gedacht, dass "Emission" bezieht sich auf den typischen "Ambient"-Faktor in einem normalen Phong-Shadingmodell? Demnach könntest du deine Vertexfarben doch einfach so lassen und die "Emission"-Farbe auf weiß setzen?

Wobei mich in dem Fall auch wundert, was Front- und Backproperties sind.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:01 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz