TextureObject.cpp

Demonstration of a 3D render object that uses display lists to cache its result. Note that with the next big release of OpenGL display lists won't be supported anymore. Thus, it might be good to use vertexbuffers instead.

Start e.g.:

../../../bin/vish TextureObject.vis

See also:
Required tutorial: - Simple3DObject.cpp

Further tutorial: - VertexBufferObject.cpp - VectorFieldLines.cpp

00001 
00002 #include <stdio.h>
00003 
00004 #include <ocean/GLvish/VRenderObject.hpp>
00005 #include <ocean/plankton/VCreator.hpp>
00006 #include <ocean/plankton/VTime.hpp>
00007 #include <ocean/GLvish/BoundingBox.hpp>
00008 
00009 #include <stdio.h>
00010 
00011 using namespace Wizt;
00012 
00013 
00032 /*
00033  Render object.
00034 
00035 Based on:
00036  http://www.opengl.org/resources/code/samples/glut_examples/examples/abgr.c
00037  */
00038 class   TextureObject : public VRenderObject
00039 {
00040         GLubyte ubImage[65536];
00041 
00042         virtual void render(VRenderContext&Context) const;
00043 
00044 public:
00045         TypedSlot<double>       Complexity;
00046 
00047         TextureObject(const string&name, int p, const RefPtr<VCreationPreferences>&VP)
00048         : VRenderObject(name, p, VP)
00049         {
00050         int j; 
00051         GLubyte *img; 
00052         GLsizei imgWidth = 128; 
00053 
00054                 /* Create image */ 
00055                 img = ubImage; 
00056                 for (j = 0; j < 32 * imgWidth; j++) {
00057                         *img++ = 0xff;
00058                         *img++ = 0x00;
00059                         *img++ = 0x00;
00060                         *img++ = 0xff;
00061                 } 
00062                 for (j = 0; j < 32 * imgWidth; j++) {
00063                         *img++ = 0xff;
00064                         *img++ = 0x00;
00065                         *img++ = 0xff; 
00066                         *img++ = 0x00;
00067                 } 
00068                 for (j = 0; j < 32 * imgWidth; j++) {
00069                         *img++ = 0xff; 
00070                         *img++ = 0xff; 
00071                         *img++ = 0x00; 
00072                         *img++ = 0x00;
00073                 } 
00074                 for (j = 0; j < 32 * imgWidth; j++) {
00075                         *img++ = 0x00; 
00076                         *img++ = 0xff; 
00077                         *img++ = 0x00; 
00078                         *img++ = 0xff;
00079                 }
00080         }
00081 
00082         ~TextureObject()
00083         {}
00084 };
00085 
00086 void TextureObject::render(VRenderContext&Context) const
00087 {
00088         glMatrixMode(GL_PROJECTION); 
00089         glLoadIdentity(); 
00090         gluPerspective(60.0, 1.0, 0.1, 1000.0); 
00091         glMatrixMode(GL_MODELVIEW); 
00092         glDisable(GL_DITHER);
00093 
00094 {
00095   glEnable(GL_TEXTURE_2D);
00096   glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
00097   glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
00098   glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
00099   glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);
00100 
00101 #if GL_EXT_abgr
00102   glTexImage2D(GL_TEXTURE_2D, 0, 3, 128, 128, 0, GL_ABGR_EXT,
00103     GL_UNSIGNED_BYTE, ubImage);
00104 
00105   glBegin(GL_POLYGON);
00106   glTexCoord2f(1.0, 1.0);
00107   glVertex3f(-0.2, 0.8, -100.0);
00108   glTexCoord2f(0.0, 1.0);
00109   glVertex3f(-0.8, 0.8, -2.0);
00110   glTexCoord2f(0.0, 0.0);
00111   glVertex3f(-0.8, 0.2, -2.0);
00112   glTexCoord2f(1.0, 0.0);
00113   glVertex3f(-0.2, 0.2, -100.0);
00114   glEnd();
00115 #endif
00116 
00117   glTexImage2D(GL_TEXTURE_2D, 0, 3, 128, 128, 0, GL_RGB,
00118     GL_UNSIGNED_BYTE, ubImage);
00119 
00120   glBegin(GL_POLYGON);
00121   glTexCoord2f(1.0, 1.0);
00122   glVertex3f(0.8, 0.8, -2.0);
00123   glTexCoord2f(0.0, 1.0);
00124   glVertex3f(0.2, 0.8, -100.0);
00125   glTexCoord2f(0.0, 0.0);
00126   glVertex3f(0.2, 0.2, -100.0);
00127   glTexCoord2f(1.0, 0.0);
00128   glVertex3f(0.8, 0.2, -2.0);
00129   glEnd();
00130 
00131   glDisable(GL_TEXTURE_2D);
00132 }
00133 
00134 
00135 }
00136 
00137 static Ref<VCreator<TextureObject> > MyCreator("Tutorial/TextureObject", 0);
00138 
00139 /*
00140  This line needs to be contained in ONE source file of each
00141  VISH plugin module. It's not important which one.
00142  */
00143 VISH_DEFAULT_INIT
00144 
00145 

Generated on Thu Apr 2 18:58:49 2009 for VISHTutorial by  doxygen 1.4.7