Vorlesungsskript Computergraphik II - IWR
Vorlesungsskript Computergraphik II - IWR
Vorlesungsskript Computergraphik II - IWR
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
2.3. C FOR GRAPHICS 35<br />
static CGprofile<br />
static CGprogram<br />
cg_fragment_profile;<br />
cg_fragment_program;<br />
static CGparameter cg_parameter_vertex_scale_factor;<br />
static CGparameter cg_parameter_vertex_rotation;<br />
static CGparameter cg_parameter_fragment_color;<br />
// Error checking routine for Cg:<br />
static void checkForCgError(const char *situation) {<br />
CGerror error;<br />
const char *string = cgGetLastErrorString(&error);<br />
}<br />
if (error != CG_NO_ERROR) {<br />
printf("%s: %s\n", situation, string);<br />
if (error == CG_COMPILER_ERROR) {<br />
printf("%s\n", cgGetLastListing(cg_context));<br />
}<br />
exit(1);<br />
}<br />
// keyboard callback:<br />
void keyboard(unsigned char key, int x, int y) {<br />
switch (key) {<br />
case 27: // Escape<br />
case ’q’:<br />
cgDestroyProgram(cg_vertex_program);<br />
cgDestroyProgram(cg_fragment_program);<br />
cgDestroyContext(cg_context);<br />
exit(0);<br />
break;<br />
}<br />
}<br />
// display function:<br />
void display() {<br />
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);<br />
cgGLBindProgram(cg_vertex_program);<br />
checkForCgError("binding vertex program");<br />
cgGLEnableProfile(cg_vertex_profile);<br />
checkForCgError("enabling vertex profile");<br />
// Hier werden die Werte der einheitlichen Parameter "scale_factor", "vertex_rotation" festgesetzt:<br />
cgGLSetParameter1f(cg_parameter_vertex_scale_factor, 0.7);<br />
cgGLSetParameter1f(cg_parameter_vertex_rotation, 1.509);<br />
cgGLBindProgram(cg_fragment_program);<br />
checkForCgError("binding fragment program");<br />
cgGLEnableProfile(cg_fragment_profile);<br />
checkForCgError("enabling fragment profile");<br />
GLfloat color[] = {0.2, 0.7, 0.3};<br />
cgGLSetParameter3fv(cg_parameter_fragment_color, color);<br />
// Rendern eines Dreiecks. Hierfuer wurde keine Farbe ausgewaehlt!<br />
glBegin(GL_TRIANGLES);<br />
glVertex2f(-0.8, 0.8);<br />
glVertex2f(0.8, 0.8);<br />
glVertex2f(0.0, -0.8);<br />
glEnd();<br />
cgGLDisableProfile(cg_vertex_profile);<br />
checkForCgError("disabling vertex profile");<br />
cgGLDisableProfile(cg_fragment_profile);<br />
checkForCgError("disabling fragment profile");