一些课后思考

1glTranslatef(-1.5f,0.0f,-6.0f);这里是被观察的物体在移动,还是视点的位置移动呢

我的理解是后者(就好像是照相机在移动位置来捕捉画面那样),默认的物体位置是屏幕中心,向左移动视图并将视图推远以便被观察的物体能进入,试着调整Z坐标的值,可以看到Z越往里面去,物体就越小,越往外面来,物体越大,这和照相机调整焦距类似。

2.使用Flat coloring(单调着色)给几何对象涂上固定的一种颜色。使用Smoothcoloring(平滑着色)将几个顶点的不同颜色混合在一起,创建漂亮的色彩混合。要注意窗口调整大小以及被其他窗口挡住后重新激活时要重新设置Shade Model

int  COpenGLDemoView::DrawGLScene(GLvoid)                                   
{
//  Here's Where We Do All The Drawing
    glClear(GL_COLOR_BUFFER_BIT  |  GL_DEPTH_BUFFER_BIT);     //  Clear Screen And Depth Buffer
    glLoadIdentity();                                     //  Reset The Current Modelview Matrix
    glTranslatef( - 1.5f , 0.0f , - 6.0f ); // 物体左移1.5,向内移6,相当于移动镜头一样,让物体进入镜头中
    glBegin(GL_TRIANGLES);                             //  绘制三角形
        glColor3f( 1.0f , 0.0f , 0.0f );
        glVertex3f( 
0.0f 1.0f 0.0f );                     //  上顶点
        glColor3f( 0.0f , 1.0f , 0.0f );
        glVertex3f(
- 1.0f , - 1.0f 0.0f );                     //  左下
        glColor3f( 0.0f , 0.0f , 1.0f );
        glVertex3f( 
1.0f , - 1.0f 0.0f );                     //  右下
    glEnd();                                 //  三角形绘制结束
     glShadeModel(GL_FLAT);    
glTranslatef(
3.0f , 0.0f , 0.0f );
glBegin(GL_QUADS);                            
//   绘制正方形
        glColor3f( 1.0f , 0.0f , 0.0f );
        glVertex3f(
- 1.0f 1.0f 0.0f );                     //  左上

        glColor3f(
1.0 , 1.0f , 1.0f );
        glVertex3f(
- 1.0f , - 1.0f 0.0f );                     //  右下

        glColor3f(
0.0f , 0.0f , 1.0f );
        glVertex3f( 
1.0f , - 1.0f 0.0f );                     //  左下

        glColor3f(
0.0f , 1.0f , 0.0f );
        glVertex3f( 
1.0f 1.0f 0.0f );                     //  右上    
    glEnd();                                 //  正方形绘制结束
    glFlush();
    
return  TRUE;                                         //  Everything Went OK
}

void  COpenGLDemoView::OnActivateView(BOOL bActivate, CView *  pActivateView, CView *  pDeactiveView) 
{
    
//  TODO: Add your specialized code here and/or call the base class
    InitGL(); // 激活窗口时强制要求还原openGL状态
    
    CView::OnActivateView(bActivate, pActivateView, pDeactiveView);
}


void  COpenGLDemoView::OnSize(UINT nType,  int  cx,  int  cy) 
{
    CView::OnSize(nType, cx, cy);
    
    
//  TODO: Add your message handler code here
    GLsizei width,height;
    width 
=  cx;
    height 
=  cy;
    
if  (height == 0 )                                         //  Prevent A Divide By Zero By
    {
        height
= 1 ;                                         //  Making Height Equal One
    }

    glShadeModel(GL_SMOOTH);
    glViewport(
0 , 0 ,width,height);                         //  Reset The Current Viewport

    glMatrixMode(GL_PROJECTION);                        
//  Select The Projection Matrix
    glLoadIdentity();                                     //  Reset The Projection Matrix
    
//  Calculate The Aspect Ratio Of The Window
    gluPerspective( 45.0f ,(GLfloat)width / (GLfloat)height, 0.1f , 100.0f ); // 透视投影
    glMatrixMode(GL_MODELVIEW);                             //  Select The Modelview Matrix
    glLoadIdentity();                                     //  Reset The Modelview Matrix
}


BOOL COpenGLDemoView::InitGL(GLvoid)                                        
//  All Setup For OpenGL Goes Here
{
    glShadeModel(GL_SMOOTH);                            
//  Enable Smooth Shading
       glClearColor( 0.0 , 0.0 , 0.0 , 0.0 ); //  Black Background
    glClearDepth( 1.0f );                                     //  Depth Buffer Setup
    glEnable(GL_DEPTH_TEST);                             //  Enables Depth Testing
    glDepthFunc(GL_LEQUAL);                                 //  The Type Of Depth Testing To Do
    glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);     //  Really Nice Perspective Calculations
     return  TRUE;                                         //  Initialization Went OK
}

3,如果是下面这样设置颜色,则请问正方形的颜色会是怎么样的呢?

glShadeModel(GL_FLAT);    
glTranslatef(
3.0f , 0.0f , 0.0f );
glBegin(GL_QUADS);                            
//   绘制正方形
        glColor3f( 1.0f , 0.0f , 0.0f );
        glVertex3f(
- 1.0f 1.0f 0.0f );                     //  左上

        glColor3f(
1.0 , 1.0f , 1.0f );
        glVertex3f(
- 1.0f , - 1.0f 0.0f );                     //  右下

        glColor3f(
0.0f , 0.0f , 1.0f );
        glVertex3f( 
1.0f , - 1.0f 0.0f );                     //  左下

        glColor3f(
0.0f , 1.0f , 0.0f );
        glVertex3f( 
1.0f 1.0f 0.0f );                     //  右上    
    glEnd();                                 //  正方形绘制结束
    呵呵,答案是:颜色会是绿色的,也就是说是以最后那个顶点的颜色为标准的,这是因为 Flat coloring( 单调着色 ) 是会给四边形涂上固定的一种颜色,而最后一个顶点的颜色设置后,就覆盖了前面的颜色设置。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值