OpengL glPolygonMode

#include "GLTools.h"

#include "GLBatch.h"

#include "GLMatrixStack.h"

#include "GLShaderManager.h"

#include "GLFrame.h"

#include "GLFrustum.h"

#include "StopWatch.h"

#ifdef __APPLE__

#include

#else

#include

#endif

static GLFrustum frustum;

static GLShaderManager shaderManager;

static GLTriangleBatch toursBath;

static void SpecialFunc(int key, int x, int y) {

    

}

static void glutKeyboardFunc(unsigned char key, int x, int y) {

    

    

}

static void glutShape(int w, int h) {

    if (h == 0) {

        h == 1.0f;

    }

    glViewport(0, 0, w, h);

    /// 设置透视投影

    frustum.SetPerspective(35.0f, (float)w/(float)h, 1.0, 100.0);

}

static void loadData() {

    glClearColor(0.8f, 0.8f, 0.8f, 1.0f);

    glEnable(GL_DEPTH_TEST);

    shaderManager.InitializeStockShaders();

    /// 形成一个环

    gltMakeTorus(toursBath, 0.4f, 0.15f, 200, 200);

    形成一个球

    gltMakeSphere(toursBath, 0.4f, 10,  20);

    /*

     glPolygonMode函数用于控制多边形的显示方式,有GL_FILL、GL_LINE、GL_POINT三种模式可供选择。参数face用于指定多边形哪一面收到模式改变的影响,取glPolygonMode函数用于控制多边形的显示方式,有GL_FILL、GL_LINE、GL_POINT三种模式可供选择。参数face用于指定多边形哪一面收到模式改变的影响,取值为GL_FRONT、GL_BACK、GL_FRONT_AND_BACK;参数mode用于指定新的绘图模式,GL_FILLS是默认值,生成填充的多边形,GL_LINE生成多边形的轮廓,GL_POINT只画出顶点。

     如果你想要了解更多关于glPolygonMode函数的信息,可以继续向我提问。值为GL_FRONT、GL_BACK、GL_FRONT_AND_BACK;参数mode用于指定新的绘图模式,GL_FILLS是默认值,生成填充的多边形,GL_LINE生成多边形的轮廓,GL_POINT只画出顶点。

     如果你想要了解更多关于glPolygonMode函数的信息,可以继续向我提问。

     */

    glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);

}

static void RenderScene() {

    

        /// 建立基于时间变化的动画

    static CStopWatch rotTimer;

    /// 当前时间 *60s

    float yRot = rotTimer.GetElapsedSeconds() * 60.0f;

    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);

    

    /// 矩阵变量

    M3DMatrix44f mtranlate, mRotate, mModelview, mModelViewProject;

    /// 创建一个4*4的矩阵变量 将花托沿着Z轴负方向移动2.5个单位长度

    m3dTranslationMatrix44(mtranlate, 0.0f, 0.0f, -2.5f);

    /// 创建一个4*4的矩阵 在y轴上渲染yRot度 yRot根据经过时间设置动画帧率

    m3dRotationMatrix44(mRotate, m3dDegToRad(yRot), 0.0f, 1.0f, 0.0f);

    /// 为modelView 通过矩阵旋转矩阵 移动矩阵相乘 将结果添加到mModerView上

    m3dMatrixMultiply44(mModelview, mtranlate, mRotate);

    

    /// 将模型和视图矩阵的投影矩阵

    /// 将投影矩阵乘以模型视图矩阵 将变化结果通过矩阵乘法应用到mModelViewProject矩阵上

    m3dMatrixMultiply44(mModelViewProject, frustum.GetProjectionMatrix(), mModelview);

    

    // 将这个已完成的矩阵传递给着色器,并渲染这个圆环面。

    //绘图颜色

    GLfloat vBlack[] = { 0.0f, 0.0f, 0.0f, 1.0f };

    //通过平面着色器提交矩阵,和颜色。

    //平面着色器的工作只是使用提供矩阵来顶点来进行转换,并且使用指定的颜色对几何图形进行着色以得到实心几何图形

    shaderManager.UseStockShader(GLT_SHADER_FLAT,mModelViewProject,vBlack);

    toursBath.Draw();

    

    glutSwapBuffers();

    glutPostRedisplay();

}

int main(int argc,char *argv[]) {

    gltSetWorkingDirectory(argv[0]);

    glutInit(&argc, argv);

    glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGBA|GLUT_MULTISAMPLE);

    glutInitWindowSize(800, 600);

    glutCreateWindow("window");

    

    GLenum error = glewInit();

    

    if (error != GLEW_OK) {

        printf("===============error=\%s\n",glewGetErrorString(error));

        return 1;

    }

    glutSpecialFunc(SpecialFunc);

    

    glutKeyboardFunc(glutKeyboardFunc);

    

    glutReshapeFunc(glutShape);

    

    glutDisplayFunc(RenderScene);

    loadData();

    

    glutMainLoop();

    

}

你可能感兴趣的:(图形渲染)