2010-09-20 62 views
1

我開始將我的遊戲從C/OpenGL代碼庫移植到XNA。我現在纔開始使用渲染代碼,我想知道從一個系統轉換到最好的方法是什麼,在這個系統中,只需將一個紋理與一個調用進行綁定,然後將頂點緩衝區對象輸出到XNA等效方法集?我可以看到你如何傳遞頂點數據,但我不確定你是如何綁定紋理的。必須全部在着色器中完成,還是在XNA中有一個簡單的過程?適用機型OpenGL被移植到XNA

我的主要渲染代碼如下(我的小變量名道歉)

glEnable(GL_TEXTURE_2D); 
glEnable(GL_CULL_FACE); 

glBindTexture(GL_TEXTURE_2D, obj->tx); 

glColor4f(c.r, c.g, c.b, c.a); 

glBindBuffer(GL_ARRAY_BUFFER, obj->iVBO); 
glVertexPointer(3, GL_FLOAT, (sizeof(float) * 3) + (sizeof(float) * 2), 0); 
glTexCoordPointer(2, GL_FLOAT, (sizeof(float) * 3) + (sizeof(float) * 2), (const GLvoid*)(4 * 3)); 
glDrawArrays(GL_TRIANGLES, 0, obj->iSize); 
glBindBuffer(GL_ARRAY_BUFFER, 0); 

回答

2

the MSDN documentation here,這裏是你如何綁定一個紋理(二,其實):

graphics.GraphicsDevice.Textures[0] = firstTexture; 
graphics.GraphicsDevice.Textures[1] = secondTexture; 

然後您分別使用Indices屬性和SetVertexBuffer()方法將您的頂點和索引緩衝區(根據需要)設置爲設備。然後用GraphicsDevice.Draw*()方法之一繪製它們。

如果您只是渲染模型,那麼您可能需要查看Model類(它將爲您處理這類事情,包括通過內容管道導入模型)。

另外,如果您使用的是BasicEffect,它也有一個Texture成員,您可以使用它來處理紋理。

0

您通常使用GraphicsDevice.Textures屬性將紋理綁定到設備。代碼示例使用XNA 4.0。代碼的端口如下所示:

 GraphicsDevice.RasterizerState = RasterizerState.CullCounterClockwise; 
     GraphicsDevice.Textures[0] = obj.tx; 
     GraphicsDevice.SetVertexBuffer(obj.iVBO); 

     effectColorParameter.SetValue(c.ToVector4()); 
     effect.CurrentTechnique.Passes[0].Apply(); 

     GraphicsDevice.DrawPrimitives(PrimitiveType.TriangleList, 0, obj.triangleCount); 
     GraphicsDevice.SetVertexBuffer(null); 

或者,如果您要使用BasicEffect,則將紋理直接綁定到效果。

 basicEffect.Texture = obj.tx; 
     basicEffect.TextureEnabled = true;