2012-12-20 21 views
-2

我正在創建一個名爲Square的類,它用於計算x,y,z位置,以創建4個頂點以在OpenGL中渲染一個正方形。OpenGL/C++併發症。 Deconstructor/Constructer Var Error

錯誤

8  [Error] expected constructor, destructor, or type conversion before '.' token 
8  [Error] expected `,' or `;' before '.' token 
9  [Error] expected constructor, destructor, or type conversion before '.' token 
9  [Error] expected `,' or `;' before '.' token 

這裏是main.cpp中

#include <GL/glut.h> 
#include <stdarg.h> 
#include <stdio.h> 
#include <stdlib.h> 
#include "Square2D.h" 
SquareD Love; 
Love.SetOrigin(0.0f,0.0f,0.0f); 
Love.CalcVert(2.0f); 

void Display(void) 
{ 
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
glMatrixMode(GL_MODELVIEW); //Switch to the drawing perspective 
glLoadIdentity(); //Reset the drawing perspective 
Love.RenderSquare(); 
glTranslatef(0.0f,0.0f,-5.0f); 
glutSwapBuffers(); 
}; 

void reshape(int w, int h) 
{ 
glViewport(0, 0, w, h); 
glMatrixMode(GL_PROJECTION); 
glLoadIdentity(); //Reset the camera 
gluPerspective(45.0,(double)w/(double)h,1.0,200.0); 
} 
int main(int argc, char** argv) 
{ 
//Init 
glutInit(&argc, argv); 
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH); 
//Create Window 
glutInitWindowSize(640,480); 
    glutInitWindowPosition(40,40); 
    glutCreateWindow("OpenGLUT Shapes"); 
//OpenGL Enables for effects 
glEnable(GL_DEPTH_TEST); 
    glEnable(GL_COLOR_MATERIAL); 
//Functions 
glutDisplayFunc(Display); 
glutReshapeFunc(reshape); 
//Main OpenGL loop 
glutMainLoop(); 
//Return success//C++ requirement 
return 0; 
} 

這裏是平方類 頭文件

#ifndef XYZSQUARE_H 
#define XYZSQUARE_H 
// No description 
class SquareD 
{ 
public: 
    // class constructor 
    SquareD(); 
    // class destructor 
    ~SquareD(); 

    void SetOrigin(float X,float Y,float Z); 
    void RenderSquare(); 
    void CalcVert(float lenght); 

    private: 
    float TL_X,TL_Y,TL_Z; 
    float TR_X,TR_Y,TR_Z; 
    float BL_X,BL_Y,BL_Z; 
    float BR_X,BR_Y,BR_Z; 
    float Lenght; 
    float OriginX,OriginY,OriginZ; 
    }; 
    #endif // SQUARE_H 

爲平方類cpp文件

#include <GL/glut.h> 
#include "Square2D.h" // class's header file 
// class constructor 
SquareD::SquareD() 
{ 
// insert your code here 
} 
// class destructor 
SquareD::~SquareD() 
{ 
// insert your code here 
} 
void SquareD::SetOrigin(float X,float Y,float Z) 
{ 
    OriginX=X;//X 
    OriginY=Y;//Y 
    OriginZ=Z;//Z 
}; 
void SquareD::CalcVert(float lenght) 
{ 
Lenght=lenght/2; 
//Left Front 
TL_X =OriginX-Lenght;//X 
TL_Y =OriginY;  //Y 
TL_Z =OriginZ+Lenght;//Z 
//Right Front 
TR_X =OriginX+Lenght;//X 
TR_Y =OriginY;  //Y 
TR_Z =OriginZ+Lenght;//Z 
//Left Back 
BL_X =OriginX-Lenght;//X 
BL_Y =OriginY;  //Y 
BL_Z =OriginZ-Lenght;//Z 
//Right Back 
BR_X =OriginX+Lenght;//X 
BR_Y=OriginY;  //Y 
BR_Z=OriginZ-Lenght;//Z 
}; 
void SquareD::RenderSquare() 
{ 
    glVertex3f(TL_X,TL_Y,TL_Z); 
glVertex3f(TR_X,TR_Y,TR_Z); 
glVertex3f(BL_X,BL_Y,BL_Z); 
glVertex3f(BR_X,BR_Y,BR_Z); 
}; 

什麼是導致錯誤,爲什麼?

+1

你的方法是工程矯枉過正。也許對學習東西很有幫助,但肯定不是你想要在一個認真的程序中想要的東西。 – datenwolf

回答

1

你的代碼有幾個問題。

首先,你不能調用那樣的功能(超出上下文)。如果調用在主要的功能,那麼它會工作:

int main() 
{ 
    Love.SetOrigin(0.0f,0.0f,0.0f); 
    Love.CalcVert(2.0f); 
    // rest of code 
    // ... 
} 

其次,你需要調用glBegin/glEnd渲染時:

void SquareD::RenderSquare() 
{ 
    glBegin(GL_QUADS); 
    glVertex3f(TL_X,TL_Y,TL_Z); 
    glVertex3f(TR_X,TR_Y,TR_Z); 
    glVertex3f(BL_X,BL_Y,BL_Z); 
    glVertex3f(BR_X,BR_Y,BR_Z); 
    glEnd(); 
}; 

如果你正確地計算出你的頂點,如果設置視圖端口正確,並且您正確設置了其他位置,您應該看到一個正方形。