为什么茶壶不显示? OpenGL的

时间:2015-12-24 06:22:33

标签: opengl glut

这是我设置透视视图卷的代码。矩形显示正确。

我现在要在我的场景中添加一个茶壶,所以我在绘制矩形后添加一条绘制茶壶的线条。但是没有显示茶壶。

我犯了什么错误?我的观点和茶壶有什么问题?

GLint winWidth = 600, winHeight = 600;   //  Initial display-window size.

GLfloat x0 = 50.0, y0 = 50.0, z0 = 50.0;  //  Viewing-coordinate origin.
GLfloat xref = 50.0, yref = 50.0, zref = 0.0;  //  Look-at point.
GLfloat Vx = 0.0, Vy = 1.0, Vz = 0.0;          //  View-up vector.

/*  Set coordinate limits for the clipping window:  */
//GLfloat xwMin = -40.0, ywMin = -60.0, xwMax = 40.0, ywMax = 60.0;
GLfloat xwMin = -100.0, ywMin = -100.0, xwMax = 100.0, ywMax = 100.0;

/*  Set positions for near and far clipping planes:  */
GLfloat dnear = 25.0, dfar = 125.0;

void init (void)
{
    glClearColor (1.0, 1.0, 1.0, 0.0);

    glMatrixMode (GL_MODELVIEW);
    glLoadIdentity();
    gluLookAt (x0, y0, z0, xref, yref, zref, Vx, Vy, Vz);
    printf("look at orign:%.0f %.0f %.0f, pref: %.0f %.0f %.0f\n",x0, y0, z0, xref, yref, zref );

    glMatrixMode (GL_PROJECTION);
    glLoadIdentity();
    glFrustum (xwMin, xwMax, ywMin, ywMax, dnear, dfar);
}

void displayFcn (void)
{
    init ( );
    glClear (GL_COLOR_BUFFER_BIT);

    /*  Set parameters for a square fill area.  */
    glColor3f (0.0, 1.0, 0.0);         //  Set fill color to green.
    //glPolygonMode (GL_FRONT, GL_FILL);
    glPolygonMode(GL_FRONT, GL_LINE);
    glPolygonMode (GL_BACK, GL_LINE);  //  Wire-frame back face.
    glBegin (GL_QUADS);
    glVertex3f (0.0, 0.0, 0.0);
    glVertex3f (100.0, 0.0, 0.0);
    glVertex3f (100.0, 100.0, 0.0);
    glVertex3f (0.0, 100.0, 0.0);
    glEnd ( );
    glutSolidTeapot(50.9);

    glFlush ( );
}

void reshapeFcn (GLint newWidth, GLint newHeight)
{
    glViewport (0, 0, newWidth, newHeight);

    winWidth = newWidth;
    winHeight = newHeight;
}
void keyboard(unsigned char key, int x, int y);
int main (int argc, char** argv)
{
    glutInit (&argc, argv);
    glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
    glutInitWindowPosition (50, 50);
    glutInitWindowSize (winWidth, winHeight);
    glutCreateWindow ("Perspective View of A Square");
    glutKeyboardFunc(keyboard);
    glutDisplayFunc (displayFcn);
    glutReshapeFunc (reshapeFcn);
    glutMainLoop ( );
}

1 个答案:

答案 0 :(得分:1)

你的茶壶完全看不见了。

您可以将其放在查看卷中,如下所示:

glMatrixMode(GL_MODELVIEW);
glTranslatef(50.f, 50.f, 0.f);
glutSolidTeapot(50.9);

另请注意,对于任何正常观看条件,视角都疯狂高。考虑使用函数gluPerspective而不是glFrustum来轻松指定角度,而不是像glFrustum那样手动指定由近平面距离缩放的角度的tangens。

另请注意,所有这些都是已弃用 GL。您正在使用的大部分功能都是从现代核心配置文件上下文删除。如果您现在开始学习GL,我的建议是学习使用可编程管道的新方法(好的,10年前),而不是使用内置矩阵堆栈的旧(20年)固定功能管道。