草庐IT

c++ - QOpenGLWidget 与 QApplication?

我们有一个基于QWidget的应用程序,它以前使用QWindow进行OpenGL渲染。为了在我们的应用程序中适应该窗口,我们必须使用QWidgetQWidget::createWindowContainer(QWindow);以前我们只使用外部QtOpenGL库进行渲染。我们希望从使用QWindow切换到某种QWidget以与触摸手势兼容,并且通常与我们的应用程序的其余部分具有更好的整体兼容性。最新推荐的OpenGL兼容QWidget似乎是QOpenGLWidget,所以我们正在尝试使用它。glContext是我们自己管理的OpenGLContext。现在的问题是QOpenGLWidg

c++ - 奇怪的体素锥体追踪结果

我目前正在使用C++和OpenGL编写体素锥体跟踪渲染引擎。一切都进行得相当顺利,除了对于更宽的锥角我得到了相当奇怪的结果。现在,出于测试的目的,我所做的就是垂直于片段法线射出一个单一的锥体。我只计算“间接光”。作为引用,这是我正在使用的相当简单的片段着色器:#version450coreoutvec4FragColor;invec3pos_fs;invec3nrm_fs;uniformsampler3Dtex3D;vec3indirectDiffuse();vec3voxelTraceCone(constvec3from,vec3direction);voidmain(){FragC

c++ - SwapBuffers 使我的程序崩溃!

我有一个OpenGL程序可以在我所有的计算机上运行,​​但只有一台。这是一款配备Vista64和RadeonHD4850的台式机。问题似乎出在我对SwapBuffers(hdc)的调用中。它编译得很好,然后给我一个异常:Program.exe中0x00000000处的未处理异常:0xC0000005:访问冲突。在调用SwapBuffers之前使用VC++中断显示hdc的值为:0xfe011734{未使用=???}CXX0030:错误:无法计算表达式有人知道会发生什么吗?从一台PC到另一台PC,SwapBuffers有什么变化吗?我已经让它在XP32、XP64和(不同的)Vista64上

c++ - 体绘制问题

我已经准备好了骨架和皮肤。我目前正在学习OpenGL。我想知道如何提取骨架和皮肤的等值面并使骨架在半透明皮肤下可见。从后向前扫描体素时,如何为骨骼和皮肤设置两个阈值并提取等值面?一旦找到超过阈值的体素,我就可以通过有限差分计算法vector。最后,我可以通过漫反射计算颜色:N*(0,0,1)其中N是法vector,*是点积,(0,0,1)是指向相机的vector.混合骨骼和皮肤的颜色,使骨骼出现在半透明的皮肤后面。我知道这个想法,但不知道如何在C++和OpenGL中实现它。 最佳答案 实时体积图形的“圣经”是thisbook.它很好

c++ - 为 openGL 提供 3D 坐标的顺序是什么?

我希望有人能为我阐明这个问题。如果给我一个点(i,j,k),我可以制作以下立方体:8______K_______71=i,j,k/|/|2=i+1,j,kL/|J/|3=i+1,j+1,k/|H/|4=i,j+1,k5/______I_____/6|G5=i,j,k+1||||6=i+1,j,k+1||||7=i+1,j+1,k+1E|4|________|F__|38=i,j+1,k+1|/c|/|/D|/B|/___________|/1A2其中数字1-8是立方体的每个顶点,字母A-L是立方体每条边的中点。我正在尝试实现一个行进立方体算法,但我不知道为我找到的每个三角平面给出点的顺

c++ - 顶点着色器的定点算法

如果我使用定点(或描述最小游戏单元的1的整数)来描述我的顶点vector,我如何设置OpenGL/特征转换来使用它?如果我在我的顶点着色器中这样做:gl_Position=projectionMatrix*viewMatrix*modelMatrix*vec4(in_Position,1.0)如果我将in_Position作为GL_INT的vec3传入,而我将矩阵作为GL_FLOATmat4传入,是否会进行正确的转换?有性能成本吗?是否可以将我的转换矩阵也设置为定点?这是通过2D游戏完成的,我认为这比3D游戏更可行。我真的更喜欢准确性,因为当事物远离原点时,大map上的位置似乎会下降。

c++ - 使用多个 Canvas 时,FTGL 纹理字体仅显示黑框

我在FTGL中使用纹理字体将字体渲染到多个Canvas中作为轴的标签等。我的第一个情节很好。然而,所有后续Canvas都将我的纹理字体呈现为简单的黑色方block。我还注意到有些数字不会显示在实际呈现的Canvas上。“中心时间”应显示8.3956,但显示以下内容。字体渲染如下:glPolygonMode(GL_FRONT_AND_BACK,GL_FILL);PushGLMatrices();GrSetPixelProjection();glTranslatef(pixelX,pixelY,0.0);glRotatef(ang,0.0,0.0,1.0);savedFont->Rende

c++ - OpenGL 纹理的奇怪事件

我相当确定我的纹理加载没有问题,但是,我无法渲染它们!我启用GL_TEXTURE_2D在我初始化GL时。然后我用这个函数加载纹理:GLuintloadTexture(std::stringfilepath){SDL_Surface*image;if(image=SDL_LoadBMP(filepath.c_str())){GLuinttex_id;glGenTextures(1,&tex_id);glBindTexture(GL_TEXTURE_2D,tex_id);glTexImage2D(GL_TEXTURE_2D,0,3,image->w,image->h,0,GL_RGB,GL

c++ - 将 OpenGL 模板功能移植到 DirectX 11

我有一些用OpenGL编写的渲染代码。我使用模板缓冲区来实现裁剪://Let'sassumethisisdoneinrenderloop.if(!already_created()){create_stencil_attachment_and_bind_to_FB_as_depth_stencil_attachment();}glEnable(GL_STENCIL_TEST);glColorMask(0,0,0,0);glDepthMask(0);glClearStencil(0);glClear(GL_STENCIL_BUFFER_BIT);glStencilFunc(GL_ALWA

c++ - 带有片段着色器的 OpenGL 3.3 不同颜色

我正在尝试为3个圆圈着色,但只出现了3个白色圆圈。本例中n为3。每个顶点有5个点,2个用于位置,3个用于颜色这里是我认为可能存在问题的地方:glEnableVertexAttribArray(0);glBindBuffer(GL_ARRAY_BUFFER,vertexbuffer);glVertexAttribPointer(0,2,GL_FLOAT,GL_FALSE,5*sizeof(float),(void*)0);glEnableVertexAttribArray(1);glVertexAttribPointer(1,3,GL_FLOAT,GL_FALSE,5*sizeof(fl