小编GDN*_*DN9的帖子

对于每个渲染的网格,我是否必须为每个帧调用glVertexAttribPointer()?

我已经看到了其他人的代码,他们在初始化vao时只调用了glVertexAttribPointer().当我这样做时,只有我场景中的第一个对象被渲染,但是如果我每个帧调用它*每个对象,一切都会很好......这是否意味着我必须在绘制之前为每个对象设置glVertexAttribPointer()?还是我错过了什么?!

        glBindVertexArray(mesh->getVao());
        glBindBuffer(GL_ARRAY_BUFFER, mesh->getVbo());

        for(int i = 0; i < 5; i++)
            glEnableVertexAttribArray(i);

        // Vertex Positions
        glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, (void*)*offset);
        offset++;
        // Vertex UVs
        glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 0, (void*)*offset);
        offset++;
        // Vertex Normals
        glVertexAttribPointer(2, 3, GL_FLOAT, GL_FALSE, 0, (void*)*offset);
        offset++;
        // Vertex Tangents
        glVertexAttribPointer(3, 3, GL_FLOAT, GL_FALSE, 0, (void*)*offset);
        offset++;
        // Vertex Binormals
        glVertexAttribPointer(4, 3, GL_FLOAT, GL_FALSE, 0, (void*)*offset);

        // Draw
        glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, mesh->getVbo());
        glDrawElements(GL_TRIANGLES, mesh->getNumberOfIndices(), GL_UNSIGNED_SHORT, (void*)0);

        for (int i = 0; i < 5; i++)
            glDisableVertexAttribArray(i); …
Run Code Online (Sandbox Code Playgroud)

c++ opengl opengl-3

6
推荐指数
1
解决办法
823
查看次数

OpenGL 渲染到透明纹理

我有一个系统,可以使用 C++ 中的 OpenGL 将不同的对象渲染成不同的 RGBA 纹理。我想将这些纹理叠加在一起,但我的问题是每个纹理都有 glClearColor 渲染到其中。

如何告诉 OpenGL 将纹理的 ClearColor 部分设为透明(0.0f alpha),以便我仍然可以看到其他图层后面的图层部分?

opengl transparency framebuffer

5
推荐指数
1
解决办法
1508
查看次数

如何修改类中的值?(C++)

我只是试图从主文件中添加或减去类中的值,但似乎总是将此值重置为零.作为初学者,我真的不明白为什么?!每次我打印player.worldPositionY它说要么-1,1,或0(如果既不1或2个被选定- moveForward或moveBack)

我有两个简单的文件,Main.cpp:

#include <iostream>
#include "player.h"

using namespace std;

int keyboardInput;

int main()
{
    Player player;

    cin.get();
    cin >> keyboardInput;

    if (keyboardInput == 1){
        player.moveForward();
    } else if (keyboardInput == 2){
        player.moveBack();
    }

    cout << "Y: " << player.worldPositionY << endl;
    main();
}
Run Code Online (Sandbox Code Playgroud)

还有一个玩家:

class Player {
public:
    int worldPositionY = 0;

    void moveForward();
    void moveBack();
};

void Player::moveForward(){worldPositionY += 1;}

void Player::moveBack(){worldPositionY -= 1;}
Run Code Online (Sandbox Code Playgroud)

我显然遗漏了一些东西.请帮忙!

c++

3
推荐指数
1
解决办法
115
查看次数

GLFW输入状态

我在使用GLFW的输入系统时遇到了困难,弄清楚如何让它按照我想要的方式工作,所以我来到了有更多智慧经验的人.使用GLFW 3.

有3种状态0释放,1按和2重复.这正是我想要的,只有从按下到重复的关键状态需要大约一秒钟才能改变.理想情况下,我希望它只有1帧状态"按",然后变为重复状态.

目标:能够根据我的密钥的状态轻松调用函数,如下所示:

  • 按Tap(做一次)

  • 重复连续(每帧都做)

  • 释放不要回应

链接

请查看上面链接中的文件,如果还有其他方法,请告诉我.或者这种做法本身就是垃圾,我这样做的方式是什么?谢谢大家,所有反馈和帮助相关.

c++ input glfw

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

为什么这段代码在 Debug 模式下运行速度比 Release 模式慢 100 倍以上?

重新发帖原因:

本来我只得到一个回复​​,只是指出标题夸大了。因此,再试一次,也许这次会有更多的人看到这个问题,因为我真的不知道还能看哪里......我会确保删除原来的问题以避免重复,并保留这个新问题。我并不是想向论坛发送垃圾邮件。

请随意在编辑时删除上面的文本,我只是想解释为什么我要重新发布 - 但这并不是问题的一部分。

所以,最初的问题是:

我的程序中有一些函数在 Visual Studio Community,2015 中的调试模式下运行速度非常慢。它们是用于“索引”3D 模型顶点的函数。

通常情况下,我准备好调试模式会慢一点,可能慢 2 -3 倍。但...

发布模式下,程序将在大约2 - 3 秒内启动并索引模型。完美的。

然而,在调试模式下,我的程序需要7 分钟以上才能真正响应、开始渲染并接受输入。它在索引一个模型时卡住了七分钟多。在此期间程序完全冻结。

相同的模型在“发布”模式下加载和索引只需不到 3。调试过程中怎么可能花费如此长的时间?

调试和发布模式都是标准的开箱即用模式。我不记得更改过其中任何一个的任何设置。

以下是在调试模式下减慢程序速度的代码:

// Main Indexer Function
void indexVBO_TBN(
std::vector<glm::vec3> &in_vertices,
std::vector<glm::vec2> &in_uvs,
std::vector<glm::vec3> &in_normals,
std::vector<glm::vec3> &in_tangents,
std::vector<glm::vec3> &in_bitangents,

std::vector<unsigned short> & out_indices,
std::vector<glm::vec3> &out_vertices,
std::vector<glm::vec2> &out_uvs,
std::vector<glm::vec3> &out_normals,
std::vector<glm::vec3> &out_tangents,
std::vector<glm::vec3> &out_bitangents){

int count = 0;

// For each input vertex
for (unsigned int i = …
Run Code Online (Sandbox Code Playgroud)

c++ debugging performance visual-studio-2015

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