Exemple #1
0
Point3Df Scene :: GetCameraPosition() const
{
    float cos_teta = cos( mCameraPosition.mTeta );
    return Point3Df( cos_teta * sin( mCameraPosition.mAlpha ) * CAMERA_RADIUS,
                     sin( mCameraPosition.mTeta ) * CAMERA_RADIUS,
                     cos_teta * cos( mCameraPosition.mAlpha ) * CAMERA_RADIUS );
}
Exemple #2
0
TriangView::TriangView(QWidget *parent):
    QGLWidget(parent),
    xRot(0), yRot(0), zRot(0), scale(.8)
{
#ifdef DRAW_CUBE
    /* Drawing a cube:
     *
     *    6-------7                  diagonals:
     *   /|      /|
     *  4-------5 |     z    y       0-3 0-5 0-6 3-5 3-6 5-6
     *  | |     | |     |   /
     *  | 2-----|-3     |  /
     *  |/      |/      | /
     *  0-------1       |/______ x
     *
     */

    for (unsigned i = 0; i < 8; ++i) {
        points.push_back(Point3Df(
            (i & 1) ? .5f : -.5f,
            (i & 2) ? .5f : -.5f,
            (i & 4) ? .5f : -.5f
        ));
    }

    triangles.push_back(Triangle3Df(0, 1, 3, 0.f, 0.f, -1.f));
    triangles.push_back(Triangle3Df(0, 2, 3, 0.f, 0.f, -1.f));
    triangles.push_back(Triangle3Df(0, 1, 5, 0.f, -1.f, 0.f));
    triangles.push_back(Triangle3Df(0, 4, 5, 0.f, -1.f, 0.f));
    triangles.push_back(Triangle3Df(0, 2, 6, -1.f, 0.f, 0.f));
    triangles.push_back(Triangle3Df(0, 4, 6, -1.f, 0.f, 0.f));
    triangles.push_back(Triangle3Df(3, 1, 5, 1.f, 0.f, 0.f));
    triangles.push_back(Triangle3Df(3, 7, 5, 1.f, 0.f, 0.f));
    triangles.push_back(Triangle3Df(3, 2, 6, 0.f, 1.f, 0.f));
    triangles.push_back(Triangle3Df(3, 7, 6, 0.f, 1.f, 0.f));
    triangles.push_back(Triangle3Df(5, 4, 6, 0.f, 0.f, 1.f));
    triangles.push_back(Triangle3Df(5, 7, 6, 0.f, 0.f, 1.f));
#else
    fillVectors(points, triangles);
#endif
}
Exemple #3
0
void Scene :: paintGL()
{
    Point3Df camera_positon;
    Point3Df camera_directon;
    Point3Df right_vec_to_dir;

    camera_positon     = GetCameraPosition();
    camera_directon    = Geometry :: Normalize( -1.0f * camera_positon );
    camera_positon     = camera_positon + mCameraShift;
    right_vec_to_dir   = Geometry :: VectorMul( camera_directon, Point3Df( 0.0f, 1.0f, 0.0f ) );

    glViewport( 0, 0, mWidth, mHeight );

    if ( mIsStereo )
    {
	right_vec_to_dir    = ( mFrustumEyeSep / 2.0f ) * right_vec_to_dir;


        glMatrixMode( GL_PROJECTION );
        glLoadIdentity();

        mFrustumLeft  = -mRatio * mFrustumHalfWidth - 0.5 * mFrustumEyeSep * mFrustumNearPlane / mFrustumFocalLength;
        mFrustumRight =  mRatio * mFrustumHalfWidth - 0.5 * mFrustumEyeSep * mFrustumNearPlane / mFrustumFocalLength;

        glFrustum(  mFrustumLeft, mFrustumRight,
                   -mFrustumHalfWidth * mRatio, mFrustumHalfWidth * mRatio,
                    mFrustumNearPlane, mFrustumFarPlane );

        glMatrixMode( GL_MODELVIEW );
        glDrawBuffer( GL_BACK_RIGHT );
        glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
        glLoadIdentity();
        gluLookAt( camera_positon.mX + right_vec_to_dir.mX,
                   camera_positon.mY + right_vec_to_dir.mY,
                   camera_positon.mZ + right_vec_to_dir.mZ,
                   camera_positon.mX + right_vec_to_dir.mX + camera_directon.mX,
                   camera_positon.mY + right_vec_to_dir.mY + camera_directon.mY,
                   camera_positon.mZ + right_vec_to_dir.mZ + camera_directon.mZ,
                   0, 1, 0 );
        mpGame -> DrawWorld();
        glLightfv( GL_LIGHT0, GL_POSITION, mpGame -> GetLightPosition() );


	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();

	mFrustumLeft  = -mRatio * mFrustumHalfWidth + 0.5 * mFrustumEyeSep * mFrustumNearPlane / mFrustumFocalLength;
	mFrustumRight =  mRatio * mFrustumHalfWidth + 0.5 * mFrustumEyeSep * mFrustumNearPlane / mFrustumFocalLength;

	glFrustum(  mFrustumLeft, mFrustumRight,
                   -mFrustumHalfWidth * mRatio, mFrustumHalfWidth * mRatio,
                    mFrustumNearPlane, mFrustumFarPlane );

	glMatrixMode( GL_MODELVIEW );
	glDrawBuffer( GL_BACK_LEFT );
        glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
	glLoadIdentity();
	gluLookAt( camera_positon.mX - right_vec_to_dir.mX,
		   camera_positon.mY - right_vec_to_dir.mY,
		   camera_positon.mZ - right_vec_to_dir.mZ,
		   camera_positon.mX - right_vec_to_dir.mX + camera_directon.mX,
		   camera_positon.mY - right_vec_to_dir.mY + camera_directon.mY,
		   camera_positon.mZ - right_vec_to_dir.mZ + camera_directon.mZ,
		   0, 1, 0 );
	mpGame -> DrawWorld();
	glLightfv( GL_LIGHT0, GL_POSITION, mpGame -> GetLightPosition() );
    }
    else
    {
	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();
        glOrtho( -mWidth / 2, mWidth / 2, -mHeight / 2, mHeight / 2, 0, 1000 );
	glMatrixMode( GL_MODELVIEW );
	glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
	glLoadIdentity();
        gluLookAt( camera_positon.mX, camera_positon.mY, camera_positon.mZ,
		   mCameraShift.mX,   mCameraShift.mY,   mCameraShift.mZ,
		   0, 1, 0 );
	mpGame -> DrawWorld();
	glLightfv( GL_LIGHT0, GL_POSITION, mpGame -> GetLightPosition() );
    }

    DrawTextInformation();

    swapBuffers();
}
Exemple #4
0
bool Block :: PointIn( Point3Di aPoint )
{
    return PointIn( Point3Df( aPoint ) );
}
Exemple #5
0
void Block :: Draw( Point3Df aFigPos )
{
    /*
	Вершины куба занумерованы в след. порядке( делим куб на 4 части ):
	1)-,+,- 2)-,+,+ 3)+,+,+ 4)+,+,-
	5)+,-,- 6)+,-,+ 7)-,-,+ 8)-,-,-
    */

    glMaterialfv( GL_FRONT, GL_AMBIENT, mMaterial.GetMaterialForAmbient() );
    glMaterialfv( GL_FRONT, GL_DIFFUSE, mMaterial.GetMaterialForDiffuse() );
    glMaterialfv( GL_FRONT, GL_SPECULAR, mMaterial.GetMaterialForSpecular() );

    //Firts side
    DrawSide(	Point3Df( aFigPos.mX + mPosF.mX + mVerticesF[ 0 ].mX,
                          aFigPos.mY + mPosF.mY + mVerticesF[ 0 ].mY,
                          aFigPos.mZ + mPosF.mZ + mVerticesF[ 0 ].mZ ),

                Point3Df( aFigPos.mX + mPosF.mX + mVerticesF[ 1 ].mX,
                          aFigPos.mY + mPosF.mY + mVerticesF[ 1 ].mY,
                          aFigPos.mZ + mPosF.mZ + mVerticesF[ 1 ].mZ ),

                Point3Df( aFigPos.mX + mPosF.mX + mVerticesF[ 2 ].mX,
                          aFigPos.mY + mPosF.mY + mVerticesF[ 2 ].mY,
                          aFigPos.mZ + mPosF.mZ + mVerticesF[ 2 ].mZ ),

                Point3Df( aFigPos.mX + mPosF.mX + mVerticesF[ 3 ].mX,
                          aFigPos.mY + mPosF.mY + mVerticesF[ 3 ].mY,
                          aFigPos.mZ + mPosF.mZ + mVerticesF[ 3 ].mZ )
            );

    //Second side
    DrawSide(	Point3Df( aFigPos.mX + mPosF.mX + mVerticesF[ 1 ].mX,
                          aFigPos.mY + mPosF.mY + mVerticesF[ 1 ].mY,
                          aFigPos.mZ + mPosF.mZ + mVerticesF[ 1 ].mZ ),

                Point3Df( aFigPos.mX + mPosF.mX + mVerticesF[ 6 ].mX,
                          aFigPos.mY + mPosF.mY + mVerticesF[ 6 ].mY,
                          aFigPos.mZ + mPosF.mZ + mVerticesF[ 6 ].mZ ),

                Point3Df( aFigPos.mX + mPosF.mX + mVerticesF[ 5 ].mX,
                          aFigPos.mY + mPosF.mY + mVerticesF[ 5 ].mY,
                          aFigPos.mZ + mPosF.mZ + mVerticesF[ 5 ].mZ ),

                Point3Df( aFigPos.mX + mPosF.mX + mVerticesF[ 2 ].mX,
                          aFigPos.mY + mPosF.mY + mVerticesF[ 2 ].mY,
                          aFigPos.mZ + mPosF.mZ + mVerticesF[ 2 ].mZ )
            );

    //Third side
    DrawSide(	Point3Df( aFigPos.mX + mPosF.mX + mVerticesF[ 2 ].mX,
                          aFigPos.mY + mPosF.mY + mVerticesF[ 2 ].mY,
                          aFigPos.mZ + mPosF.mZ + mVerticesF[ 2 ].mZ ),

                Point3Df( aFigPos.mX + mPosF.mX + mVerticesF[ 5 ].mX,
                          aFigPos.mY + mPosF.mY + mVerticesF[ 5 ].mY,
                          aFigPos.mZ + mPosF.mZ + mVerticesF[ 5 ].mZ ),

                Point3Df( aFigPos.mX + mPosF.mX + mVerticesF[ 4 ].mX,
                          aFigPos.mY + mPosF.mY + mVerticesF[ 4 ].mY,
                          aFigPos.mZ + mPosF.mZ + mVerticesF[ 4 ].mZ ),

                Point3Df( aFigPos.mX + mPosF.mX + mVerticesF[ 3 ].mX,
                          aFigPos.mY + mPosF.mY + mVerticesF[ 3 ].mY,
                          aFigPos.mZ + mPosF.mZ + mVerticesF[ 3 ].mZ )
            );

    //Fourth side
    DrawSide(	Point3Df( aFigPos.mX + mPosF.mX + mVerticesF[ 6 ].mX,
                          aFigPos.mY + mPosF.mY + mVerticesF[ 6 ].mY,
                          aFigPos.mZ + mPosF.mZ + mVerticesF[ 6 ].mZ ),

                Point3Df( aFigPos.mX + mPosF.mX + mVerticesF[ 7 ].mX,
                          aFigPos.mY + mPosF.mY + mVerticesF[ 7 ].mY,
                          aFigPos.mZ + mPosF.mZ + mVerticesF[ 7 ].mZ ),

                Point3Df( aFigPos.mX + mPosF.mX + mVerticesF[ 4 ].mX,
                          aFigPos.mY + mPosF.mY + mVerticesF[ 4 ].mY,
                          aFigPos.mZ + mPosF.mZ + mVerticesF[ 4 ].mZ ),

                Point3Df( aFigPos.mX + mPosF.mX + mVerticesF[ 5 ].mX,
                          aFigPos.mY + mPosF.mY + mVerticesF[ 5 ].mY,
                          aFigPos.mZ + mPosF.mZ + mVerticesF[ 5 ].mZ )
            );

    //Fifth side
    DrawSide(	Point3Df( aFigPos.mX + mPosF.mX + mVerticesF[ 0 ].mX,
                          aFigPos.mY + mPosF.mY + mVerticesF[ 0 ].mY,
                          aFigPos.mZ + mPosF.mZ + mVerticesF[ 0 ].mZ ),

                Point3Df( aFigPos.mX + mPosF.mX + mVerticesF[ 7 ].mX,
                          aFigPos.mY + mPosF.mY + mVerticesF[ 7 ].mY,
                          aFigPos.mZ + mPosF.mZ + mVerticesF[ 7 ].mZ ),

                Point3Df( aFigPos.mX + mPosF.mX + mVerticesF[ 6 ].mX,
                          aFigPos.mY + mPosF.mY + mVerticesF[ 6 ].mY,
                          aFigPos.mZ + mPosF.mZ + mVerticesF[ 6 ].mZ ),

                Point3Df( aFigPos.mX + mPosF.mX + mVerticesF[ 1 ].mX,
                          aFigPos.mY + mPosF.mY + mVerticesF[ 1 ].mY,
                          aFigPos.mZ + mPosF.mZ + mVerticesF[ 1 ].mZ )
            );

    //Sixth side
    DrawSide(	Point3Df( aFigPos.mX + mPosF.mX + mVerticesF[ 3 ].mX,
                          aFigPos.mY + mPosF.mY + mVerticesF[ 3 ].mY,
                          aFigPos.mZ + mPosF.mZ + mVerticesF[ 3 ].mZ ),

                Point3Df( aFigPos.mX + mPosF.mX + mVerticesF[ 4 ].mX,
                          aFigPos.mY + mPosF.mY + mVerticesF[ 4 ].mY,
                          aFigPos.mZ + mPosF.mZ + mVerticesF[ 4 ].mZ ),

                Point3Df( aFigPos.mX + mPosF.mX + mVerticesF[ 7 ].mX,
                          aFigPos.mY + mPosF.mY + mVerticesF[ 7 ].mY,
                          aFigPos.mZ + mPosF.mZ + mVerticesF[ 7 ].mZ ),

                Point3Df( aFigPos.mX + mPosF.mX + mVerticesF[ 0 ].mX,
                          aFigPos.mY + mPosF.mY + mVerticesF[ 0 ].mY,
                          aFigPos.mZ + mPosF.mZ + mVerticesF[ 0 ].mZ )
            );
}
Exemple #6
0
void Block :: Draw()
{
    Draw( Point3Df( 0.0f, 0.0f, 0.0f ) );
}