如何定义视见区和裁剪区 您所在的位置:网站首页 视见函数表示什么含义 如何定义视见区和裁剪区

如何定义视见区和裁剪区

#如何定义视见区和裁剪区| 来源: 网络整理| 查看: 265

书读三遍,其义自见,OpenGL封装的不是代码,而是各种3D概念。

上一篇介绍到视见区裁剪区物理窗口的概念以及与3D图形之间的关系。这里就讲一下我对视见区和裁剪区的设置的理解,这里主要讲两个函数:

glOrtho(left, right, bottom, top, near, far)// glViewport (GLint x, GLint y, GLsizei width, GLsizei height)//下面就来介绍这两个函数的含义和使用(注意,这里glOrgho只是用来设置垂直投影,3D主要有两种投影:垂直投影和透视投影glFrutrum。垂直投影一般用户工程制图中,就是显示那些不用随着离眼睛远近而发生大小变化的图形,一般3D场景用透视投影,因为真实感更强)。

先上代码:

#include "../../shared/gltools.h" // OpenGL toolkit // Define a constant for the value of PI #define GL_PI 3.1415f // Rotation amounts static GLfloat xRot = 0.0f; static GLfloat yRot = 0.0f; static GLfloat xdt = 0.0f; static GLfloat ydt = 0.0f; /// // Called to draw scene void RenderScene(void) { GLfloat x,y,z,angle; // Storeage for coordinates and angles // Clear the window with current clearing color //glClear(GL_COLOR_BUFFER_BIT); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Save matrix state and do the rotation glPushMatrix(); //glRotatef(xRot, 1.0f, 0.0f, 0.0f); //glRotatef(yRot, 0.0f, 1.0f, 0.0f); //glTranslatef(xdt, ydt, -1.0f); //glTranslatef(-2.00f, 0.00f, 0.00f); glutSolidSphere(20.0, 20, 16); // Restore transformations glPopMatrix(); // Flush drawing commands //这里不再调用glFlush,因为当我们执行缓冲区交换时,隐含了执行一次刷新操作。 glutSwapBuffers(); } /// // This function does any needed initialization on the // rendering context. void SetupRC() { // Black background glClearColor(0.0f, 0.0f, 0.0f, 1.0f ); // Set drawing color to white glColor3f(1.0f, 1.0f, 1.0f); GLfloat mat_specular[] = {1.0, 1.0, 1.0}; GLfloat mat_shininess[] = {50.0}; GLfloat light_position[] = {1.0, 1.0f, 1.0, 0.0}; GLfloat white_light[] = {1.0, 1.0, 1.0, 1.0}; GLfloat Imodel_ambient[] = {0.1, 0.1, 0.1, 1.0}; glShadeModel(GL_SMOOTH); glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular); glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess); glLightfv(GL_LIGHT0, GL_POSITION, light_position); glLightfv(GL_LIGHT0, GL_DIFFUSE, white_light); glLightfv(GL_LIGHT0, GL_SPECULAR, white_light); glLightModelfv(GL_LIGHT_MODEL_AMBIENT, Imodel_ambient); glEnable(GL_LIGHT0); glEnable(GL_LIGHTING); glEnable(GL_DEPTH_TEST); } /// // Window has changed size, recalculate projection void ChangeSize(int w, int h) { GLfloat nRange = 20; // Prevent a divide by zero if(h == 0) h = 1; // Set Viewport to window dimensions // 定义视见区 glViewport(0, 0, 1.0*w, 1.0*h); // Reset coordinate system glMatrixMode(GL_PROJECTION); glLoadIdentity(); // Establish clipping volume (left, right, bottom, top, near, far) if (w


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

      专题文章
        CopyRight 2018-2019 实验室设备网 版权所有