C++ 从';GLvoid(*)(又名void(*)()}';至';void(uuu属性uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu;

C++ 从';GLvoid(*)(又名void(*)()}';至';void(uuu属性uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu;,c++,opengl,C++,Opengl,我无法使用visual studio 2012编译程序,甚至无法使用代码块编译程序。我遇到以下错误: error C2664: 'glutTimerFunc' : impossible to convert parameter 2 of 'GLvoid (__cdecl >*)(void)' into 'void (__cdecl *)(int)' in both lignes 132, 240, 267 error C2146: syntaxe error : absence of';'

我无法使用visual studio 2012编译程序,甚至无法使用代码块编译程序。我遇到以下错误:

error C2664: 'glutTimerFunc' : impossible to convert parameter 2 of 'GLvoid (__cdecl >*)(void)' into 'void (__cdecl *)(int)'
in both lignes 132, 240, 267
error C2146: syntaxe error : absence of';' before identifier 'qobj' in ligne 274
代码如下:

/*****************************************************************************
File: TD5-avatar-modele.c

Informatique Graphique IG1
Master d'informatique
Christian Jacquemin, Université Paris 11

Copyright (C) 2004 University Paris 11 
This file is provided without support, instruction, or implied
warranty of any kind.  University Paris 11 makes no guarantee of its
fitness for a particular purpose and is not liable under any
circumstances for any damages or loss whatsoever arising from the use
or inability to use this file or items derived from it.
******************************************************************************/

#include <stdio.h>      
#include <stdlib.h>     
#include <math.h>
#include <GL/glut.h>    
#include <tiff/tiffio.h>     /* Sam Leffler's libtiff library. */
int writetiff(char *filename, char *description,
          int x, int y, int width, int height, int compression);

#define    windowWidth 300
#define    windowHeight 300

#define RED   0
#define GREEN 0
#define BLUE  0
#define ALPHA 1

#define true  1
#define false 0

#define KEY_ESC 27

#define PI 3.1415926535898

#define position_Ini                   -60.0

float t = 0.f;
float delta = 10.f;
float k = 0.001f;
float K = 0.002f;
int IdleRunning = true;
int TraceEcran = false;
int RangFichierStockage = 0;
float position = position_Ini;

int  Ma_Tete;
int  Mon_Tronc;
int  Mon_Bras;
int  Mon_AvantBras;
int  Ma_Cuisse;
int  Mon_Mollet;
int  Mon_Repere;

enum lateralite{ Gauche = 0, Droit };

float angle_Bras[2];
float angle_AvantBras[2];
float angle_Cuisse[2];
float angle_Mollet[2];

float angle_Bras_Ini[2] = {-30.0, 15.0};
float angle_AvantBras_Ini[2] = {0.0, 15.0};
float angle_Cuisse_Ini[2] = {20.0, -20.0};
float angle_Mollet_Ini[2] = {0.0, -20.0};

float amplitude_Bras;
float amplitude_AvantBras;
float amplitude_Cuisse;
float amplitude_Mollet;
float med_Bras;
float med_AvantBras;
float med_Cuisse;
float med_Mollet;

static GLfloat mat_specular[] = { 1.0 , 1.0 , 1.0 , 1.0 };
static GLfloat mat_ambientanddiffuse[] = { 0.4, 0.4 , 0.0 , 1.0 };
static GLfloat mat_shininess[] = { 20.0};

static GLfloat light_position0[] = { 15.0 , 15.0 , 15.0 , 0.0 };
static GLfloat light_position1[] = { 15.0 , 15.0 , -15.0 , 0.0 };

static GLfloat ambient_light0[] = { 0.0 , 0.0 , 0.0 , 0.0 };
static GLfloat diffuse_light0[] = { 0.7 , 0.7 , 0.7 , 1.0 };
static GLfloat specular_light0[] = { 0.1 , 0.1 , 0.1 , 0.1 };

static GLfloat ambient_light1[] = { 0.50 , 0.50 , 0.50 , 1.0 };
static GLfloat diffuse_light1[] = { 0.5 , 1.0 , 1.0 , 1.0 };
static GLfloat specular_light1[] = { 0.5 , 1.0 , 1.0 , 1.0 };

int Step = 0;
int latence =4;

void init_scene();
void render_scene();
void init_angles();
GLvoid initGL();
GLvoid window_display();
GLvoid window_reshape(GLsizei width, GLsizei height); 
GLvoid window_key(unsigned char key, int x, int y); 
GLvoid window_timer(); 
void Faire_Composantes();
void Dessine_Repere();

int main(int argc, char **argv) 
{  
  // initialisation  des paramètres de GLUT en fonction
  // des arguments sur la ligne de commande
  glutInit(&argc, argv);
  glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH);

  // définition et création de la fenêtre graphique
  glutInitWindowSize(windowWidth,windowHeight);
  glutInitWindowPosition(0, 0);
  glutCreateWindow("Avatar animé");

  // initialisation de OpenGL et de la scène
  initGL();  
  init_scene();

  // choix des procédures de callback pour 
  // le tracé graphique
  glutDisplayFunc(&window_display);
  // le redimensionnement de la fenêtre
  glutReshapeFunc(&window_reshape);
  // la gestion des événements clavier
  glutKeyboardFunc(&window_key);
  // fonction appelée régulièrement entre deux gestions d´événements
  glutTimerFunc(latence,&window_timer,Step);

  // la boucle prinicipale de gestion des événements utilisateur
  glutMainLoop();  

  return 1;
}

// initialisation du fond de la fenêtre graphique : noir opaque

GLvoid initGL() 
{
  // initialisation de l´éclairement

  // définition de deux source lumineuses
  glLightfv(GL_LIGHT0, GL_AMBIENT, ambient_light0);
  glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse_light0);
  glLightfv(GL_LIGHT0, GL_SPECULAR, specular_light0);
  glLightfv(GL_LIGHT1, GL_AMBIENT, ambient_light1);
  glLightfv(GL_LIGHT1, GL_DIFFUSE, diffuse_light1);
  glLightfv(GL_LIGHT1, GL_SPECULAR, specular_light1);
  glLightfv(GL_LIGHT0, GL_POSITION, light_position0);
  glLightfv(GL_LIGHT1, GL_POSITION, light_position1);

  // activation de l´éclairement
  glEnable(GL_LIGHTING);
  glEnable(GL_LIGHT0);
  glEnable(GL_LIGHT1);

  // propriétés matérielles des objets
  // glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, mat_ambientanddiffuse);
  // glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);
  // glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess);
  glShadeModel( GL_SMOOTH );
  glEnable(GL_COLOR_MATERIAL);

  // initialisation du fond
  glClearColor(RED, GREEN, BLUE, ALPHA);        
  // z-buffer
  glEnable(GL_DEPTH_TEST);
}

void init_scene()
{
  // initialise des display lists des composantes cylindriques du corps
  Faire_Composantes();

  amplitude_Bras 
    = .5 * (angle_Bras_Ini[ Droit ] - angle_Bras_Ini[ Gauche ]);
  amplitude_AvantBras 
    = .5 * (angle_AvantBras_Ini[ Droit ] - angle_AvantBras_Ini[ Gauche ]);
  amplitude_Cuisse 
    = .5 * (angle_Cuisse_Ini[ Droit ] - angle_Cuisse_Ini[ Gauche ]);
  amplitude_Mollet 
    = .5 * (angle_Mollet_Ini[ Droit ] - angle_Mollet_Ini[ Gauche ]);
  med_Bras 
    = .5 * (angle_Bras_Ini[ Droit ] + angle_Bras_Ini[ Gauche ]);
  med_AvantBras 
    = .5 * (angle_AvantBras_Ini[ Droit ] + angle_AvantBras_Ini[ Gauche ]);
  med_Cuisse 
    = .5 * (angle_Cuisse_Ini[ Droit ] + angle_Cuisse_Ini[ Gauche ]);
  med_Mollet 
    = .5 * (angle_Mollet_Ini[ Droit ] + angle_Mollet_Ini[ Gauche ]);
}

// fonction de call-back pour l´affichage dans la fenêtre

GLvoid window_display()
{
  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  glLoadIdentity();

  render_scene();

  // trace la scène grapnique qui vient juste d'être définie
  glFlush();
}

// fonction de call-back pour le redimensionnement de la fenêtre

GLvoid window_reshape(GLsizei width, GLsizei height)
{  
  glViewport(0, 0, width, height);

  glMatrixMode(GL_PROJECTION);
  glLoadIdentity();
  glOrtho(-20, 20, -20, 20, -1000, 1000);
  // glFrustum(-20, 20, -20, 20, 10, 1000);
  // glScalef(10, 10, 10);

  // toutes les transformations suivantes s´appliquent au modèle de vue 
  glMatrixMode(GL_MODELVIEW);
}

// fonction de call-back pour la gestion des événements clavier

GLvoid window_key(unsigned char key, int x, int y) 
{  
  switch (key) {    
  case KEY_ESC:  
    exit(1);                    
    break; 
  case ' ':  
    if (IdleRunning) {
      glutTimerFunc(latence,NULL,Step);
      IdleRunning = false;
    } 
    else {
      glutTimerFunc(latence,&window_timer,Step);
      IdleRunning = true;
    }
    break; 
  case '+':  
    delta *= 1.01;
    break; 
  case '-':  
    delta /= 1.01;
    break; 
  default:
    printf ("La touche %d n´est pas active.\n", key);
    break;
  }     
}

// fonction de call-back appelée régulièrement

GLvoid window_timer() 
{
  // On effecture une variation des angles de chaque membre
  // de l'amplitude associée et de la position médiane
  // ********* A FAIRE **************

  // On déplace la position de l'avatar pour qu'il avance
  // ********* A FAIRE **************

  glutTimerFunc(latence,&window_timer,++Step);

  glutPostRedisplay();
}

// un cylindre
void Faire_Composantes() {
  GLUquadricObj* GLAPIENTRY qobj;

  // attribution des indentificateurs de display lists
  Ma_Tete =  glGenLists(6);
  Mon_Tronc = Ma_Tete + 1;
  Mon_Bras = Ma_Tete + 2;
  Mon_AvantBras = Ma_Tete + 3;
  Ma_Cuisse = Ma_Tete + 4;
  Mon_Mollet = Ma_Tete + 5;

  // compilation de la display list de la sphère
  // ********* A FAIRE **************

  // allocation d´une description de quadrique
  qobj = gluNewQuadric();
  // la quadrique est pleine 
  gluQuadricDrawStyle(qobj, GLU_FILL); 
  // les ombrages, s´il y en a, sont doux
  gluQuadricNormals(qobj, GLU_SMOOTH);

  // compilation des display lists des cylindres
  // ********* A FAIRE **************
}

void  Dessine_Repere() {
  glNewList(Mon_Repere, GL_COMPILE);
    glBegin(GL_LINES);
      glColor3f(1.0, 0.0, 0.0);
      glVertex3f(-10 , 0 , 0);
      glVertex3f(10 , 0 , 0);
    glEnd();
    glBegin(GL_LINES);
      glColor3f(0.0, 1.0, 0.0);
      glVertex3f(0 , -10 , 0);
      glVertex3f(0 , 10 , 0);
    glEnd();
    glPointSize( 10.0 );
    glBegin(GL_POINTS);
      glColor3f(1.0, 1.0, 1.0);
      glVertex3f(10.0 , 0 , 0);
    glEnd();
    glBegin(GL_POINTS);
      glColor3f(1.0, 1.0, 1.0);
      glVertex3f(0 , 10.0 , 0);
    glEnd();
  glEndList();
}

void render_scene()
{
  // rotation de 90 degres autour de Ox pour mettre l'axe Oz 
  // vertical comme sur la figure
  glRotatef(-90, 1, 0, 0);

  // rotation de 160 degres autour de l'axe Oz pour faire
  // avancer l'avatar vers le spectateur
  glRotatef(-160, 0, 0, 1);

  // rotation de 25 degres autour de la bissectrice de $Oy$ pour
  // voir la figure en perspective
  // glRotatef(25, 0, 1, 0);

  // déplacement horizontal selon l´axe Oy pour donner 
  // une impression de déplacement horizontal accompagnant
  // la marche
  glTranslatef( 0, position, 0);

  // tracé du tronc, aucune transformation n´est
  // requise
  glColor3f(1.0, 1.0, 1.0);
  glCallList(Mon_Tronc);

  // tracé de la tête avec une translation positive
  // selon Oz pour la placer au-dessus du tronc
  // les appels à glPushMatrix et glPopMatrix servent 
  // à sauvegarder et restaurer le contexte graphique
  // ********* A FAIRE **************

  // tracé de la cuisse droite avec une translation vers
  // la droite et une rotation de 180° autour de Ox
  // pour l´orienter vers le bas
  // ********* A FAIRE **************

  // pour tracer le mollet, on reste dans le même
  // contexte graphique et on translate de
  // +5 selon Oz afin de mettre le repère au niveau
  // du genou
  // ********* A FAIRE **************

  // cuisse et mollet gauches
  // seule la translation initiale change
  // ********* A FAIRE **************

  // tracé du bras droit avec une translation vers
  // la droite et vers le haut composée avec une 
  // rotation de 180° autour de Ox pour l´orienter
  // vers le bas
  // ********* A FAIRE **************

  // pour tracer l´avant-bras, on reste dans le même
  // contexte graphique et on translate de
  // +5 selon Oz afin de mettre le repère au niveau
  // du coude
  // ********* A FAIRE **************

  // bras et avant-bras gauches
  // seule la translation initiale change
  // ********* A FAIRE **************

  // permutation des buffers lorsque le tracé est achevé
  glutSwapBuffers();
}
/*****************************************************************************
文件:TD5 avatar modele.c
信息图形IG1
信息大师
克里斯蒂安·杰奎明,巴黎大学11
版权所有(C)2004巴黎大学11
提供此文件时不提供支持、说明或暗示
任何形式的担保。巴黎第11大学不保证其
适用于特定目的,且根据任何
因使用而产生的任何损害或损失的情况
或无法使用此文件或从中派生的项。
******************************************************************************/
#包括
#包括
#包括
#包括
#包括/*Sam Leffler的libtiff库*/
int writetiff(字符*文件名,字符*说明,
整数x,整数y,整数宽度,整数高度,整数压缩);
#定义窗口宽度300
#定义窗口高度300
#定义红色0
#定义绿色0
#定义蓝色0
#定义ALPHA 1
#定义真1
#定义false 0
#定义键_esc27
#定义PI 3.1415926535898
#定义位置_Ini-60.0
浮点数t=0.f;
浮动增量=10.f;
浮球k=0.001f;
浮球K=0.002f;
int IdleRunning=true;
int-TraceEcran=false;
int RangFichierStockage=0;
浮动位置=位置_Ini;
国际博物馆;
国际电子公司;
int MONU Bras;
国际先锋品牌;
国际马乌街;
国际蒙努莫莱特;
国际音乐汇演;
enum侧向岩{Gauche=0,Droit};
浮动角度_Bras[2];
浮动角度_前卫[2];
浮动角度_Cuisse[2];
浮动角_Mollet[2];
浮动角度_Bras_Ini[2]={-30.0,15.0};
浮动角度_AvantBras_Ini[2]={0.0,15.0};
浮动角度_Cuisse_Ini[2]={20.0,-20.0};
浮动角度_Mollet_Ini[2]={0.0,-20.0};
浮动幅度;
浮动幅度_前卫;
浮动幅度;
浮动幅度_-Mollet;
浮动式胸罩;
浮动med_前卫胸罩;
漂浮的地中海;
浮萍;
静态GLfloat mat_镜面反射[]={1.0,1.0,1.0};
静态GLfloat mat_ambientanddiffuse[]={0.4,0.4,0.0,1.0};
静态光泽度[]={20.0};
静态GLfloat灯位置0[]={15.0,15.0,15.0,0.0};
静态GLfloat灯位置1[]={15.0,15.0,-15.0,0.0};
静态GLfloat环境_light0[]={0.0,0.0,0.0,0.0};
静态GLfloat漫反射_light0[]={0.7,0.7,0.7,1.0};
静态GLfloat镜面_light0[]={0.1,0.1,0.1,0.1};
静态GLfloat环境光1[]={0.50,0.50,1.0};
静态GLfloat漫反射_light1[]={0.5,1.0,1.0,1.0};
静态GLfloat镜面反射光1[]={0.5,1.0,1.0,1.0};
int步长=0;
延迟时间=4;
void init_scene();
void render_scene();
void init_angles();
GLvoid initGL();
GLvoid window_display();
GLvoid窗口形状(GLsizei宽度、GLsizei高度);
GLvoid窗口_键(无符号字符键,整数x,整数y);
GLvoid窗口_计时器();
无效的公平成分();
无效,请保留();
int main(int argc,字符**argv)
{  
//GLUT en FONTION参数初始化
//命令之林上的辩论
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_深度);
//图形的定义和描述
glutInitWindowSize(窗口宽度、窗口高度);
glutInitWindowPosition(0,0);
动画窗口(“阿凡达动画”);
//OpenGL和scène的初始化
initGL();
初始化场景();
//浇灌程序选择
//勒特雷克笔迹
glutDisplayFunc(窗口显示和窗口显示);
//拉芬特酒店
GLUTREGROUPEFUNC(窗口整形和窗口整形);
//钢琴演奏者的手势
glutKeyboardFunc(窗口和U键);
//第二次上诉基金会
glutTimerFunc(延迟和窗口计时器,步进);
//使用设备的管理费用
glutMainLoop();
返回1;
}
//字体的初始化:黑色不透明
GLvoid initGL()
{
//l'éclairement初始化
//氘源发光的定义
glLightfv(GL_LIGHT0、GL_AMBIENT、AMBIENT_LIGHT0);
glLightfv(GL_LIGHT0、GL_DIFFUSE、DIFFUSE_LIGHT0);
glLightfv(GL_LIGHT0、GL_镜面反射、镜面反射_LIGHT0);
glLightfv(GL_LIGHT1、GL_AMBIENT、AMBIENT_LIGHT1);
glLightfv(GL_LIGHT1、GL_DIFFUSE、DIFFUSE_LIGHT1);
glLightfv(GL_LIGHT1、GL_镜面反射、镜面反射_LIGHT1);
glLightfv(GLU灯0,GLU位置,灯0位置);
glLightfv(GLU灯1、GLU位置、灯位置1);
//l′éclairement活化
glEnable(德国劳埃德大学照明);
glEnable(GL_LIGHT0);
glEnable(Glu LIGHT1);
//物体材料属性
//GLMATERIALV(GL_前部、GL_环境_和_漫反射、mat_环境和漫反射);
//GLMATERIALV(GL_前部、GL_镜面反射、mat_镜面反射);
//GLMATERIALV(GL_正面、GL_反光、mat_反光);
glShadeModel(GL_平滑);
glEnable(GL_颜色_材料);
//首字母缩写du found
glClearColor(红色、绿色、蓝色、ALPHA);
//z缓冲区
glEnable(GLU深度试验);
}
void init_场景()
{
//初始化部队圆柱组件的显示列表
Faire_Composantes();
振幅文胸
=.5*(角度[Droit]-角度[Gauche]);
前卫胸罩
=.5*(angle_AvantBras_Ini[Droit]-angle_AvantBras_Ini[Gauche]);
振幅曲线
=.5*(角度[Droit]-角度[Gauche]);
波峰
=0.5*(角度[法]-角度[法];
胸罩
=0.5*(角度[Droit]+角度[Gauche]);
med_AvantBras
=.5*(angle_AvantBras_Ini[Droit]+angle_AvantBras_Ini[Gauche]);
梅德库伊斯
=0.5*(角度[Droit]+角度[Gauche]);
梅德穆莱特
=.5*(斜角[Droit]+斜角[Gauche]);
}
//召回基金会
GLvoid window_timer(int msec) {

}

glutTimerFunc(latence,&window_timer,Step);