2010-06-24 67 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