请问opengl(50分)

  • 主题发起人 主题发起人 cgd555
  • 开始时间 开始时间
C

cgd555

Unregistered / Unconfirmed
GUEST, unregistred user!
在OPENGL中怎样根据要求画曲线
 

uses
cgBezier;

var
Line: TCGLine; //羘?BezierΡ絬?癸禜
face: TCGFace;
Angle: GLInt;

const
ctrlpoints1: array[0..4,0..2] of GLFloat = //﹚竡北?翴
((-4.0,-2.0,0.0),(-2.0,4.0,0.0),(2.0,-2.0,0.0),
(2.0,2.0,0.0),(4.0,-2.0,0.0) );
ctrlpoints2: Array[0..3,0..3,0..2] of GLFloat =
(((-1.5,-1.5,4.0),(-0.5,-1.5,2.0),(0.5,-1.5,-1.0),(1.5,-1.5,2.0)),
((-1.5,-0.5,1.0),(-0.5,-0.5,3.0),(0.5,-0.5,0.0),(1.5,-0.5,-1.0)),
((-1.5,0.5,4.0),(-0.5,0.5,0.0),(0.5,0.5,3.0),(1.5,0.5,0.0)),
((-1.5,1.5,-2.0),(-0.5,1.5,-2.0),(0.5,1.5,0.0),(1.5,1.5,-1.0)));


implementation

{$R *.dfm}

procedure Tfrmbezier.FormCreate(Sender: TObject);
begin

InitGL;
glClearColor(0.0,0.0,0.0,0.0);

glEnable(GL_DEPTH_TEST);
glShadeModel(GL_FLAT);

//承?Bezier癸禜??﹍て―?竟
line := TCGLine.Create(GL_MAP1_VERTEX_3,0,1,3,4,@ctrlPoints1);

// ?﹍て?ΩΡ?
face := TCGFace.Create(GL_MAP2_VERTEX_3,0,1,3,4,0,1,12,4,@ctrlPoints2);

Angle := 20;
end;

procedure Tfrmbezier.FormPaint(Sender: TObject);
begin

glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
glColor3f(1.0,0.0,0.0);

line.BezierLine(GL_LINES,30);

// draw bezier surface
glPushMatrix;
glRotatef(Angle,1.0,1.0,1.0);
face.BezierFace(GL_LINE_STRIP,10,10);
glPopMatrix;

glFinish;
PageFlip;

end;

procedure Tfrmbezier.FormResize(Sender: TObject);
var
w,h: Integer;
begin
w := ClientWidth;
h := ClientHeight;

glViewPort(0,0,w,h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity;

if (w<h) then
glOrtho(-5.0,5.0,-5.0*h/w,5.0*h/w,-5.0,5.0)
else
glOrtho(-5.0*w/h,5.0*w/h,-5.0,5.0,-5.0,5.0);

glMatrixMode(GL_MODELVIEW);
glLoadIdentity;

Paint;
end;

procedure Tfrmbezier.FormDestroy(Sender: TObject);
begin
line.Free;
face.free;
end;

procedure Tfrmbezier.Timer1Timer(Sender: TObject);
begin
if Angle > 360 then
Angle := Angle - 360
else
Angle := Angle + 3;

Paint;
end;
 
什么要求啊?
 
后退
顶部