抛砖引玉。如何把画出反走样的圆环,考虑速度问题 一种方法(不通用) (300分)

  • 主题发起人 主题发起人 陈晨
  • 开始时间 开始时间

陈晨

Unregistered / Unconfirmed
GUEST, unregistred user!
如何把opengl画出的图形在自定义的shape控件中输出?(高手,高手,高高手)
 
你的SHAPE控件支不支持BMP文件?如果可以,
你可以让OPENGL输出BMP图象!不就可以了吗?
cdyxl@163.com
 
我打算用opengl里面的函数在shape里面画图,
这样可以得到立体的或者是平滑的圆环等shape对象。
 
自己做一个Shape控件,继承自TShape。
重载Paint:
procedure Paint; override;
...
procedure TMyShape.Paint;
begin
Canvas.Draw(...);
end;
 
还有一个方法是:
var
c:TCanvas;
begin
c:=TControlCanvas.Create;
TControlCanvas(c).Control:=Shape1;
c.Draw(...);
c.Free;
end;
但这样做,该图被遮住后不会重画。
 
最新编辑的题目,谢谢了
 
难道画反走样的圆很难么?
还是觉得简单不想回答这样的问题呢?
 
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

const arr:array[0..9,0..9] of integer =((0,0,0,5,1,1,5,0,0,0),(0,13,1,10,0,0,10,1,13,0),
(13,1,13,0,0,0,0,13,1,13),(5,10,0,0,0,0,0,0,10,5),(1,13,0,0,0,0,0,0,13,1),(1,13,0,0,0,0,0,0,13,1)
,(5,10,0,0,0,0,0,0,10,5),(13,1,13,0,0,0,0,13,1,13),(0,13,1,10,0,0,10,1,13,0),(0,0,0,5,1,1,5,0,0,0));
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject); private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

uses clock;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var i,j:integer;
ary:array [0..9,0..9] of integer;
begin
ClockOn;
for i:=0 to 9 do
for j:=0 to 9 do
begin
if arr[i,j]<>0 then
//beep();
form1.Canvas.Pixels[50+i,50+j]:=$111100*arr[i,j]+$0000ff;
end;
ClockOff;
//form1.Canvas.Ellipse(50,50,50+arr[1,0],50+arr[1,0]);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
form1.Canvas.Pen.Color:=clred;
form1.Canvas.Ellipse(60,60,70,70);
end;

end.
测试速度还可以,但是怎么样产生这样的数组呢?
各位还有什么其他的好方法?产生透明的反走样圆环呢?
 
多人接受答案了。
 
后退
顶部