opengl+delphi 鼠标拾取
the objects found, but start at the second one
for i := 1 to objectsFound - 1 do
begin
// Check if the current objects depth is lower than the current lowest
// Notice we times i by 4 (4 values for each object) and add 1 for the depth.
if (selectBuffer[(i * 4) + 1] < lowestDepth) then
begin
// Set the current lowest depth
lowestDepth := selectBuffer[(i * 4) + 1];
// Set the current object ID
selectedObject := selectBuffer[(i * 4) + 3];
end
end;
// Return the selected object
result := selectedObject;
exit;
end;
// We didn't click on any objects so return 0
result := 0;
end;
{------------------------------------------------------------------}
{ Initialise OpenGL }
{------------------------------------------------------------------}
procedure glInit();
begin
glClearColor(0.0, 0.0, 0.0, 0.0); // Black Background
glShadeModel(GL_SMOOTH); // Enables Smooth Color Shading
glClearDepth(1.0); // Depth Buffer Setup
glEnable(GL_DEPTH_TEST); // Enable Depth Buffer
glDepthFunc(GL_LESS); // The Type Of Depth Test To Do
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); //Realy Nice perspective calculations
glEnable(GL_TEXTURE_2D); // Enable Texture Mapping
LoadTexture('Sun.bmp', SunTex, false);// Load "Sun.bmp" into openGL as a texture for the Sun
LoadTexture('Earth.bmp', EarthTex, false);// Load "Earth.bmp" into openGL as a texture for the Earth
LoadTexture('Pluto.bmp', PlutoTex, false);// Load "Pluto.bmp" into openGL as a texture for Pluto
end;
{------------------------------------------------------------------}
{ Handle window resize }
{------------------------------------------------------------------}
procedure glResizeWnd(Width, Height : Integer);
begin
if (Height = 0) then // prevent divide by zero exception
Height := 1;
glViewport(0, 0, Width, Height); // Set the viewport for the OpenGL window
glMatrixMode(GL_PROJECTION); // Change Matrix Mode to Projection
glLoadIdentity(); // Reset View
gluPerspective(45.0, Width/Height, 0.5, 150.0);
glMatrixMode(GL_MODELVIEW); // Return to the modelview matrix
glLoadIdentity(); // Reset View
end;
{------------------------------------------------------------------}
{ Processes all the keystrokes }
{------------------------------------------------------------------}
procedure ProcessKeys;
begin
end;
{------------------------------------------------------------------}
{ Determines the application
e response to the messages received }
{------------------------------------------------------------------}
function WndProc(hWnd: HWND; Msg: