标签: opengl

glDrawArray()给出了一个内存异常

循环遍历我想在3D引擎中渲染的所有对象时,尝试调用时出错

glDrawArrays(mesh->primitiveType, 0, mesh->vertexCount); 
Run Code Online (Sandbox Code Playgroud)

因为它试图从位置0x0000000读取,所以显然绑定到mesh-> vertexBuffer索引的指针指向零.这一切都发生在我的RenderableObject类中.此类的实例具有绑定到它们的网格,此网格包含应链接到VertexArray的索引.但显然

glBindBuffer(GL_ARRAY_BUFFER, mesh->vertexBuffer);
Run Code Online (Sandbox Code Playgroud)

失败了.

奇怪的是,它将在我的Mac和各种其他Windows计算机上运行 - 但它不会在这台(Windows)计算机上运行.因为我正在测试我删除了所有3D模型,并发现它是导致问题的原语,不知何故,MSVC++编译器"优化"了我的代码,以便删除所有内容

glGenBuffers(1, &CubeMesh.vertexBuffer);
Run Code Online (Sandbox Code Playgroud)

这可能就是为什么没有任何约束,或者我认为.我禁用了链接器/编译器优化,我现在可以看到allbreakpoints会被击中 - 但我仍然得到相同的异常,而且我完全不知道为什么它不起作用.

整个项目的源代码可以在@ https://github.com/Wrap/TwinGame/tree/master/src找到,据我所知,问题出现在Primitives.cpp和/或RenderableObject.cpp中. (特别是RenderableObject :: Draw();方法)文件.我是否正在尝试阅读受保护的内容,LoadPrimitives()出了什么问题; 方法?

感谢您抽时间阅读.

c++ memory opengl 3d-engine

29
推荐指数
1
解决办法
688
查看次数

使用GLuint而不是unsigned int有什么好处?

我喜欢尽可能更标准,所以当我可以使用原始类型时,为什么要"限制"我的类将其定义为OpenGL类型?有什么优势吗?

c++ opengl

29
推荐指数
1
解决办法
2万
查看次数

如何在OpenGL中使用多个视口?

我需要在两个不同的视口中在OpenGL中显示相同的对象,例如,一个使用ortographic投影,另一个使用透视.为了做到这一点,我是否需要在每次调用glViewport()后再次绘制对象?

opengl viewport

28
推荐指数
3
解决办法
5万
查看次数

在没有中间栅格的情况下在OpenGL中显示SVG

我有一些简单的SVG图片(图标和字形的东西),我想在OpenGL应用程序中显示(使用Qt在Debian上使用C++开发).

显而易见的解决方案是使用ImageMagick库 SVG 转换为光栅图像,纹理将它们映射到一些合适的多边形(或者只使用旧的glDrawPixels).

但是,我想知道是否有任何东西可以将SVG直接转换为一系列OpenGL调用并使用OpenGL的线条,多边形等进行渲染.任何人都知道有什么可以做到这一点?

c++ opengl graphics svg

28
推荐指数
2
解决办法
2万
查看次数

如何在现代OpenGL中进行光线跟踪?

所以,我应该开始点亮我的平面彩色模特.测试应用程序是仅实现最新方法的测试用例,因此我意识到理想情况下它应该实现光线跟踪(从理论上讲,它可能是几年内实时图形的理想选择).

但是我从哪里开始呢?

假设我从未在旧的OpenGL中完成照明,所以我将直接使用不推荐的方法.

应用程序当前正确设置了顶点缓冲区对象,顶点,法线和颜色输入,并以平面颜色正确绘制和转换空间模型.

是否存在从平坦的彩色顶点到通过GLSL获得正确最终结果所需的全部信息的来源?理想情况下,可能需要任何其他额外的照明方法来补充它.

opengl graphics raytracing opengl-3

28
推荐指数
3
解决办法
4万
查看次数

gluLook解释?

试图理解gluLookAt,特别是最后3个参数.

有人可以解释一下吗?

gluLookAt(camera[0], camera[1], camera[2], /* look from camera XYZ */ 
          0, 0, 0,  /* look at the origin */ 
          0, 1, 0); /* positive Y up vector */
Run Code Online (Sandbox Code Playgroud)
  1. 它是什么意思"正Y向量"?
  2. 是否可以将最后一个向上矢量3参数作为全1,例如1,1,1?并且,如果可能的话,它究竟意味着什么?
  3. up向量是否有可能具有大于1的值,例如2,3,4?

谢谢.

opengl

28
推荐指数
4
解决办法
2万
查看次数

glPixelStorei(GL_UNPACK_ALIGNMENT,1)缺点?

总是使用1的alginment有什么缺点?

glPixelStorei(GL_UNPACK_ALIGNMENT, 1)
glPixelStorei(GL_PACK_ALIGNMENT, 1)
Run Code Online (Sandbox Code Playgroud)

它会影响现代gpus的性能吗?

c++ opengl textures alignment pbo

28
推荐指数
2
解决办法
2万
查看次数

推荐的文件格式和图形库,用于将3D模型导入OpenGL/C++项目?

如果你想:

  • 在3D编辑器中建模对象,例如Blender,Maya等
  • 将模型导出为数据/文件格式
  • 使用OpenGL和C/C++将模型导入项目

然后:

  • 您建议导出哪种文件格式,即简单性,可移植性和兼容性(即普通/流行)?
  • 您建议使用哪些图形库将模型导入OpenGL C/C++项目(即最好是开源)?
  • 另外,是否存在也捕获动画的数据/文件格式,即"动画模型"格式,使得动画可以在3D编辑器中建模并且以某种方式在代码内部调用(例如,动画序列中的帧的可访问性或其他一些用于保存/加载与随时间变化相关的详细信息的范例?

一般来说,我正在寻求简单性作为优先事项,即帮助开始结合我在艺术和计算机科学中的背景.我是麻省大学的计算机科学专业,同时,在我的大学选修平面设计课程,以及在夏季/冬季课程期间在波士顿艺术学院上课,这是一种"伪"的双学位艺术.换句话说,我不是一个完整的新手,但与此同时我并不是真的想要那些因疯狂的高级配置而过度使用的选项,这使得开始使用基本的示范项目变得非常困难; 即作为理解如何弥合这两个世界之间差距的第一步,例如创建一个具有用户可以与之交互的3D角色的节目.

c++ opengl 3d graphics file-format

28
推荐指数
2
解决办法
9773
查看次数

眼睛空间坐标究竟是什么?

当我学习OpenGL时,我常常偶然发现所谓的眼睛空间坐标.

如果我是对的,你通常有三个矩阵.模型矩阵,视图矩阵和投影矩阵.虽然我不完全确定背后的数学是如何工作的,但我确实知道转换坐标到世界空间,视图空间和屏幕空间.

但是眼睛空间在哪里,我需要将哪些矩阵转换为眼睛空间?

opengl camera projection matrix coordinates

28
推荐指数
3
解决办法
2万
查看次数

我应该在统一缓冲区或着色器存储缓冲区对象中使用`vec3`吗?

vec3类型是一个非常好的类型.它只需要3个浮点数,我的数据只需要3个浮点数.我想在UBO和/或SSBO的结构中使用一个:

layout(std140) uniform UBO
{
  vec4 data1;
  vec3 data2;
  float data3;
};

layout(std430) buffer SSBO
{
  vec4 data1;
  vec3 data2;
  float data3;
};
Run Code Online (Sandbox Code Playgroud)

然后,在我的C或C++代码中,我可以这样做来创建匹配的数据结构:

struct UBO
{
  vector4 data1;
  vector3 data2;
  float data3;
};

struct SSBO
{
  vector4 data1;
  vector3 data2;
  float data3;
};
Run Code Online (Sandbox Code Playgroud)

这是一个好主意吗?

opengl opengl-es glsl vulkan

28
推荐指数
1
解决办法
4507
查看次数