小编gen*_*ult的帖子

OpenGL垂直同步使渲染速度更快

我注意到当我渲染一个简单的图元时,就像旋转的立方体一样,我将每个角度增加0.1,然后通过传统的while(!done)循环,这是我在垂直同步开启时的结果与关闭时的结果(如在我的nVidia控制面板中改变了)在速度方面有很大的不同.

例如,我使用以下代码:

while (!done)
{
    PeekMessage(&msg, hWnd, NULL, NULL, PM_REMOVE);

    if (msg.message == WM_QUIT)
    {
        done = true;
    }
    else
    {
        angle += 0.1;

        if (angle >= 360.0)
        {
            angle = 0.0;
        }

        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
        glLoadIdentity();         

        glTranslatef(0.0f, 0.0f, -5.0f);

        glPushMatrix();
            glRotatef(angle, 1.0f, 0.0f, 0.0f);
            glRotatef(angle, 0.0f, 1.0f, 0.0f);
            glColor3f(1.0f, 0.0f, 0.0f);
            glutSolidCube(2.0f);
        glPopMatrix();

        glFlush();
        SwapBuffers(hDC);

        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
}
Run Code Online (Sandbox Code Playgroud)

当强制关闭垂直同步时,此立方体旋转的速度比强制垂直同步时快得多.现在,在游戏中,当启用垂直同步时,FPS锁定为60 fps,并且当禁用时,可以自由跳转到显示器允许的最高值.这可能与它有关.

我可以通过每次传递增加或减少我的角度来轻松解决这个问题,有没有办法让我的立方体以相同的方式旋转,尽管vsync开启或关闭?

c++ opengl

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

C++ Cubic Spline轨迹

我正在编写一个C++程序来为一组点生成三次样条轨迹.这些点不需要沿x轴排序.例如,它可能是一个圆圈等.

我在网上找到了一些库,例如,ALGLIB库或这里的类https://www.marcusbannerman.co.uk/index.php/home/42-articles/96-cubic-spline-class.html,但所有这些库都对数据点进行排序.我不需要这个,因为我想要生成的东西就像一个圆圈.反正有没有实现这个目标?

c++ math spline polynomial-math

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

是否可以在不声明表面法线的情况下使用OpenGL照明?

是否可以在不声明曲面法线的情况下声明对象上的光照?

我愿意做的步骤是:

1. enable lighting
2. define surface material 
3. define lighting position
4. define lighting parms : ambient....
Run Code Online (Sandbox Code Playgroud)

这还不够,还是我必须放在哪里呢?

opengl glut opengl-es-lighting

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

初学者openGL和Android混淆

我知道openGL用于游戏,但是可以在Android Views等东西上使用OpenGL吗?例如,单击按钮将导致按钮(使用OpenGL爆炸/跳舞/ etc/etc).

android opengl-es

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

在c ++中保存和加载大型数组

我需要将一个大的3D整数数组保存到一个文件中,然后再用C++加载它.它是256*256*256 = 16777216个整数.

保存并再次加载它的最佳方法是什么?我最感兴趣的是快速加载时间.

c++ arrays optimization file

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

GLMmodel顶点中的-431602080.000000值是什么意思?

我使用GLMmodel对象来表示C++程序中的Google Sketch Up模型.这些对象有一个成员(顶点),其中包含对象的所有顶点的列表,如下所示:[GLfloat x顶点1的组件,顶点1的GLfloat y组件,顶点1的GLfloat z组件,GLfloat x组件顶点2 ...].当我读取所有这些值时,我得到所有这些值的小数字,除了前三个(第一个顶点的坐标),它们都是三个-431602080.000000.这在我的程序中没有意义.我用谷歌搜索了它,我发现这个值经常出现在C++程序中,但我不知道它是什么意思.有任何想法吗?

c c++ 3d vertices glm-math

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

Coord纹理数组与glDrawElements无法正常工作

我的程序的目的是加载和显示每个面上具有相同纹理的简单立方体.但问题是输出不是很好(只有4个面被正确纹理化).我在纹理数组中尝试了很多坐标组合,但大多数情况下它更糟糕.是否可以使用glDrawElements函数正确设置纹理?

#define OFFSET_BUFFER(bytes) ((GLfloat *)NULL + bytes)

GLfloat vertices[] =
{
    -1.0, -1.0, -1.0,
    1.0, -1.0, -1.0,
    1.0, 1.0, -1.0,
    -1.0, 1.0, -1.0,
    -1.0, -1.0, 1.0,
    1.0, -1.0, 1.0,
    1.0, 1.0, 1.0,
    -1.0, 1.0, 1.0,
};

GLubyte indices[] =
{
    0, 1, 2, 3,
    4, 7, 6, 5,
    0, 4, 5, 1,
    3, 2, 6, 7,
    0, 3, 7, 4,
    1, 5, 6, 2
};

GLfloat textures[] =
{
    0,0, 1,0, 1,1, 0,1,
    0,1, 1,1, 1,0, 0,0,
    /*//0,0, 1,0, 1,1, …
Run Code Online (Sandbox Code Playgroud)

arrays opengl textures sdl cube

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

OpenGL中的CSG建模

我正在处理使用OpenGL进行构造实体几何(CSG)建模.

我想知道如何实现二进制操作.我读了一些关于金羽算法的知识,我知道OpenCSG,但在阅读了它的源代码之后,我觉得它太复杂了.我只需要一个简单的最短OpenGL示例如何实现它.

算法没有限制,只要它易于实现.

opengl graphics modeling csg

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

沿枪执行缩放

我正在制作一些游戏,而且我已经完成了所有游戏,但并没有放大枪的能力,因为我不知道如何设置它.游戏是使用openGL在3D中完成的,所以我想听听你关于如何实现它的建议.如果需要,可以提供代码的片段.

c++ opengl

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

尝试绑定纹理时GL_INVALID_OPERATION

我的引擎中有多个纹理后遇到问题.

我的渲染代码目前看起来像这样:

void Renderer::render() {
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    checkGlError("glClear");

    for (vector<Node*>::const_iterator it = renderArray_.begin(); it != renderArray_.end();
            it++) {
        Node* node = *it;
        EntityModel* entity =
                static_cast<EntityModel*>(resourceManager_->getResource(
                        (*it)->getEntity()));
        if (entity == 0 || entity->getVertices() == 0 || entity->getVertices()->size() == 0) {
            LOGI("Empty entity %s.", node->getName().c_str());
            continue;
        }
        Resource* resource = resourceManager_->getResource(node->getShader());
        Shader* shader = static_cast<Shader*>(resource);
        Resource* resource2 = resourceManager_->getResource(entity->getTexture());
        Image* image = static_cast<Image*>(resource2);
        mat4 proj;
        Matrix::projection3D(proj, 45.0f,
                (float) nScreenWidth_ / nScreenHeight_, 0.1f, 100.0f);
        mat4 res;
        Matrix::multiply(proj, node->getMatrix(), res);

        // Select …
Run Code Online (Sandbox Code Playgroud)

opengl-es opengl-es-2.0

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