Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Мультимедия, OpenGL/DirectX > Неясность с удалением скрытых поверхностей


Автор: Math7244 17.2.2008, 14:17
Код

#include "stdafx.h"
#include "Sample.h"



// Drawing green square
void GreenSquare()
{
    glColor3f(0.0, 1.0, 0.0);
    glBegin(GL_QUADS);
        glVertex3f( 0.25,  0.25, -0.4);
        glVertex3f(-0.25,  0.25, -0.4);
        glVertex3f(-0.25, -0.25, -0.4);
        glVertex3f( 0.25, -0.25, -0.4); 
    glEnd();
}



// Drawing red square
void RedSquare()
{
    glColor3f(1.0, 0.0, 0.0);
    glBegin(GL_QUADS);
        glVertex3f( 0.5,  0.5, -0.5);
        glVertex3f(-0.5,  0.5, -0.5);
        glVertex3f(-0.5, -0.5, -0.5);
        glVertex3f( 0.5, -0.5, -0.5); 
    glEnd();
}



// Making necessary preparations
void InitScene()
{
    glClearColor(0.0, 0.0, 1.0, 0.0);
}



// Displaying the scene
void OnDisplay()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);


    glEnable(GL_DEPTH_TEST);
    GreenSquare();
    RedSquare();
    glDisable(GL_DEPTH_TEST);


    glFlush();
}



// Application entry point
int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
{
    glutInit(&nCmdShow, (char **) &lpCmdLine);
    glutInitDisplayMode(GLUT_DEPTH | GLUT_SINGLE | GLUT_RGBA);
    glutInitWindowSize(600, 600);
    glutInitWindowPosition(0, 0);
    glutCreateWindow("OpenGL/GLUT demonstration");
    InitScene();
    glutDisplayFunc(OnDisplay);
    glutMainLoop();

    return 0;
}

Ведь камера по умолчанию находится в центре координат и смотрит в сторону отрицательной оси Z.
И в тоже время из-за координаты Z зеленый квадрат лежит ближе к камере, чем красный. Значит он должен заслонять кусок красного квадрата. А на экране я вижу только лишь красный квадрат. Могли бы вы обьяснить в чем проблема? Спасибо.  smile 

Автор: HumanAPI 17.2.2008, 21:35
Настрой матрицы проекции и вида.
Код

    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluPerspective(45.0f, (GLfloat)rcCurrentWorkArea.right / 
        (GLfloat)rcCurrentWorkArea.bottom, 1.0f, 100.0f);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity(); 

 (взял из соседнего поста)

да не забывай  буфер переключать glutSwapBuffers();

Автор: Math7244 18.2.2008, 19:15
Спасибо за помощь!  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)