小编use*_*725的帖子

将结构/常量保持在单独的标题中

我有一个VECTOR结构,它包含3个整数,i,j和k.我需要在多个头文件中使用此结构.将所有#defines和结构,所有常量移动到标记为"Constants.h"的单独头文件,或者我应该在每个头文件中定义相同的结构(我当前使用它)被认为是不好的做法吗?

c++

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

glMultMatrix/glLoadMatrix比glRotatef或glTranslatef更有效?

假设我有以下代码:

glRotatef(angle, 1.0f, 1.0f, 0.0f);
glRotatef(angle, 0.0f, 1.0f, 0.0f);
glRotatef(angle, 0.0f, 0.0f, 1.0f);
glTranslatef(0.0f, 0.0f -5.0f);
Run Code Online (Sandbox Code Playgroud)

这是否比通过glLoadMatrix函数使用自己的自定义矩阵效率更低,它可以实现相同的功能?

此外,我知道当将矩阵相乘以形成自定义线性变换时,最后一个矩阵乘以是第一个发生的变换.同样,如果我使用上面的代码就是这种情况?它是否会平移,然后围绕Z轴旋转,然后绕y轴和x轴旋转?

c++ opengl

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

WndProc 分配问题

我正在尝试创建一个自定义 GLWindow 类,其中包括我对 OpenGL 窗口的所有设置。但是,我还想在我的 GLWindow 类中包含发送到窗口的消息的 WndProc 回调函数。

GLWindow.h:

class GLWindow
{
    private:
        HWND hWnd;
        HDC hDC;
        HGLRC hRC;
    public:
        GLWindow();

        LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);

        bool Create();

        ~GLWindow();
}

GLWindow.cpp:

GLWindow::GLWindow()
{

}

bool GLWindow::Create(int width, int height, char * title, bool fullscreen)
{
    WNDCLASSEX window;

    HINSTANCE hInstance;

    hInstance = GetModuleHandle(NULL);
    window.cbSize = sizeof(WNDCLASSEX);
    window.cbClsExtra = 0;
    window.cbWndExtra = 0;
    window.hbrBackground = NULL;
    window.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    window.hIconSm = LoadIcon(NULL, IDI_WINLOGO);
    window.hCursor = …
Run Code Online (Sandbox Code Playgroud)

c++

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

创建反射Opengl

我试图在XZ平面上反射一个旋转的立方体(所以最终这是一个3D到2D的投影).但是,我的立方体投影到XZ平面上的点重叠,正如预期的那样,由于立方体是3D并且存在具有相同X值但具有不同y值的点(将2个点投影到同一点上) ).

我的问题是,如何只投影我想要投射到的平面上可见的立方体上的点?

glLoadIdentity();

        glEnable(GL_DEPTH_TEST);
        glCullFace(GL_BACK);

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

        GLfloat matrix[16] = {1.0, 0.0, 0.0, 0.0, 
                              0.0, 0.0, 0.0, 0.0, 
                              0.0, 0.0, 1.0, 0.0, 
                              0.0, 0.0, 0.0, 1.0};

        glPushMatrix();
            glRotatef(angle, 1.0f, 1.0f, 1.0f);

            glBegin(GL_TRIANGLES);
                DrawCube();     
            glEnd();
        glPopMatrix();

        glPushMatrix();
            glTranslatef(0.0f, -1.0f, 0.0f);
            glMultMatrixf(matrix);
            glRotatef(angle, 1.0f, 1.0f, 1.0f);

            glBegin(GL_TRIANGLES);
                DrawCube();
            glEnd();
        glPopMatrix();
Run Code Online (Sandbox Code Playgroud)

c++ opengl

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

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++ ×5

opengl ×3