AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

glScene mesh Farbgebung

Ein Thema von yogie · begonnen am 2. Sep 2013 · letzter Beitrag vom 2. Sep 2013
Antwort Antwort
yogie

Registriert seit: 11. Sep 2003
Ort: bei Goslar
213 Beiträge
 
Delphi 6 Professional
 
#1

glScene mesh Farbgebung

  Alt 2. Sep 2013, 13:34
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.
Angehängte Dateien
Dateityp: zip MeshTest.zip (314,7 KB, 10x aufgerufen)
Kompatibilität ist ein Euphemismus für n i c h t einhunderprozentige Austauschbarkeit
http://b-und-l-service.de/

Geändert von yogie ( 2. Sep 2013 um 13:38 Uhr)
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.176 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: glScene mesh Farbgebung

  Alt 2. Sep 2013, 14:14
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.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:44 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz