循环遍历我想在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()出了什么问题; 方法?
感谢您抽时间阅读.
我喜欢尽可能更标准,所以当我可以使用原始类型时,为什么要"限制"我的类将其定义为OpenGL类型?有什么优势吗?
我需要在两个不同的视口中在OpenGL中显示相同的对象,例如,一个使用ortographic投影,另一个使用透视.为了做到这一点,我是否需要在每次调用glViewport()后再次绘制对象?
所以,我应该开始点亮我的平面彩色模特.测试应用程序是仅实现最新方法的测试用例,因此我意识到理想情况下它应该实现光线跟踪(从理论上讲,它可能是几年内实时图形的理想选择).
但是我从哪里开始呢?
假设我从未在旧的OpenGL中完成照明,所以我将直接使用不推荐的方法.
应用程序当前正确设置了顶点缓冲区对象,顶点,法线和颜色输入,并以平面颜色正确绘制和转换空间模型.
是否存在从平坦的彩色顶点到通过GLSL获得正确最终结果所需的全部信息的来源?理想情况下,可能需要任何其他额外的照明方法来补充它.
试图理解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的alginment有什么缺点?
glPixelStorei(GL_UNPACK_ALIGNMENT, 1)
glPixelStorei(GL_PACK_ALIGNMENT, 1)
Run Code Online (Sandbox Code Playgroud)
它会影响现代gpus的性能吗?
如果你想:
然后:
一般来说,我正在寻求简单性作为优先事项,即帮助开始结合我在艺术和计算机科学中的背景.我是麻省大学的计算机科学专业,同时,在我的大学选修平面设计课程,以及在夏季/冬季课程期间在波士顿艺术学院上课,这是一种"伪"的双学位艺术.换句话说,我不是一个完整的新手,但与此同时我并不是真的想要那些因疯狂的高级配置而过度使用的选项,这使得开始使用基本的示范项目变得非常困难; 即作为理解如何弥合这两个世界之间差距的第一步,例如创建一个具有用户可以与之交互的3D角色的节目.
当我学习OpenGL时,我常常偶然发现所谓的眼睛空间坐标.
如果我是对的,你通常有三个矩阵.模型矩阵,视图矩阵和投影矩阵.虽然我不完全确定背后的数学是如何工作的,但我确实知道转换坐标到世界空间,视图空间和屏幕空间.
但是眼睛空间在哪里,我需要将哪些矩阵转换为眼睛空间?
该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)
这是一个好主意吗?