微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在Xamarin中使用OpenGL绘制立方体的一个面

如何解决如何在Xamarin中使用OpenGL绘制立方体的一个面

我可以在以下方面寻求帮助吗?

我有一个Xamarin Android应用程序绘制一个立方体,效果很好。多维数据集定义为:

private float[] m_vertex_buffer_data = { // Front face
                                                 -1.0f,-1.0f,1.0f,// Back face
                                                 -1.0f,// Top face
                                                 -1.0f,// Bottom face
                                                 -1.0f,// Right face
                                                 1.0f,// Left face
                                                 -1.0f,-1.0f };

        private uint[] m_indices_buffer_data = { 0,1,2,3,// front
                                                 4,5,6,4,7,// back
                                                 8,9,10,8,11,// top
                                                 12,13,14,12,15,// bottom
                                                 16,17,18,16,19,// right
                                                 20,21,22,20,23 };   // left

在渲染代码中,要调用整个多维数据集,请执行以下操作:

GL.DrawElements(BeginMode.Triangles,m_indices_buffer_data.Length,DrawElementsType.UnsignedInt,m_indices_buffer_data);

如何仅渲染立方体的给定面?

如果我打电话:

GL.DrawRangeElements(PrimitiveType.Triangles,m_indices_buffer_data);

我确实只会得到第一张面孔,但是如果我打电话给我,

GL.DrawRangeElements(PrimitiveType.Triangles,23,m_indices_buffer_data);

我仍然只有第一张面孔。 (如果我使用12而不是6,则会得到前两个面,依此类推)

基本上,对DrawRangeElements的调用忽略了我的第二个参数,我认为这是m_indices_buffer_data数组的偏移量(因此m_indices_buffer_data的元素12至23引用了m_vertex_buffer_data的元素“背面”。)

((我目前没有在任何地方调用GL.BufferData(BufferTarget.ElementArrayBuffer ...我读到某个地方,如果绑定ElementArrayBuffer则DrawRangeElements的最后一个参数的解释不同,这是问题吗?我添加

GL.GenBuffers(1,out m_nIndicesBuffer);
GL.BindBuffer(BufferTarget.ElementArrayBuffer,m_nIndicesBuffer);
GL.BufferData(BufferTarget.ElementArrayBuffer,new IntPtr(m_indices_buffer_data.Length * sizeof(uint)),m_indices_buffer_data,BufferUsage.StaticDraw);

对于我的代码,该应用程序在Android模拟器中崩溃且没有断点)。

感谢您的帮助, 米奇。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。