Go to the source code of this file.
Functions | |
| void | initTorus () |
| void | drawTorus (const float *eyePoint) |
|
|
Definition at line 90 of file torus.cpp. References _fp_pp, _fp_pv, _vp_pp, _vp_pv, CgFragmentProgram::bindTexture(), CgProgram::disable(), CgFragmentProgram::disable(), CgFragmentProgram::enable(), CgProgram::enable(), g_bPerPixelLighting, g_fTorusX, g_fTorusY, g_lightPos, g_lightPosEye, ModelViewMatrix, CgProgram::setParameter(), CgVertexProgram::setStateMatrixParameter(), TEX_GRASS, TEX_ROCK, and texture(). Referenced by renderScene().
00091 {
00092 CgVertexProgram *vp = NULL;
00093 CgFragmentProgram *fp = NULL;
00094 CgProgram *lightprog = NULL;
00095 if (g_bPerPixelLighting) {
00096 vp = &_vp_pp;
00097 fp = &_fp_pp;
00098 lightprog = &_fp_pp;
00099 }
00100 else {
00101 vp = &_vp_pv;
00102 fp = &_fp_pv;
00103 lightprog = &_vp_pv;
00104 }
00105
00106 float textureMatrix[16];
00107 float modelViewProj[16];
00108 float modelView[16];
00109 float vector[4];
00110 float bias[16];
00111 float lightFrustum[16];
00112 float lightView[16];
00113 float tex[16];
00114 float trbias[16];
00115
00116 bias[0] = .5; bias[1] = 0; bias[2] = 0; bias[3] = .5;
00117 bias[4] = 0 ; bias[5] = .5; bias[6] = 0; bias[7] =.5;
00118 bias[8] = 0 ; bias[9] = 0; bias[10] = .5; bias[11] = .5;
00119 bias[12] = 0; bias[13] = 0; bias[14] = 0; bias[15] = 1;
00120
00121 //transposed bias
00122
00123 trbias[0] = .5; trbias[1] = 0; trbias[2] = 0; trbias[3] = 0;
00124 trbias[4] = 0 ; trbias[5] = .5; trbias[6] = 0; trbias[7] = 0;
00125 trbias[8] = 0 ; trbias[9] = 0; trbias[10] = .5; trbias[11] = 0;
00126 trbias[12] = 0.5; trbias[13] = 0.5; trbias[14] = 0.5; trbias[15] = 1;
00127
00128
00129 glGetFloatv(CG_GL_MODELVIEW_PROJECTION_MATRIX, modelViewProj);
00130
00131 glGetFloatv(GL_MODELVIEW_MATRIX, modelView);
00132
00133 vp->setParameter("bias", 16, (const float *) trbias );
00134
00135 //vp->setParameter("eye", 16, (const float *) ModelViewMatrix);
00136
00137 glBindTexture(GL_TEXTURE_2D, TEX_ROCK );
00138
00139 glMatrixMode(GL_TEXTURE);
00140 glPushMatrix();
00141 glLoadIdentity();
00142 glMultMatrixf(trbias);
00143 glFrustum(-1, 1, -1, 1, 1, 15);
00144 gluLookAt(-3, 3, -3, 0,0,0, 0, 5,0);
00145 //glTranslatef(-5, -5, -5);
00146 //glRotatef(135, 0, 1, 0);
00147 //glRotatef(135, 1, 0, 0);
00148 //glRotatef(135, 0, 0, 1);
00149 glMultMatrixf(ModelViewMatrix);
00150 glGetFloatv(GL_TEXTURE_MATRIX, tex);
00151 glPushMatrix();
00152 vp->setParameter("TM", 16, (const float *) tex);
00153 glPopMatrix();
00154 glPopMatrix();
00155 glLoadIdentity();
00156 glMatrixMode(GL_MODELVIEW);
00157
00158 //vp->setParameter("lightFrustum", 16, (const float *) lightFrustum);
00159 //vp->setParameter("lightView", 16, (const float *) lightView);
00160
00161 // Set the current modelview-projection matrix to the vertex program
00162 // vp->setStateMatrixParameter( "Modelview", CG_GL_MODELVIEW_MATRIX );
00163
00164 //vp-> setParameter("Kd", 1, &Kd );
00165
00166 //lightprog -> setParameter("Kd", 1, &Kd);
00167 //vp -> setStateMatrixParameter("modelViewProj", CG_GL_MODELVIEW_PROJECTION_MATRIX );
00168
00169
00170 //vp -> setParameter("ModelViewProj", 16, modelViewProj );
00171 // Set normal transformation (inverse-transpose modelview)
00172 // vp->setStateMatrixParameter( "NormalTransform", CG_GL_MODELVIEW_MATRIX, CG_GL_MATRIX_INVERSE_TRANSPOSE );
00173
00174
00175 // Set light direction
00176 float lightDir[3];
00177 lightDir[0] = g_lightPosEye[0];
00178 lightDir[1] = g_lightPosEye[1];
00179 lightDir[2] = g_lightPosEye[2];
00180 float l = sqrt( lightDir[0]*lightDir[0] + lightDir[1]*lightDir[1] + lightDir[2]*lightDir[2] );
00181 assert( l != 0 );
00182 lightDir[0] /= l;
00183 lightDir[1] /= l;
00184 lightDir[2] /= l;
00185 // lightprog->setParameter( "LightDir", 3, lightDir );
00186 vp -> setParameter ("lightPosition", 3, g_lightPos );
00187
00188 vp -> setStateMatrixParameter ("Projection", CG_GL_PROJECTION_MATRIX );
00189
00190
00191
00192 // Set color state
00193 //setProgramMaterialColor( colorRed );
00194
00195 // Set the texture to the fragment program
00196 fp->bindTexture( "Texture", texture( TEX_GRASS ));
00197
00198
00199 vp->setStateMatrixParameter( "ModelviewProjection", CG_GL_MODELVIEW_PROJECTION_MATRIX );
00200 vp->setStateMatrixParameter( "ModelviewProjectionIT", CG_GL_MODELVIEW_PROJECTION_MATRIX, CG_GL_MATRIX_INVERSE_TRANSPOSE );
00201 vp->setStateMatrixParameter( "Modelview", CG_GL_MODELVIEW_MATRIX );
00202 vp->setStateMatrixParameter( "ModelviewIT", CG_GL_MODELVIEW_MATRIX, CG_GL_MATRIX_INVERSE_TRANSPOSE );
00203
00204 glEnable(GL_TEXTURE_2D);
00205 //glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
00206 //glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
00207 //glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
00208 //glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_LINEAR);
00209
00210 // Render the torus
00211 glMatrixMode(GL_MODELVIEW);
00212 glPushMatrix();
00213 glRotatef(g_fTorusX, 0, 1, 0);
00214 glRotatef(g_fTorusY, 1, 0, 0);
00215 glPushMatrix();
00216 // Enable vertex program
00217 vp->enable();
00218 // Enable fragment program
00219 fp->enable();
00220
00221 glPopMatrix();
00222 glutSolidSphere(0.5f, 20, 20);
00223
00224 // glutSolidTorus( 0.4f, 1.0f, 17,20 );
00225 glPopMatrix();
00226
00227 //
00228
00229 glPushMatrix();
00230
00231 glBegin(GL_TRIANGLES);
00232 glVertex3d( -3, -3, 3);
00233 glVertex3d( -3, 0, 3);
00234 glVertex3d( 0, 0, 3);
00235
00236 glVertex3d( 0, 0, 3);
00237 glVertex3d( 0, -3, 3);
00238 glVertex3d( -3, -3, 3);
00239
00240 glVertex3d( -3, 0, 3);
00241 glVertex3d( -3, 3, 3);
00242 glVertex3d( 0, 3, 3);
00243
00244 glVertex3d( 0, 3, 3);
00245 glVertex3d( 0, 0, 3);
00246 glVertex3d( -3, 0, 3);
00247
00248 glVertex3d( 0, -3, 3);
00249 glVertex3d( 0, 0, 3);
00250 glVertex3d( 0, 3, 3);
00251
00252 glVertex3d( 0,-3,3);
00253 glVertex3d( 0,0,3);
00254 glVertex3d( 3,0,3);
00255
00256 glVertex3d( 3,0,3);
00257 glVertex3d( 3,-3,3);
00258 glVertex3d( 0,-3,3);
00259
00260 glVertex3d( 0,0,3);
00261 glVertex3d( 0,3,3);
00262 glVertex3d( 3,3,3);
00263
00264 glVertex3d( 3,3,3);
00265 glVertex3d( 3,0,3);
00266 glVertex3d( 0,0,3);
00267 glEnd();
00268 glPopMatrix();
00269
00270 glPushMatrix();
00271 glBegin(GL_TRIANGLES);
00272 glVertex3d( -3, -3, -3);
00273 glVertex3d( -3, -3, 3);
00274 glVertex3d( 3, -3, 3);
00275
00276 glVertex3d( 3,-3, 3);
00277 glVertex3d( 3,-3, -3);
00278 glVertex3d( -3,-3, -3);
00279 glEnd();
00280 glPopMatrix();
00281 glDisable(GL_TEXTURE_2D);
00282 // Restore state
00283 fp->disable();
00284 vp->disable();
00285 }
|
|
|
Definition at line 71 of file torus.cpp. References _fp_pp, _fp_pv, _vp_pp, _vp_pv, CgProgram::setFilename(), CgFragmentProgram::setup(), and CgVertexProgram::setup(). Referenced by initGL().
00072 {
00073 // Load CG objects
00074 _vp_pv.setFilename( "vertex_program.cg" );
00075 _vp_pv.setup();
00076
00077 _fp_pv.setFilename( "fragment_program.cg" );
00078 _fp_pv.setup();
00079
00080 _vp_pp.setFilename( "vertex_program_pp.cg" );
00081 _vp_pp.setup();
00082
00083 _fp_pp.setFilename( "fragment_program_pp.cg" );
00084 _fp_pp.setup();
00085
00086 }
|
1.3.6