Open GL Super Bible:Visual Basic and 4GL-Based OpenGL Programming
To access the contents, click the chapter and section titles.
Open GL Super Bible
(Publisher: Macmillan Computer Publishing)
Author(s): Waite group Press
ISBN: 1571690735
Publication Date: 08/01/96
function isIE4()
{
return( navigator.appName.indexOf("Microsoft") != -1 && (navigator.appVersion.charAt(0)==
'4')
); }
function
bookMarkit() {varurl="http://www.itknowledge.com/PSUser/EWBookMarks.html?url="+window.location+"&isbn=0";
parent.location.href=url;
//var win = window.open(url,"myitk");
//if(!isIE4())
// win.focus();
}
Previous
Table of Contents
Next
Use and Operation of WaiteGL.OCX
The OpenGL OCX is named WaiteGL.OCX and is in this chapterłs subdirectory on the CD. Using this control is very easy. Follow the directions in this chapter to register the control and install it into your environment. Then just place the control on a form and start calling its methods as if they were OpenGL functions and commands.
Each command is named just as it is in the OpenGL API, but with the leading gl dropped. By naming your own control gl, your code will look very much like C code that uses OpenGL. See the VB and Delphi examples that follow for an example of this.
This OCX fires two events that you can catch from your application. The first is SetupRC, which is called the first time the OCX tries to paint its client area. At this point, the pixel format and rendering context has already been created and set for the control. Here you can set up your lighting, background colors, and so on. The second event is Render, which is called every time the control needs to be painted. By placing your rendering code here, you effectively draw in the client area with OpenGL.
There are a few other caveats to bear in mind as you use the OCX.
• Since you may wish to have more than one OpenGL control in your application, the OCX cannot assume that the rendering context for any specific control will always be current. Therefore, two methodsMakeCurrent and MakeNotCurrentare provided. All your OpenGL calls must be placed within calls to these two functions; this includes within SetupRC and Render.
• Furthermore, you may always call the OpenGL API directly when you have made the rendering context for the OpenGL OCX current. You can do this for performance reasons, or in case new functions are added to later versions of OpenGL that arenÅ‚t included in the OCXÅ‚s method list. The source is also included, so if you have Visual C++ and the inclination, you can always make modifications in the control yourself.
• A 3-3-2 palette is created for this control and is realized every time the control fires the Render event. Trying to manipulate the palette yourself can produce unexpected results.
• Finally, the control window is
double buffered, so you will always need to call the SwapBuffers method
to see your image.
OpenGL Flags
It is impossible to make any use of the OpenGL functions and commands without access to the many special flags and state variables. Each of these flagłs values is available via a method by the same name as the flag itself. The method name is in lowercase, however; having them match exactly leads to problems with the real defines in the header files. Although it would make sense for some of these state variables to be implemented as properties, for others it wouldnłt. For consistency, then, the methods match the OpenGL API as closely as possible.
Although many functions have several variations, they are only implemented once as a method. This means functions such as
void glVertex2fv(const GLfloat *v );
would be implemented as a method as
Vertex2(float x, float y)
A help file is included (WaiteGL.hlp) that contains all the methods defined for WaiteGL. They are organized by the three OpenGL libraries (gl, glu, and glaux), and for all the constant macro definitions. To use the help file, find the OpenGL function needed and then look for the WaiteGL OCX method for that function.
Now letłs examine the specifics of setting up an OpenGL-enabled program in the two most popular 4GL environments. The next section discusses Visual Basic. If you are using Delphi 2.0 (the 32bit version), you can skip to the following section.
Installing and Using WaiteGL from VB 4.0
To make use of WaiteGL.ocx, it must first be registered as an OCX by the operating system (Windows NT or Windows 95). Copy the .ocx file into your system directory and run the supplied ocxreg.exe program. In the command line argument, specify the .ocx filename and either install or uninstall. For example:
ocxreg.exe WaiteGL.ocx install
You will find this program (with source) provided on the CD under the subdirectory for this chapter.
Installing the Control
Once the control has been registered with the operating system, it must be installed into the Visual Basic tool palette. Select Tools from the main menu, then Custom Controls. Choose the Waite Group OpenGL OCX from the dialog as shown in Figure 23-1, and click OK. Now you can drag the OpenGL control onto your forms, and size and place it accordingly.
Figure 23-1 Installing the WaiteGL OCX for use in Visual Basic
A Visual Basic Example
For our VB example, we placed our OpenGL control on a form and named it gl. We have also placed a timer on the form with a time interval of 200 milliseconds. See Figure 23-2. You may notice that the control does not paint or erase its client area. This is because the drawing code must be written in Basic and placed in the Render event handler.
Figure 23-2 A VB form with the OpenGL OCX
As mentioned earlier, two events defined by the OCX must be supported in our code. One is the SetupRC event. You put code here that initializes the rendering context by setting up the initial viewing volume, setting the background, and perhaps drawing colors and any lighting definitions you may want. Listing 23-1 is the code for our rendering context setup. This code simply sets the background and drawing color along with the viewing volume.
Listing 23-1 Set up the rendering context from Visual Basic
Private Sub gl_SetupRC()
Rem Make the rendering context current
gl.MakeCurrent
Rem Set the background color to black
gl.ClearColor 0#, 0#, 0#, 1#
Rem Establish the viewing volume
gl.LoadIdentity
gl.Ortho -100#, 100#, -100#, 100#, -100#, 100#
Rem Set the drawing color, flush, and
Rem make the rendering context not current
gl.Color 0, 0, 255, 255
gl.Flush
gl.MakeNotCurrent
End Sub
Previous
Table of Contents
Next
Use of this site is subject to certain Terms & Conditions, Copyright © 1996-2000 EarthWeb Inc.
All rights reserved. Reproduction whole or in part in any form or medium without express written permission of EarthWeb is prohibited. Read EarthWeb's privacy statement.
Wyszukiwarka
Podobne podstrony:
669 672670 672Nuestro Circulo 669 COMENTA LEONTXO, 20 de junio de 2015672,39,artykul669 Tworzymy zakładowy plan kont cz III672 674672 675669 (2)więcej podobnych podstron