ZKX's LAB

opengl中定义窗口大小 C语言程序编写指法练习软件

2020-10-09知识4

如何安装OpenGL和GLFW,OeGL主要适用桌面的GUI和游戏,移动应用甚至we应用的多种类型的绘图工作,有个窗口可以绘制东西,而GLFW是一款用于OeGL的跨平台,可以创建使用窗口,。

opengl中定义窗口大小 C语言程序编写指法练习软件

opengl中为什么一改变窗口图案就没了?应该怎样设置三维变换呢? 大体思路就是在glutReshapeFunc函数中引用一个回调函数,在这个函数中定义整个图形在窗口大小改变时的的投影区域和视见区域。发一段函数作为参考:void ChangeSize(int w,int h){GLfloat nRange=100.0f;Prevent a divide by zeroif(h=0)h=1;Set Viewport to window dimensionsglViewport(0,0,w,h);Reset projection matrix stackglMatrixMode(GL_PROJECTION);glLoadIdentity();Establish clipping volume(left,right,bottom,top,near,far)if(w)glOrtho(-nRange,nRange,-nRange*h/w,nRange*h/w,-nRange,nRange);elseglOrtho(-nRange*w/h,nRange*w/h,-nRange,nRange,-nRange,nRange);Reset Model view matrix stackglMatrixMode(GL_MODELVIEW);glLoadIdentity();}

opengl中定义窗口大小 C语言程序编写指法练习软件

OpenGl设置原点与坐标转换 窗口形状的问题,是因为投影变换。实际上OpenGL四个变换里任何一个加了在横向和纵向不同的缩放之后都会有这个效果,但通常是通过投影变换来完成适应窗口形状的任务的。你的程序里没有设置投影变换,默认的投影变换是单位矩阵,所以摄像机空间里的坐标(-1,-1,0)对屏幕的左下角,(1,1,0)对应右上角。也就是说,水平方向上摄像机空间的两个单位长度对应1440像素,竖直方向对应1280像素,而你画的圆在两个方向上直径都是0.04个单位长(因为R=0.02f),所以变换到屏幕上对应的像素数在水平方向和竖直方向上就不一样了。解决办法是用glOrtho设置投影变换的时候在水平和竖直方向上用不同的范围。比如如果屏幕是4:3的,glOrtho的参数可以是(-4,4,-3,3,-1,1),只要让x和y的范围的比例跟屏幕的横竖比例一样就行。窗口不是正方形的时候也是一样。第二个问题也是类似。因为OpenGL的四个变换功能重叠,所以有多种解决办法。可以把摄像机对准(1,1,0),这样摄像机能看到的范围就变成了(0,0)到(2,2)。也可以把默认投影变换glOrtho(-1,1,-1,1,-1,1)改称glOrtho(0,2,0,2,-1,1)。

opengl中定义窗口大小 C语言程序编写指法练习软件

介绍常用的OpenGL的函数(定义+功能) OpenGL 函数库相关的API有核心库(gl)、实用库(glu)、辅助库(aux)、实用工具库(glut)、窗口库(glx、agl、wgl)和扩展函数库等。从图1可以看出,gl是核心,glu是对gl的部分封装。glx、agl、wgl 是针对不同窗口系统的函数。glut是为跨平台的OpenGL程序的工具包,比aux功能强大。扩展函数库是硬件厂商为实现硬件更新利用OpenGL的扩展机制开发的函数。下面逐一对这些库进行详细介绍。1.OpenGL核心库 核心库包含有115个函数,函数名的前缀为gl。这部分函数用于常规的、核心的图形处理。此函数由gl.dll来负责解释执行。由于许多函数可以接收不同数以下几类。据类型的参数,因此派生出来的函数原形多达300多个。核心库中的函数主要可以分为以下几类函数:(1)绘制基本几何图元的函数。如绘制图元的函数glBegain()、glEnd()、glNormal*()、glVertex*()。(2)矩阵操作、几何变换和投影变换的函数。如矩阵入栈函数glPushMatrix()、矩阵出栈函数glPopMatrix()、装载矩阵函数glLoadMatrix()、矩阵相乘函数glMultMatrix(),当前矩阵函数 glMatrixMode()和矩阵标准化函数glLoadIdentity(),几何变换函数glTranslate*()、glRotate*()和 glScale*(),投影变换函数glOrtho()、。

glut opengl 怎样获得当前窗口的大小 请参考这个教程:http://blog.csdn.net/nauty_li/article/details/2227143。Hoxily说:我是Hoxily。GLUT定义了当窗口大小改变时哪一个函数应该被调用。此外,这个函数还会在窗口初次被创建时调用,保证初始化窗口不是正方形的时候渲染也不会变形出错。这个函数是glutReshapeFunc()。void glutReshapeFunc(void(*func)(int width,int height));参数:func:指负责设置正确投影的函数的名称。因此我们必须做的第一件事是回到main()函数。在上一章的代码里加入对glutReshapeFunc()的调用,让我们把负责窗口尺寸的函数叫做changeSize。现在的代码如下。void main(int argc,char*argv){glutInit(&argc,argv);glutInitDisplayMode(GLUT_DEPTH|GLUT_SINGLE|GLUT_RGBA);glutInitWindowPosition(100,100);glutInitWindowSize(320,320);glutCreateWindow(\"3D Tech-GLUT Tutorial\");glutDisplayFunc(renderScene);Here is our new entry in the main functionglutReshapeFunc(changeSize);glutMainLoop();}下面我们需要做的就是定义函数changeSize()。从glutReshapeFunc()函数的声明可以看到,changSize()函数有两个形参。这两个参数代表新的窗口高度和宽度。void 。

#矩阵#opengl#计算机图形学#c语言函数#c语言

随机阅读

qrcode
访问手机版