高手帮帮忙 有这种软件吗 或者是怎么写程序
解决方案 »
- dbgrid中怎样捕捉换行操作?[悬赏50分]
- 如何在一个TDBChart中显示多个Series?并且可以手工隐藏特定的Series,显示特定的Series?急!!!
- 或许您能帮助俺!!!!
- 如何测试速度很慢的分布式数据库?
- 报表如何打印Memo字段内容?
- 生成WORD时的错误,非常着急,请帮忙,分不够再加.谢谢.
- 关于右键弹出菜单:为什么菜单弹出的位置总是和我的鼠标离得十万八千里?
- 输入问题?我现在想用delphi7做一个毕业设计,那位高人指点一下
- 如何让在网页上游览EXECL报表不自动打开EXCEL,只是出现下载的提示框,是否是要改注册表啊
- 非DELPHI(打印方面的)高手莫入!请大家帮助!十万火急!
- 向各位大侠们问两个问题
- 关于DLL调用
http://www.2ccc.com/article.asp?articleid=3573
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, GLInit, RapidUI, untObjModel, ExtCtrls, OpenGL;type
TfrmMain = class(TForm)
tmrRender: TTimer;
tmrKey: TTimer;
opDlg: TOpenDialog;
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure tmrRenderTimer(Sender: TObject);
procedure tmrKeyTimer(Sender: TObject);
procedure FormResize(Sender: TObject);
procedure FormClick(Sender: TObject);
private
procedure SetView;
procedure SetLights;
procedure RenderScene;
{ Private declarations }
public
{ Public declarations }
end;var
frmMain: TfrmMain;
glInitor : TOpenGLInit;
objMdl:TObjModel;
yDeg,xDeg:Single;
implementation{$R *.dfm}procedure TfrmMain.FormCreate(Sender: TObject);
begin
objMdl := TObjModel.Create;
GLinitor := TOpenGLInit.Create(Handle,24,stdDoubleBuffer);
SetView;
if opdlg.Execute then
objMdl.LoadFromFile(opdlg.FileName);
SetLights;
end;procedure TfrmMain.SetLights;
var AmbientLight,DiffuseLight,SpecularLight:array[1..4] of Single;
LightPos:array[1..4] of Single;
SpotDir:array[1..3] of Single;
begin
AmbientLight[1]:=0.3;AmbientLight[2]:=0.3;
AmbientLight[3]:=0.3;AmbientLight[4]:=1;
DiffuseLight[1]:=1;DiffuseLight[2]:=1;
DiffuseLight[3]:=1;DiffuseLight[4]:=1;
SpecularLight[1]:=0.4;SpecularLight[2]:=0.4;
SpecularLight[3]:=0.4;SpecularLight[4]:=1;
LightPos[1]:= 100000; LightPos[2]:=100000; LightPos[3]:=400; LightPos[4]:=1;
glEnable(GL_LIGHTING); //¿ªÆô¹âÕÕϵͳ
//ÉèÖÃ0ºÅ¹âÔ´
glLightfv(GL_LIGHT0,GL_AMBIENT,@AmbientLight);
glLightfv(GL_LIGHT0,GL_DIFFUSE,@DiffuseLight);
glLightfv(GL_LIGHT0,GL_SPECULAR,@SpecularLight);
glLightfv(GL_LIGHT0,GL_POSITION,@LightPos); glEnable(GL_LIGHT0); //ÆôÓÃ0ºÅ¹âÔ´end;procedure TfrmMain.FormClose(Sender: TObject; var Action: TCloseAction);
begin
objMdl.Free;
glInitor.Free;
end;procedure TfrmMain.SetView;
begin
glClearColor(0,0,0,0);//ÉèÖñ³¾°ÑÕɫΪºÚÉ«
glViewPort(0,0,ClientWidth,ClientHeight);//Ö¸¶¨OpenGLÔÚ´ËÇøÓòÄÚ»æͼ¡£
glMatrixMode(GL_PROJECTION);//ÉèÖÃÊÓͼͶӰ±ä»»¾ØÕó
glLoadIdentity;//¼ÓÔص¥Î»¾ØÕó¡£
gluPerspective(60,ClientWidth/ClientHeight,1,2200);//´´½¨Í¸ÊÓͶӰ
glMatrixMode(GL_MODELVIEW);//½«¾ØÕó±ä»»¶ÔÏóÇл»ÎªÄ£ÐÍÊÓͼ±ä»»¡£
end;procedure TfrmMain.RenderScene;
begin
glLoadIdentity;
glShadeModel(GL_SMOOTH);
glEnable(GL_DEPTH_TEST);
glCullFace(gl_front);
glFrontFace(GL_CW);//˳ʱÕë²øÈÆΪÕýÃæ
glEnable(GL_CULL_FACE);
glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);//Çå¿Õ»º³åÇø
glTranslate(0,0,-200); glRotate(yDeg,0,1,0);
glRotate(xDeg,1,0,0);
SetLights; //ÉèÖùâÔ´ glEnable(GL_TEXTURE_2D);
objMdl.Render;
swapbuffers(wglGetCurrentDC);
end;procedure TfrmMain.tmrRenderTimer(Sender: TObject);
begin
RenderScene;
end;procedure TfrmMain.tmrKeyTimer(Sender: TObject);
begin
if GetAsyncKeyState(VK_LEFT)<>0 then
begin
yDeg:=yDeg+1;
end;
if GetAsyncKeyState(VK_RIGHT)<>0 then
begin
yDeg:=yDeg-1;
end;
if GetAsyncKeyState(VK_UP)<>0 then
begin
xDeg:=xDeg+1;
end
else if GetAsyncKeyState(VK_DOWN)<>0 then
begin
xDeg:=xDeg-1;
end;
end;procedure TfrmMain.FormResize(Sender: TObject);
begin
SetView;
end;procedure TfrmMain.FormClick(Sender: TObject);
begin
if opdlg.Execute then
objMdl.LoadFromFile(opdlg.FileName);
end;end.