精华内容
下载资源
问答
  • gluOrtho2D的作用

    2021-03-30 10:00:26
    计算机图形学(第四版)P32页对gluOrtho2D(x1,x2,y,1y2)的描述如下:          区域的x坐标值从x1到x2,y坐标值从y1到y2,只要是在该矩阵内定义的对象,都会出现在显示窗口...

    计算机图形学(第四版)P32页对gluOrtho2D(x1,x2,y,1y2)的描述如下:
             区域的x坐标值从x1到x2,y坐标值从y1到y2,只要是在该矩阵内定义的对象,都会出现在显示窗口中。任何坐标范围外的内容都不会显示出来。
    其实就是在说:若不调用gluOrtho2D(),窗口会显示-1<x<1,-1<y<1这个区域。如果调用gluOrtho2D(x1,x2,y,1y2),则窗口会显示x1<x<x2,y1<y<y2这个区域。
    例如:
    不调用gluOrtho2D这个函数,画一条在-1<x<1,-1<y<1这个区域内的线:

    	glBegin(GL_LINES);
    		glVertex2i(-1, -1);
    		glVertex2i(1, 1);
    	glEnd();
    

    在这里插入图片描述
    可以很正常的显示,但如果调用书中

    	glBegin(GL_LINES);
    		glVertex2i(180, 15);
    		glVertex2i(10, 145);
    	glEnd();
    

    这样的一条直线显然在-1<x<1,-1<y<1全部为空。
    在这里插入图片描述

    故需要调用gluOrtho2D来改变窗口显示的坐标,使得其涵盖这条线即可:

    	gluOrtho2D(0.0, 200, 0.0, 150.0);
    

    在这里插入图片描述
    即可正常显示,当然只想显示部分细节也是可以的,如:

    	gluOrtho2D(100, 200, 0.0, 150.0);
    

    在这里插入图片描述

    还有一点需要注意的是,由于窗口的size固定后,不同的 gluOrtho2D导致横纵坐标密度不同,会在窗口显示中影响直线看起来的斜率。

    展开全文
  • gluOrtho2D作用

    万次阅读 多人点赞 2019-02-01 12:37:36
    gluOrtho2D是用来指定屏幕区域对应的模型坐标范围,我们自己所绘制的图形的坐标必须在这个范围内,不然不能看到自己绘制的图形。 在没调用gluOthor2d函数之前,窗口的中心坐标为(0,0);调用了这个函数之后窗口的...

    glViewport(0, 0, WIDTH, HEIGHT);

    gluOrtho2D是用来指定屏幕区域对应的模型坐标范围,我们自己所绘制的图形的坐标必须在这个范围内,不然不能看到自己绘制的图形。

    在没调用gluOthor2d函数之前,窗口的中心坐标为(0,0);调用了这个函数之后窗口的中心坐标不再是(0,0)了,窗口的左下角才是(0,0)。

    在没调用gluOthor2d函数之前,坐标范围是 X:-1~1,Y:-1~1;调用了这个函数之后坐标范围是 X:0~WIDTH,Y:0~HEIGHT

    下面代码用两种方式画上图的两条线,一种是调用gluOthor2d方式,一种是不调用gluOthor2d

    #include <GLTools.h>            // OpenGL toolkit
    #include <GLShaderManager.h>    // Shader Manager Class
    
    
    #define FREEGLUT_STATIC
    #include <GL/glut.h>            // Windows FreeGlut equivalent
    
    GLBatch	triangleBatch;
    GLShaderManager	shaderManager;
    #define WINWIDTH  500
    #define WINHEIGHT 500
    
    bool IS_USE_gluOrtho2D = false;
    void ChangeSize(int w, int h)
    {
    	glViewport(0, 0, w, h);
    }
    
    
    ///
    // Called to draw scene
    void RenderScene(void)
    {
    	if (IS_USE_gluOrtho2D)
    	{
    		//画分割线 ,分成四个视图区域
    		glClear(GL_COLOR_BUFFER_BIT);把窗口清除为当前颜色
    		glColor3f(1.0, 0.0, 0.0);
    		glViewport(0, 0, WINWIDTH, WINHEIGHT);
    		glBegin(GL_LINES);
    			glVertex2f(WINWIDTH / 2, 0);
    			glVertex2f(WINWIDTH / 2, WINHEIGHT);
    			glVertex2f(0, WINHEIGHT / 2);
    			glVertex2f(WINWIDTH, WINHEIGHT / 2);
    		glEnd();
    	}
    	else
    	{
    		//画分割线 ,分成四个视图区域
    		glClear(GL_COLOR_BUFFER_BIT);把窗口清除为当前颜色
    		glColor3f(1.0, 0.0, 0.0);
    		glViewport(0, 0, WINWIDTH, WINHEIGHT);
    		glBegin(GL_LINES);
    			glVertex2f(-1, 0);
    			glVertex2f(1.0, 0);
    			glVertex2f(0, -1.0);
    			glVertex2f(0, 1.0);
    		glEnd();
    
    	}
    	glFlush();
    
    }
    
    ///
    // Main entry point for GLUT based programs
    int main(int argc, char* argv[])
    {
    	gltSetWorkingDirectory(argv[0]);
    
    	glutInit(&argc, argv);
    	glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA | GLUT_DEPTH | GLUT_STENCIL);
    	glutInitWindowPosition(500, 100);
    	glutInitWindowSize(WINWIDTH, WINWIDTH);
    	glutCreateWindow("Triangle");
    	if (IS_USE_gluOrtho2D)
    	{
    		gluOrtho2D(0, WINWIDTH, 0, WINWIDTH);
    	}
    	glutReshapeFunc(ChangeSize);
    	glutDisplayFunc(RenderScene);
    
    	GLenum err = glewInit();
    	if (GLEW_OK != err) {
    		fprintf(stderr, "GLEW Error: %s\n", glewGetErrorString(err));
    		return 1;
    	}
    
    	glutMainLoop();
    	return 0;
    }

     

    展开全文
  • 用下面的命令编译发现报undefined reference to gluOrtho2D的错误 gcc glTest2.c -lGL -lglut -o glTest2 找了好久发现只要再加一个-lGLU就行,即 gcc glTest2.c -lGL -lGLU -lglut -o glTest2 源程序代码: #...

    我在ubuntu创建了一个openGL程序glTest2.c
    用下面的命令编译发现报undefined reference to gluOrtho2D的错误

    gcc glTest2.c -lGL -lglut -o glTest2
    

    找了好久发现只要再加一个-lGLU就行,即

    gcc glTest2.c -lGL -lGLU -lglut -o glTest2
    

    源程序代码:

    #include <stdio.h>
    #include <GL/glut.h>
    #include <GL/glu.h>
    
    void LineDDA(int x0, int y0, int x1, int y1 /*,int color*/)
    {
        int x, dy, dx, y;
        float m;
        dx = x1 - x0;
        dy = y1 - y0;
        m = dy/dx;
        y = y0;
    
        glColor3f(1.0f, 1.0f, 0.0f);
        glPointSize(1);
        for(x = x0; x <= x1; x++)
        {
            glBegin(GL_POINTS);
            glVertex2i(x, (int)(y+0.5));
            glEnd();
            y += m;
        }
    }
    
    void myDisplay(void)
    {
        glClear(GL_COLOR_BUFFER_BIT);
        glColor3f(1.0f, 0.0f, 0.0f);
        glRectf(25.0, 25.0, 75.0, 75.0);
    
        glPointSize(5);
        glBegin(GL_POINTS);
        glColor3f(0.0f, 1.0f, 0.0f); glVertex2f(0.0f, 0.0f);
        glEnd();
    
        LineDDA(0, 0, 200, 300);
    
        glBegin(GL_LINES);
        glColor3f(1.0f, 0.0f, 0.0f); glVertex2f(100.0f, 0.0f);
        glColor3f(0.0f, 1.0f, 0.0f); glVertex2f(180.0f, 240.0f);
        glEnd();
    
        glFlush();
    }
    
    void Init()
    {
        glClearColor(0.0, 0.0, 0.0, 0.0);
        glShadeModel(GL_FLAT);
    }
    
    void myReshape(int w, int h)
    {
        glViewport(0, 0, (GLsizei)w, (GLsizei)h);
        glMatrixMode(GL_PROJECTION);
        glLoadIdentity();
        gluOrtho2D(0.0, (GLdouble)w, 0.0, (GLdouble)h);
    }
    
    int main(int argc, char *argv[])
    {
        glutInit(&argc, argv);
        glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
        glutInitWindowPosition(100, 100);
        glutInitWindowSize(400, 400);
        glutCreateWindow("hello wrold!");
        Init();
        glutDisplayFunc(myDisplay);
        glutReshapeFunc(myReshape);
        glutMainLoop();
    
        return 0;
    }
    
    展开全文
  • 这个我到处搜都没找到解决方法,结果发现在 CMakeLists.txt 的 每个target_link_libraries ...下面的写法会导致 gluOrtho2D 无法使用,因为没有链接到 glu.h 库,将 target_link_libraries 改成上面的形式就可以了 ...

    这个我到处搜都没找到解决方法,结果发现在 CMakeLists.txt 的 每个target_link_libraries 的参数中加上 glu32.dll 就行了
    如图:
    在这里插入图片描述
    下面的写法会导致 gluOrtho2D 无法使用,因为没有链接到 glu 库,将 target_link_libraries 改成上面的形式就可以了

    展开全文
  • 在使用gluOrtho2D()函数画图的过程中,出现了一个问题,问题如下 gluOrtho2D(-400, 400.0, -400, 400.0); //设置窗口坐标范围 这个茶壶变成了这样,为什么会出现这种情况呢,原因很简单 如图,由于gluOrtho2D()...
  • void display() { glEnable(GL_DEPTH_TEST); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glMatrixMode(GL_MODELVIEW); glLoadIdentity();... //gluOrtho2D(0, 800, 0, 800); glLi...
  • gluOrtho2D定义剪裁面,通过正交投影,把景物(模型)按照1:1的比例绘制到一个剪裁面上,相当于对世界坐标窗口的一个截取。 glViewport定义视口,即视见窗口,是从世界坐标系窗口到屏幕坐标系窗口的映射,决定了...
  • gluOrtho2D截取出图形,参数不能太小,不用太大,要显示完整的三角形就必须要比三角形大,比三角形稍大些即可。这样就在世界坐标系中截出了一张200*200的图(区域),包含三角形和空白部分(或者说应该叫空黑部分...
  • gluOrtho2D( 0.0 ,(GLdouble)w, 0.0 ,(GLdouble)h); // left right,buttom,up (left,buttom),(right,up) glMatrixMode(GL_MODELVIEW); glLoadIdentity(); } int main( int argc, char ** argv) { ...
  • gluOrtho2D(0.0, WINDOWWIDTH , WINDOWHEIGHT/2, 0.0);第三个参数取其一半,打点的Y坐标扩大了一倍.渲染直线的情况下,通过将第二参数和第三参数进行按比例尺放缩,实际上,可达到渲染图形缩放的效果。所以gluOrtho...
  • 在用code blocks编写二维平面绘图程序,用到opengl库,根据网上教程...却总是出现undefined reference to `gluOrtho2D@32的错误提示,glu.h文件中也有gluOrtho2D的定义,崩溃。。。 后来发现code
  • gluOrtho2D(0.0,640.0,0.0,480); //设置坐标范围  glutInitWindowSize(350,200); //设置窗口大小  这两个函数不一样,上面是横纵坐标的范围,而下面的是弹出来的窗口相对  于电脑屏幕的大小
  • //gluOrtho2D(-100*bili,100*bili,-100/bili,100/bili); //else //gluOrtho2D(-100*bili,100*bili,-100/bili,100/bili) } void display() { /**每个坐标的范围 >*/ //gluOrtho2D(-100,100,-100,100); gluOrtho...
  • error LNK2019: unresolved external symbol _gluOrtho2D@16 referenced in function "protected: virtual void __thiscall widget::initializeGL(void)" (?initializeGL@widget@@MAEXXZ) 现100%确定include了glu.h...
  • gluOrtho2D(0.0,(GLdouble)w,0.0,(GLdouble)h);//left right,buttom,up (left,buttom),(right,up) glMatrixMode(GL_MODELVIEW); glLoadIdentity(); } int main(int argc,char** argv) { glutInit(&argc,argv);...
  • opengl中的gluOrtho2D【转】 gluOrtho2D(-5.0,5.0,-5.0,5.0); 参数分别代表(左下角x坐标,右上角x坐标,左下角y坐标,右上角y坐标)——坐标全相对于窗口左下角--原点),near和far默认为-1和1,此函数...
  • gluOrtho2D与glViewport的区别

    千次阅读 2013-10-12 15:15:25
    gluOrtho2D(-200.0,200.0,-200.0,200.0); //设置投影参数   //指的是视图范围,如果(0,200,0,200)的话就只能在第一象限显示,就1/4圆 //第1,3的参数是左下角坐标,第2,4的参数是右上角坐标 glViewport(0,...
  •  gluOrtho2D是一个特殊的正射投影函数,主要用于二维图像到二维屏幕上的投影。它的near和far缺省值分别为-1.0和1.0,所有二维物体的Z坐标都为0.0。因此它的裁剪面是一个左下角点为(left,bottom)、右上角点为...
  • 下面函数获取描述glOrtho的信息: glGet withargument GL_MATRIX_MODE glGet with argumentGL_MODELVIEW_MATRIX glGet with argumentGL_PROJECTION_MATRIX glGet with argumentGL_TEXTURE_MATRIX gluOrtho2D ...
  • 这个函数跟上面的相似,但是我们发现上面的指定一个剪裁面后,是在我们定义的窗口的整个窗口中显示我们剪裁出来的面,而这个函数就是为了在一部分中显我们要显示的剪裁面,即,我们先取景(就是用gluOrtho2D()剪出来...
  • gluOrtho2D(left,bottom,right,top); 例如: gluOrtho2D(0.0,50.0,0.0,50.0); 表示定义一个大小为50*50的窗口,窗口的左下角为观察坐标系的坐标原点 ...
  • gluOrtho2D

    2013-04-22 12:37:09
    gluOrtho2D( left , right , buttom , top ) ; gluOrtho3D( left , right , buttom , top); 截取视景体,即截取世界坐标系下的某一块场景
  • gluOrtho2D(x_min, y_min, x_max, y_max); //通过正交投影,把景物(模型)按照1:1的比例绘制到一个剪裁面上,相当于对世界坐标窗口的一个截取。 x_min, y_min, x_max, y_max四个参数分别代表左下角x坐标,右上角x...
  • opengl中的gluOrtho2D

    2010-06-27 11:56:00
    gluOrtho2D(-5.0,5.0,-5.0,5.0); 参数分别代表(左下角x坐标,右上角x坐标,左下角y坐标,右上角y坐标)——坐标全相对于窗口左下角--原点),near和far默认为-1和1,此函数决定一个平行六面体,即View Volume! ...
  • gluOrtho2D(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top); 简单的说前者的两个参数所代表的坐标点,必须落在后者参数所形成的坐标系内,不然该点就在viewport之外。 举个例子: void d
  • glViewport定义视口,即视见窗口,是从世界坐标系窗口到屏幕坐标系窗口的映射,决定了gluOrtho2D定义的剪裁main如何映射到屏幕上,通过调节glViewport的参数, 可以调节模型在屏幕窗口上的缩放和显示位置。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,253
精华内容 1,301
关键字:

gluortho2d