0

我交换这两个函数的顺序显示的效果不一样?

#include<gl/glut.h>
#include<stdlib.h>
#include<math.h>
#include<iostream>
using namespace std;

GLsizei winWidth = 600, winHeight = 600;//WIN窗口大小
//观察点参数,默认为(0,0,1,  0,0,0,  0,1,0)
GLfloat px0 = 1.0, py0 = 0.0, pz0 = 1.0;//观察点在世界坐标系的坐标
GLfloat xref = 0.0, yref = 0.0, zref = 0.0;//所观察的方向(所看的点)
GLfloat Vx = 0.0, Vy = 1.0, Vz = 0.0;//相机的正上向量(相机的正上方所对应的方向)
//二维裁剪窗口或者三维裁剪立体
GLfloat viewSize = 10.0;
GLfloat xwMin = -viewSize, xwMax = viewSize, ywMin = -viewSize,ywMax = viewSize;//透视投影近观察面"大小",相对于观察坐标系
GLfloat dnear = -viewSize, dfar = viewSize;//近观察面距离,远观察面距离,都是观察系坐标下,必须为正

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

/* 生成球体 */
void displayFcn()
{
    glClear(GL_COLOR_BUFFER_BIT);
    glColor3f(0.0, 0.0, 1.0);//设置颜色

    glPushMatrix();//输入矩阵
    glTranslatef(1.0, 1.0, 0.0);//把放置的坐标移到世界坐标的某个点
    glutWireSphere(7.5, 100, 60);//绘制球体,参数分别为,球半径,经纬网格数
    glPopMatrix();//输出

    glFlush();
}


/*重绘函数,防止窗口变化*/
void winReshapeFcn(GLint newWidth, GLint newHeight)
{
    //glViewport(0, 0, newWidth, newHeight);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    // glOrtho,gluLookAt顺序为什么不能交换?!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    glOrtho(xwMin, xwMax, ywMin, ywMax, dnear, dfar);
    gluLookAt(px0, py0, pz0, xref, yref, zref, Vx, Vy, Vz);

    /* 或者也可以用投影矩阵 */
    //gluPerspective(fovy, (GLfloat)w / (GLfloat)h, 1.0, 20.0);

    glClear(GL_COLOR_BUFFER_BIT);
}

int main(int argc, char ** argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
    glutInitWindowPosition(50, 50);
    glutInitWindowSize(winWidth, winHeight);
    glutCreateWindow("Computer Graphics!");

    init();
    glutDisplayFunc(displayFcn);
    glutReshapeFunc(winReshapeFcn);
    glutMainLoop();
}

glOrtho在前面能正常显示,如图

图片描述

glOrtho在后面则如下图:
图片描述

2018-01-11 提问
1 个回答
0
  1. 在2019年可以学可编程管线了。
  2. Model, View, Projection的顺序当然是不能变的。

撰写答案

推广链接