草庐IT

opengl-compat

全部标签

c++ - 不完整的球体 OpenGL

我想使用VBO绘制一个球体作为顶点、颜色和UV坐标作为纹理。我的问题是球体没有“封闭”,原点有一个洞。我知道这是因为我的代码取决于每个顶点之间的(1/segments)距离;我正在处理segments=40。我知道,如果我提高那个值,洞会变低,但程序会变慢。不知道有没有办法在不增加变量的情况下消除这个洞。代码如下:for(inti=0;i这是我的输出: 最佳答案 我不认为这是一个洞。您绘制了一个线段太多,并导致它在南极绘制额外的三角形,纹理环绕:for(inti=0;i在第一个循环迭代中,i=0,角度将小于-0.5*pi,导致图片中

c++ - OpenGL 无绑定(bind)纹理函数 glMakeTextureHandleNonResident 实际上做了什么?

我有一个测试无绑定(bind)纹理的工作原型(prototype)。我有一台相机可以平移超过6GB的纹理,而我只有2GB的VRAM。我有一个内部平截头体,用于获取视口(viewport)中的对象列表以进行渲染,还有一个外部平截头体,用于排队(使驻留)即将渲染的纹理,所有其他纹理,如果它们是常驻的,使用函数glMakeTextureHandleNonResident使之非常驻。程序运行,但gpu的VRAM表现得好像它有一个GC步骤,它以随机时间间隔清除VRAM。当它执行此操作时,我的渲染完全卡住,但随后跳到正确的帧,最终恢复到60FPS。我很好奇glMakeTextureHandleNo

c++ - OpenGL 拒绝绘制三角形

我试图在OpenGL的窗口中绘制一个大三角形。我的程序编译并运行,但我的窗口中只有黑屏。我检查并仔细检查了多个教程,我的步骤似乎是正确的...我是否遗漏了一些明显的东西?这是完整的程序:#include#include#include#includeGLuintVBO;structvector{float_x;float_y;float_z;vector(){}vector(floatx,floaty,floatz){_x=x;_y=y;_z=z;}};voidrender(){glClear(GL_COLOR_BUFFER_BIT);glEnableVertexAttribArray

c++ - OpenGL:使场景适合屏幕

我有一个带透视投影的3D场景。我想根据边界框(min和max)使场景适合屏幕。我的场景是这样居中的:glm::vec3center=(min+max)/2.0f;rootNode->translate(-center.x,-center.y,-center.z);现在我需要一个缩放因子来缩放我的rootNode以适应屏幕。我该怎么做?(这:8.070HowcanIautomaticallycalculateaviewthatdisplaysmyentiremodel?(Iknowtheboundingsphereandupvector.)没有帮助,因为它基于正交投影)

c++ - 具有共享 OpenGL 上下文的 QOpenGLWidget?

我有一个现有的OpenGL上下文,我想与新的QOpenGLWidget共享。我知道我可以做到:创建QOpenGLWidget等到initializeGL被调用并保存上下文创建新的QOpenGLContext,并与保存的上下文共享但是,我想按其他顺序进行:创建QOpenGLContext创建QOpenGLWidget,提供现有上下文并共享这可能吗? 最佳答案 编辑,我对QOpenGLFramebufferObject了解不多,所以请忽略我之前的回答内容。在QOpenGLWidget中,它总是将其上下文设置为与其最近的顶级窗口(如果它是

c++ - 如何使 OpenGL 视口(viewport)具有渲染到其中的 QML 项目的确切大小和位置?

我正在尝试在1280x720窗口中呈现一个640x360红色方block。问题是OpenGL的视口(viewport)不会自动位于Qt窗口系统中正方形占据的区域内。也就是说,如果我的视频对象有640x360尺寸,OpenGl视口(viewport)仍然有1280x720尺寸(为什么?)。无论如何,我可以通过使用glViewport(this->x,this->y,this->width,this->height);来解决这个问题。问题在于,在OpenGL中,坐标系的原点在左下角,this->x,this->y,this->width,this->height来自对象的坐标在QML语法中

c++ - 放大鼠标,考虑相机翻译? (OpenGL)

这是我的问题,我有一个比例点,即未投影的鼠标位置。我还有一个“基本上通过X和Y平移所有对象的相机。我想要做的是实现缩放到鼠标位置。我试过这个:1.Findthemouse'sxandycoordinates2.Translateby(x,y,0)toputtheoriginatthosecoordinates3.Scalebyyourdesiredvector(i,j,k)4.Translateby(-x,-y,0)toputtheoriginbackatthetopleft但这并不影响相机的翻译。我怎样才能正确地做到这一点。谢谢glTranslatef(controls.MainGl

c++ - 如何在 C++ 和 OpenGL 中分析我自己的函数?

在C++/OpenGL中是否有任何简单易行的功能配置文件?我能找到的只有gDEBugger。浏览文档我找不到做我想做的事情的方法。让我解释一下...正如我在其他问题中所说,我玩的是防御塔游戏。目前他们只有3个,但这个数字是可配置的。我有一个适用于所有塔的绘图函数(这个函数可能会调用其他函数,没关系),我想分析这个单一的函数(对于3个塔,然后再次增加数量和分析)。然后我想为塔实现显示列表,进行相同的分析,看看在这种特定情况下使用显示列表是否有任何好处。对于此类任务,您推荐使用哪种分析工具?如果重要的话,我正在使用VisualStudio10在Windows上编写OpenGL。或者这可以用

C++ Opengl 渲染图像的一部分

假设我有一个获取GLuint纹理作为参数的方法,我想渲染它的一部分。以图block集为例,我希望能够在加载关卡时加载图block集并渲染它的部分(图block)。如果我能够以某种方式从要绘制的图block集的像素坐标中定义高度、宽度、posX和posY,那将是最佳选择。我已经尝试了几个小时,如有任何帮助,我们将不胜感激。我目前如何绘制纹理的简化版本:voidRender::draw(GLuinttexture,floatposX,floatposY,floatsizeX,floatsizeY){glEnable(GL_BLEND);glBlendFunc(GL_SRC_ALPHA,GL

c++ - OpenGL - 围绕 Y 轴旋转 'Curve'

根据我在MathStackexchange上的question:我正在为我的3D图形类(class)做一个项目。该项目是用C++和OpenGL/Glut构建的。基本上,我创建了一个水平矩形窗口,segmentation为两个正方形。在左侧,我有一个二维坐标平面,它允许用户指向并单击并定义轮廓“曲线”。然后我需要将这条曲线围绕Y轴绕n次。那么,有人能指导我如何使用三角函数计算连续点的X和Z值吗?例如,如果用户点击并创建点:(1,1,0)并且它们的扫描分辨率(n)设置为10,然后我需要围绕Y轴每36(360/10)度重绘该点。我假设三角函数会在这方面对我有帮助,我的假设是否正确?如果是这样