Horde3D无法渲染到OS X中的GLFW窗口

时间:2013-11-16 02:43:42

标签: c++ macos glfw

我是一位经验丰富的程序员,但对C ++来说却是全新的。我在OS X 10.5上的Xcode 5中使用了GLFW 3和Horde3D。

我已经按照GLFW和Horde3D的基本教程进行了操作。我能够创建一个窗口,使其成为当前上下文,显然一个简单的游戏循环运行良好,包括h3dRender( cam )。但我得到的只是一扇黑色的窗户。关于我缺少的步骤(或整个概念)的任何见解?

谢谢! (以下代码)

#include <iostream>
#include <GLFW/glfw3.h>
#include <Horde3D.h>
#include <Horde3DUtils.h>

GLFWwindow* window;
H3DNode model = 0, cam = 0;
int winWidth = 640, winHeight = 480;
float fps = 24;
static float t = 0;
bool running = false;

bool initWindow();
bool initGame();
void gameLoop();
void errorListener( int, const char* );
void windowCloseListener( GLFWwindow* );

int main(void)
{
    glfwSetErrorCallback( errorListener );

    if ( !initWindow() ) return -1;
    if ( !initGame() ) return -1;

    running = true;
    while ( running )
    {
        gameLoop();
    }

    h3dRelease();
    glfwDestroyWindow( window );
    glfwTerminate();
    exit( EXIT_SUCCESS );
}

bool initWindow()
{
    if ( !glfwInit() ) return -1;

    window = glfwCreateWindow( winWidth, winHeight, "Hello World", NULL, NULL );
    if ( !window )
    {
        glfwTerminate();
        exit( EXIT_FAILURE );
    }

    glfwSetWindowCloseCallback( window, windowCloseListener );
    glfwMakeContextCurrent( window );
    glfwSwapInterval( 0 );

    return true;
}

bool initGame()
{
    if ( !h3dInit() ) return false;

    H3DRes pipeRes = h3dAddResource( H3DResTypes::Pipeline, "standard.pipeline", 0 );
    H3DRes modelRes = h3dAddResource( H3DResTypes::SceneGraph, "character.scene.xml", 0 );
    H3DRes animRes = h3dAddResource( H3DResTypes::Animation, "walk.anim.xml", 0 );
    h3dutLoadResourcesFromDisk( "" );

    model = h3dAddNodes( H3DRootNode, modelRes );
    h3dSetupModelAnimStage( model, 0, animRes, 0, "", false );

    H3DNode light = h3dAddLightNode( H3DRootNode, "Light 1", 0, "LIGHTING", "SHADOWMAP" );
    h3dSetNodeTransform( light, 0, 20, 0, 0, 0, 0, 1, 1, 1 );
    h3dSetNodeParamF( light, H3DLight::RadiusF, 0, 50.0f );

    cam = h3dAddCameraNode( H3DRootNode, "Camera", pipeRes );

    h3dSetNodeParamI( cam, H3DCamera::ViewportXI, 0 );
    h3dSetNodeParamI( cam, H3DCamera::ViewportYI, 0 );
    h3dSetNodeParamI( cam, H3DCamera::ViewportWidthI, winWidth );
    h3dSetNodeParamI( cam, H3DCamera::ViewportHeightI, winHeight );
    h3dSetupCameraView( cam, 45.0f, ( float ) winWidth / winHeight, 0.5f, 2048.0f );
    h3dResizePipelineBuffers( pipeRes, winWidth, winHeight );

    return true;
}

void gameLoop ()
{
    t = t + 10.f * ( 1/ fps );
    h3dSetModelAnimParams( model, 0, t, 1.0f );
    h3dSetNodeTransform( model, t * 10, 0, 0, 0, 0, 0, 1, 1, 1 );
    h3dRender( cam );
    h3dFinalizeFrame();
    glfwSwapBuffers( window );
    glfwPollEvents();
}

void errorListener( int error, const char* description )
{
    fputs( description, stderr );
}

void windowCloseListener( GLFWwindow* window )
{
    running = false;
}

1 个答案:

答案 0 :(得分:0)

您无法查看任何内容,因为尚未为您的应用程序加载资源。您需要指定保存资源的目录路径(像character.scene.xml,walk.anim.xml等资源)作为h3dutLoadResourcesFromDisk()的参数