opengl+delphi 鼠标拾取
//------------------------------------------------------------------------
//
// OBJECT PICKING TUTORIAL
// Author: Ben Humphrey -
// Delphi Converter: David "DavesLord" Caouette -
// OpenGL Template Author: Jan Horn - http://www.sulaco.co.za
//
//------------------------------------------------------------------------
program OpenGLApp;
uses
Windows,
Messages,
OpenGL,
Textures;
const
WND_TITLE = 'OpenGL App by Jan Horn';
FPS_TIMER = 1; // Timer to calculate FPS
FPS_INTERVAL = 1000; // Calculate FPS every 1000 ms
SUN = 100;// This is the object ID for the SUN
EARTH = 101;// This is the object ID for the EARTH
PLUTO= 102;// This is the object ID for PLUTO
var
h_Wnd : HWND; // Global window handle
h_DC : HDC; // Global device context
h_RC : HGLRC; // OpenGL rendering context
keys : Array[0..255] of Boolean; // Holds keystrokes
FPSCount : Integer = 0; // Counter for FPS
ElapsedTime : cardinal; // Elapsed time between frames
// Textures
SunTex : glUInt;
EarthTex: glUInt;
PlutoTex: glUInt;
// User variables
pObj: GLUQuadricObj;
SunRotation : single = 90;// This holds our sun's current rotation
EarthRotation : single = 90;// This holds our earth's current rotation
PlutoRotation : single = 90;// This holds pluto's current rotation
g_Fullscreen: boolean;
{$R *.RES}
procedure glBindTexture(target: GLenum; texture: GLuint); stdcall; external opengl32;
{------------------------------------------------------------------}
{ Function to convert int to string. (No sysutils = smaller EXE) }
{------------------------------------------------------------------}
function IntToStr(Num : Integer) : String; // using SysUtils increase file size by 100K
begin
Str(Num, result);
end;
{------------------------------------------------------------------}
{ Function to draw the actual scene }
{------------------------------------------------------------------}
procedure glDraw();
begin
glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);// Clear The Screen And The Depth Buffer
glLoadIdentity();// Reset The matrix
// We make our position a bit high and back to view the whole scene
// Position View Up Vector
gluLookAt(0, 3, 6, 0, 0, 0, 0, 1, 0);// This determines where the camera's position and view is
glInitNames();// This clears the name stack so we always start with 0 names.
// This next line is important. If you don't push on at least ONE name,
// The selection won'
t work. Instead of glLoadName()/glEnd() you can use
// glPushName(TheID) and glPopName(); Then you don't need to glPushName(0);
glPushName