Вот небольшой пример есть в нем нужно только заменить
glShadeModel(GL_SMOOTH);
Алгоритмом Гуро, но я даже не пойму откуда начинать писать этот алгоритм и куда его вставлять
unit frmMain;
interface
uses
Windows, Messages, Classes, Graphics, Forms, ExtCtrls, Menus, Controls,
Dialogs, OpenGL;
type
TfrmGL = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormResize(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
private
DC: HDC;
hrc: HGLRC;
Quadric : GLUquadricObj;
procedure Init;
procedure SetDCPixelFormat;
protected
procedure WMPaint(var Msg: TWMPaint); message WM_PAINT;
end;
var
frmGL: TfrmGL;
implementation
uses DGLUT;
{$R *.DFM}
procedure TfrmGL.Init;
const
light_position : Array [0..3] of GLfloat = ( 1.0, 1.0, 1.0, 0.0 );
begin
glLightfv(GL_LIGHT0, GL_POSITION, @light_position);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glEnable(GL_DEPTH_TEST);
glShadeModel(GL_SMOOTH);
end;
procedure TfrmGL.WMPaint(var Msg: TWMPaint);
var
ps : TPaintStruct;
begin
BeginPaint(Handle, ps);
glClear( GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT );
glPushMatrix;
glRotatef (20.0, 1.0, 0.0, 0.0);
glPushMatrix;
glTranslatef (-0.75, 0.5, 0.0);
glRotatef (90.0, 1.0, 0.0, 0.0);
glutSolidTorus (0.275, 0.85, 20, 20);
glPopMatrix;
glPushMatrix;
glTranslatef (-0.75, -0.5, 0.0);
glRotatef (270.0, 1.0, 0.0, 0.0);
gluCylinder (Quadric, 1.0, 0.0, 2.0, 20, 20);
glPopMatrix;
glPushMatrix;
glTranslatef (0.75, 0.0, -1.0);
gluSphere (Quadric, 1.0, 20, 20);
glPopMatrix;
glPopMatrix;
SwapBuffers(DC);
EndPaint(Handle, ps);
end;
procedure TfrmGL.FormCreate(Sender: TObject);
begin
DC := GetDC(Handle);
SetDCPixelFormat;
hrc := wglCreateContext(DC);
wglMakeCurrent(DC, hrc);
Quadric := GLUNewQuadric;
Init;
end;
procedure TfrmGL.FormResize(Sender: TObject);
begin
glViewport(0, 0, ClientWidth, ClientHeight );
glMatrixMode (GL_PROJECTION);
glLoadIdentity;
If ClientWidth <= ClientHeight
then glOrtho (-2.5, 2.5, -2.5*ClientHeight/ClientWidth,
2.5*ClientHeight/ClientWidth, -10.0, 10.0)
else glOrtho (-2.5*ClientWidth/ClientHeight,
2.5*ClientWidth/ClientHeight, -2.5, 2.5, -10.0, 10.0);
glMatrixMode (GL_MODELVIEW);
InvalidateRect(Handle, nil, False);
end;
procedure TfrmGL.FormDestroy(Sender: TObject);
begin
gluDeleteQuadric (Quadric);
wglMakeCurrent(0, 0);
wglDeleteContext(hrc);
ReleaseDC(Handle, DC);
DeleteDC (DC);
end;
procedure TfrmGL.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
If Key = VK_ESCAPE then Close;
end;
procedure TfrmGL.SetDCPixelFormat;
var
nPixelFormat: Integer;
pfd: TPixelFormatDescriptor;
begin
FillChar(pfd, SizeOf(pfd), 0);
pfd.dwFlags := PFD_DRAW_TO_WINDOW or PFD_SUPPORT_OPENGL or
PFD_DOUBLEBUFFER;
nPixelFormat := ChoosePixelFormat(DC, @pfd);
SetPixelFormat(DC, nPixelFormat, @pfd);
end;
end.
[Ответ]