2010-06-24 55 views
1

下午好,不能在OpenGL中繪製三角形,但其他圖元渲染良好

我想學習使用使用OpenGL的圖形庫。我可以繪製2D圖元(文本和線條),但3D三角形不會渲染。我試過所有我能想到的東西,但作爲一個OpenGL新手,我可能錯過了一些明顯的東西。

此代碼不打算高效。我試圖讓它首先工作。

這裏是設置在啓動時:

// 800 by 600 windows 32 bit depth 
    Driver->setDisplay(UDriver::CMode(ScreenWidth, ScreenHeight, 32)); 
    NL3D::CViewport viewport; 
    viewport.initFullScreen(); 
    Driver->setViewport(viewport); 

    NLMISC::CMatrix mtx; 
    mtx.identity(); 
    Driver->setViewMatrix(mtx); 
    Driver->setModelMatrix(mtx); 

    // screen size is same as pixel resolution 
    // CFrustum(float left, float right, float bottom, float top, float znear, float zfar, bool perspective= true) 
    Driver->setMatrixMode2D(CFrustum(0.0f, ScreenWidth, 0.0f, ScreenHeight, -2.0f, 10000.0f, false)); 

下面是我的渲染循環代碼:

static NL3D::CMaterial mat; 
mat.initUnlit(); 
mat.setColor(CRGBA(255, 255, 0, 128)); 

float x = 200.0f; 
float y = 200.0f; 
float width = 200.0f; // (float)ScreenWidth * 0.125f; 
float height = 200.0f; // (float)ScreenHeight * 0.125f; 
static NL3D::CVertexBuffer vb; 
if (vb.getName().empty()) 
    vb.setName("drawBitmap"); 
vb.setVertexFormat(NL3D::CVertexBuffer::PositionFlag | NL3D::CVertexBuffer::TexCoord0Flag); 
vb.setNumVertices(4); 
{ 
    NL3D::CVertexBufferReadWrite vba; 
    vb.lock(vba); 
    vba.setVertexCoord(0, NLMISC::CVector(x, 0, y)); 
    vba.setVertexCoord(1, NLMISC::CVector(x + width, 0, y)); 
    vba.setVertexCoord(2, NLMISC::CVector(x + width, 0, y + height)); 
    vba.setVertexCoord(3, NLMISC::CVector(x, 0, y + height)); 
    vba.setTexCoord(0, 0, 0.f, 1.f); 
    vba.setTexCoord(1, 0, 1.f, 1.f); 
    vba.setTexCoord(2, 0, 1.f, 0.f); 
    vba.setTexCoord(3, 0, 0.f, 0.f); 
} 
dynamic_cast<NL3D::CDriverUser*>(Driver)->getDriver()->activeVertexBuffer(vb); 

static NL3D::CIndexBuffer pb; 
if (pb.getName().empty()) 
    pb.setName("drawBitmap"); 
pb.setFormat(NL_DEFAULT_INDEX_BUFFER_FORMAT); 
pb.setNumIndexes(6); 
{ 
    CIndexBufferReadWrite iba; 
    pb.lock(iba); 
    iba.setTri(0, 0, 1, 2); 
    iba.setTri(3, 2, 3, 0); 
} 

dynamic_cast<NL3D::CDriverUser*>(Driver)->getDriver()->activeIndexBuffer(pb); 
dynamic_cast<NL3D::CDriverUser*>(Driver)->getDriver()->renderTriangles(mat, 0, 2); 

有什麼建議?

謝謝

+2

「我試圖學會使用一個使用OpenGL的圖形庫」 - 也許你應該問一個特定的庫,而不是一般的OpenGL?適當的標籤會爲您的問題提供更合適的編碼器。 – Cogwheel 2010-06-24 22:39:25

+0

我懷疑任何人都熟悉它。它是Ryzome NeL遊戲引擎的一部分。我會試試看。謝謝 – Jay 2010-06-24 22:43:48

回答

1

原來是多個OpenGL上下文。在試圖畫畫之前,它並沒有回頭。

+0

請將此標記爲「解決方案」,以避免將此問題列爲「未答覆」。 – 2010-07-10 18:52:58