unit Unit1;

interface

uses
OpenGL,Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls; type
TForm1 = class(TForm)
Timer1: TTimer;
procedure FormCreate(Sender: TObject);
procedure FormPaint(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
angle:single;
procedure Draw; //Draws an OpenGL scene on request
public
{ Public declarations }
end; var
Form1: TForm1; implementation {$R *.dfm}
function getNormal(p1,p2,p3:TGLArrayf3):TGLArrayf3;
var a,b:TGLArrayf3;
begin
//make two vectors
a[]:=p2[]-p1[]; a[]:=p2[]-p1[]; a[]:=p2[]-p1[];
b[]:=p3[]-p1[]; b[]:=p3[]-p1[]; b[]:=p3[]-p1[];
//calculate cross-product
result[]:=a[]*b[]-a[]*b[];
result[]:=a[]*b[]-a[]*b[];
result[]:=a[]*b[]-a[]*b[];
end; procedure setupPixelFormat(DC:HDC);
const
pfd:TPIXELFORMATDESCRIPTOR = (
nSize:sizeof(TPIXELFORMATDESCRIPTOR); // size
nVersion:; // version
dwFlags:PFD_SUPPORT_OPENGL or PFD_DRAW_TO_WINDOW or
PFD_DOUBLEBUFFER; // support double-buffering
iPixelType:PFD_TYPE_RGBA; // color type
cColorBits:; // preferred color depth
cRedBits:; cRedShift:; // color bits (ignored)
cGreenBits:; cGreenShift:;
cBlueBits:; cBlueShift:;
cAlphaBits:; cAlphaShift:; // no alpha buffer
cAccumBits: ;
cAccumRedBits: ; // no accumulation buffer,
cAccumGreenBits: ; // accum bits (ignored)
cAccumBlueBits: ;
cAccumAlphaBits: ;
cDepthBits:; // depth buffer
cStencilBits:; // no stencil buffer
cAuxBuffers:; // no auxiliary buffers
iLayerType:PFD_MAIN_PLANE; // main layer
bReserved: ;
dwLayerMask: ;
dwVisibleMask: ;
dwDamageMask: ; // no layer, visible, damage masks
);
var pixelFormat:integer;
begin
pixelFormat := ChoosePixelFormat(DC, @pfd);
if (pixelFormat = ) then
exit;
if (SetPixelFormat(DC, pixelFormat, @pfd) <> TRUE) then
exit;
end; procedure GLInit;
const
light0_position:TGLArrayf4=( -8.0, 8.0, -16.0, 0.0);
ambient: TGLArrayf4=( 0.3, 0.3, 0.3, 0.3);
begin
// set viewing projection
glMatrixMode(GL_PROJECTION);
glFrustum(-0.1, 0.1, -0.1, 0.1, 0.3, 25.0);
// position viewer */
glMatrixMode(GL_MODELVIEW);
glEnable(GL_DEPTH_TEST); // set lights
glEnable(GL_LIGHTING);
glLightfv(GL_LIGHT0, GL_POSITION, @light0_position);
glLightfv(GL_LIGHT0, GL_AMBIENT, @ambient);
glEnable(GL_LIGHT0);
end; procedure TForm1.Draw;
const D=1.5;
H1=D/1.732;
H2=D*1.732-H1; // D/H = tg() = /sqrt()
HY=3.0;
const //vertexes
a1:TGLArrayf3=(-D, , -H1);
a2:TGLArrayf3=(D, , -H1);
a3:TGLArrayf3=(, , H2);
a4:TGLArrayf3=(, HY, );
var n1, n2, n3, n4: TGLArrayf3; //normals
begin
n1 := getNormal(a1,a3,a2);
n2 := getNormal(a1,a2,a4);
n3 := getNormal(a2,a3,a4);
n4 := getNormal(a3,a1,a4);
glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
glEnable(GL_NORMALIZE);
glShadeModel(GL_FLAT);
glCullFace(GL_BACK);
glLoadIdentity;
glTranslatef(0.0, 0.0, -12.0);
glBegin(GL_TRIANGLES); glNormal3fv(@n1); glVertex3fv(@a1); glVertex3fv(@a2); glVertex3fv(@a3); glNormal3fv(@n2);
glVertex3fv(@a1); glVertex3fv(@a2); glVertex3fv(@a4); glNormal3fv(@n3); glVertex3fv(@a2); glVertex3fv(@a3); glVertex3fv(@a4);
glNormal3fv(@n4); glVertex3fv(@a3); glVertex3fv(@a1); glVertex3fv(@a4);
glEnd;
SwapBuffers(wglGetCurrentDC);
end; procedure TForm1.FormCreate(Sender: TObject);
var DC:HDC;
RC:HGLRC;
i:integer;
begin
DC:=GetDC(Handle); //Actually, you can use any windowed control here
SetupPixelFormat(DC);
RC:=wglCreateContext(DC); //makes OpenGL window out of DC
wglMakeCurrent(DC, RC); //makes OpenGL window active
GLInit; //initialize OpenGL
end; procedure TForm1.FormPaint(Sender: TObject);
begin
Draw;
end; procedure TForm1.Timer1Timer(Sender: TObject);
begin
angle:=angle+1.0;
Draw;
end;
end.

最新文章

  1. jQuery AutoComplete在AJAX UpdatePanel环境中PostBack之后无法工作
  2. Java开源BI系统介绍(转)
  3. RTP 与RTCP 解释. 含同步时间戳
  4. Web开发常用知识点 - PHP
  5. Owin中间件搭建OAuth2.0认证授权服务体会
  6. Android学习参考教程和工具及常见问题解决
  7. Android handler 报错处理Can&#39;t create handler inside thread that has not called Looper.prepare()
  8. Android开源git40个App源码
  9. JQuery中如何click中传递参数
  10. C# 读取XML文件示例
  11. SpringMvc之@RequestParam详解
  12. 杭电dp题集,附链接还有解题报告!!!!!
  13. Kotlin初探
  14. Redis在本地测试没有问题,上传的服务器后出现错误
  15. PHP 八种基本的数据类型小结
  16. 编译TensorFlow源码
  17. es6之字符串添加的东西
  18. sqlServer区分大小写查询
  19. Xamarin.Android 隐藏软键盘
  20. mail 发送邮件

热门文章

  1. loj 1407(2-sat + 枚举 + 输出一组可行解 )
  2. 电赛菜鸟营培训(三)&mdash;&mdash;STM32F103CB之串口通信
  3. 北京网络赛G BOXES 状态压缩+有序BFS+高维数组判重
  4. Properties类的用法
  5. 状态压缩 + 暴力 HDOJ 4770 Lights Against Dudely
  6. LIB 配置文件读写器
  7. BZOJ3919 : [Baltic2014]portals
  8. BZOJ3682 : Phorni
  9. 【转】eclipse插件开发,调试运行,导出与安装
  10. Flex httpservice返回值类型和处理 (转)