草庐IT

c++ - OpenGL 对象围绕一条线的旋转

我正在使用OpenGL和C++进行编程。我知道1条线(对角线)上的2个点,并希望围绕该对角线旋转一个对象。我该怎么做呢?我知道如何使用glrotatef围绕x、y或z轴旋转它,但我不确定。 最佳答案 glRotate的x、y和z参数可以指定任意轴,而不仅仅是x、y和z轴。要找到穿过直线的轴,只需减去直线的端点即可得到轴vector:如果这两个点是(x1,y1,z1)和(x2,y2,z2),你需要的轴是(x2-x1,y2-y1,z2-z1)。编辑:正如@chris_l所指出的,这仅在直线穿过原点时有效。如果不是,首先应用(-x1,-y

c++ - 如何旋转然后朝那个方向移动?

嘿,我目前正在尝试制作第一人称游戏。我能够做的是使用函数gluLookAt()移动相机,并使用glRotatef()旋转它。我想做的是是旋转相机,然后在我旋转的方向上向前移动,但轴保持不变,虽然我旋转了相机,但它会横向移动而不是向前移动。有人能帮我吗?这是我的代码:glMatrixMode(GL_MODELVIEW);glLoadIdentity();glRotatef(cameraPhi,1,0,0);glRotatef(cameraTheta,0,1,0);gluLookAt(move_camera.x,move_camera.y,move_camera.z,move_camera

c++ - OpenGL纹理

很抱歉请求帮助,但我很沮丧。我不知道为什么,但我似乎从来没有能够在OpenGL中使用纹理。我真的很感激一个最小的例子,只要它只使用/gl.h/glu.h和标准C++库。任何其他见解将不胜感激。很抱歉只是要求您为我编写一个完整的程序,但我真的可以使用它,因为我看到的每个互联网示例都使用过剩。由于某种原因我无法编译它,这很烦人。谢谢。 最佳答案 您需要一些库或接口(interface)来创建OpenGL上下文(以及一个显示它的窗口)。GLUT已经过时,但仍然很受欢迎;现在好的选择是GLFW或SDL。我推荐GLFW。(顺便说一句,为什么你

c++ - OpenGL:我应该总是自己剪辑 glColor*f 值吗?

这听起来可能很愚蠢……但我一直在想,如果我向glColor*f函数发送一个大于1.0f的值有关系吗?较旧的gfx卡/驱动程序是否以不同方式处理这些问题?OpenGL是直接使用我给它的颜色值,还是它自己剪辑它?if(r>1.0f)r=1.0f;我应该停止吗??大于1.0f是否有导致意外行为的危险?我似乎无法获得大于1.0f的值来做任何不同的事情。 最佳答案 来自themanpage:“在更新当前颜色之前,浮点值和有符号整数值都不会被限制在[0,1]范围内。但是,颜色分量在被插值或写入颜色缓冲区之前会被限制在这个范围内。”

c++ - Allegro vs OpenGL 速度/效率明智

我使用Allegro5有一段时间了,最​​近开始研究OpenGL和Freeglut。我准备好进行转换,但我想知道这是否真的值得。OpenGL的绘图操作真的比Allegro5更高效吗? 最佳答案 Allegro5只有两个图形驱动程序:Direct3D和OpenGL。在Windows上,您可以在两者之间进行选择。在其他平台上,您必须使用OpenGL。所以你的问题有点无关紧要,因为Allegro5中的所有内容(除非你明确使用未加速的内存位图)都是硬件加速的,而且很可能通过OpenGL。如果您正在构建3D游戏,那么Allegro实际上并没有

c++ - 如何在 openGL,C++ 中改变视点

我有一个形状,我想从运行时决定的不同位置查看它。我想如果我用确定的参数调用gluLookAt(...),它可能会改变View位置。但是,似乎并没有。我想我应该在更改后做一些令人耳目一新的事情,我尝试了glFlush()。如有任何帮助,我们将不胜感激。非常感谢您。voidKeyboard(unsignedcharkey,intx,inty){switch(key){case'w':glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);gluLookAt(3,2,0,0,0,0,0,10,0);glFlush();break;case's':co

c++ - OpenGL:如何检查用户 GFX 卡是否可以使用我的着色器进行渲染?

如果用户不支持我为更快地渲染某些内容而制作的着色器,我需要进行回退。那么,我究竟该如何检查这些东西呢?我知道某些GLSL版本不支持某些着色器函数,但是,这些函数与所需版本的完整列表在哪里?但问题是,我不知道我到底需要知道什么才能知道谁可以渲染那个着色器。是否仅检查哪个GLSL版本支持哪个功能?或者还有什么要知道的吗?我想100%确定何时切换到回退渲染以及何时使用GLSL渲染。我知道如何检索GLSL和OpenGL版本字符串。 最佳答案 如果glLinkProgram设置GL错误状态,然后着色器与卡不兼容。

c++ - 我的太阳系有问题

所以,这是我的问题。我应该做一个以太阳为中心,行星围绕旋转的太阳系;每个行星都应该有自己的卫星。所以,我都做了,但我做不到地球自转...地球绕太阳自转,月球绕地球自转...我怎么能让地球自转?当我在代码中放置另一个“glrotating”命令时,月球坠落地球或发生一些奇怪的事情......下面是我的代码...//EARTH//INFO:1)it's3rdplanetfromtheSun;//2)it's5thlargestplanetintheSolarSystem,withanequatorialradiusof6378.388km;//3)it's3rdfastestplanet,

c++ - OpenGL 2D 中的可变形地形 [Worms like]

我搜索了一段时间,听说有不同的方法可以做到这一点,所以我想我应该来这里看看我应该怎么做,根据我收集到的信息,我应该使用数组中的glBitmap和0s和0xFF值来制作地形。对此有任何意见吗?我尝试将其切换为四边形,但我不确定这是否有效以及它的完成方式。我希望地形能够有隧道,比如蠕虫。2维。这是我到目前为止尝试过的,我试图制作一个glBitmap,所以..pixels=pow(2*radius,2);ras=newGLubyte[pixels];然后全部设置为0xFF,用glBitmap(x,y,0,0,ras)绘制;然后可以检查是否有爆炸,什么不是以及可以将任何像素设置为零。这是一种合

c++ - 3D 应用中的 OpenGL 2D hud

我一直在尝试在我的OpenGL应用程序中创建一个HUD。环顾四周,似乎是使用正射投影来做到这一点,但到目前为止,我还无法让程序正确渲染。发生的事情不是在我的显示器顶部渲染,而是出现奇怪的图形故障,如下所示:如果我注释掉hud代码,一切都会完美呈现。glEnable(GL_DEPTH_TEST);glDepthFunc(GL_LESS);//SetupprojectionmatrixglMatrixMode(GL_PROJECTION);glLoadIdentity();//UsinggluPerspective.It'sprettyeasyandlooksnice.gluPerspec