![]() |
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. |
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