2014-05-02 52 views
0

所以,我目前正在尝试学习Android的OpenGL ES作为我正在接受的移动编程课程的一部分。我想制作一个快速基本的3D游戏,用户在其中旋转“枪”,并在一定的时间限制内拍摄目标。我遇到的问题是设计我的目标形状。OpenGL ES 1.0 Android - 绘制更多高级形状

我想要目标形状是基本的钻石宝石形状。 我已经阅读了android开发人员指南,用于绘制带有顶点和索引的金字塔/多维数据集,这些顶点和索引描述了要绘制的形状矢量和脸部,但我在获取所需形状方面遇到了很多麻烦。

这里是我的目标的顶点和索引

float[] vertices = 
{ 
    -1.0f, -1.0f, -1.0f, //0. Back Right 
    1.0f, -1.0f, -1.0f, // 1. Back Left 
    0.0f, 1.0f, 0.0f, // 2. Top 
    -1.0f, -1.0f, 1.0f, //3. Front Right 
    1.0f, -1.0f, 1.0f, // 4. Front Left 
    0.0f, -2.0f, 1.0f //5. Bottom 
}; 
byte[] indices = 
{ 
    3, 2, 4, 4, 5, 3, //draw front face 
    0, 2, 4, 5, 4, 0, // draw right face 
    1, 0, 5, 2, 0, 1, // draw back face 
    3, 1, 2, 5, 1, 3 // draw left 
}; // end byte[] indices 
在我试图绘制顶面,高于底面,并在我的形状包裹在一个计数器的时钟明智地指数

这里开始从前面移动到右边,然后分别离开。然而,凭借这一点,我的形状看起来就像是一艘旧式的福克斯星船。我以前寻找过帮助,但找不到任何帮助我的东西,无论是通过我的理解,还是一个类似的问题,但是关于着色器或纹理。

我想我的问题是你如何正确应用这种形状的图纸?我已经尝试过很多反时钟智者的尝试,这些尝试总是把我引向最奇怪的形状。我不认为我完全理解如何按顺序绘制指数。我会张贴一些照片,但我是新来的>>

谢谢你提前给所有帮助。

+0

什么原始您使用的类型(glDrawElements'的'第一个参数)?它是“GL_TRIANGLES”吗?如果没有人跳进去,我今天晚些时候可以看一看。请在纸上画一些草图...... –

+0

是的,它是GL_TRIANGLES。我还没有搞砸其他任何人,仍然想让我的基础知识得到解决。 –

回答

0

您的指数看起来有些混乱起来。根据我的草图,你主要在索引数组中交换顶点3和4。你可以说它不是很正确,因为顶点3被评论为“Front Right”,但它不会显示在“right face”下的索引中。反之亦然,顶点4.大多数三角形是顺时针的。

评论有些误导。 x轴通常从左到右绘制。你有负x坐标标记为“右”的顶点,以及正x坐标标记为“左”的顶点,这看起来很不寻常。

我想知道你是否可以用左手坐标系来定义你的定义,这可以解释上述很多问题。确保始终使用右手坐标系,并从物体外侧观察收卷顺序。

你的意思是把顶点5放在正方形的中心下,还是y偏移有意?我在下面的代码中将它移动到了中心位置,但是您可以在不更改拓扑的情况下将其移动到您的位置。

根据我的素描纸上,正确的版本看起来像这样(未经):

float[] vertices = 
{ 
    -1.0f, -1.0f, -1.0f, //0. Back Left 
    1.0f, -1.0f, -1.0f, // 1. Back Right 
    0.0f, 1.0f, 0.0f, // 2. Top 
    -1.0f, -1.0f, 1.0f, //3. Front Left 
    1.0f, -1.0f, 1.0f, // 4. Front Right 
    0.0f, -2.0f, 0.0f //5. Bottom 
}; 
byte[] indices = 
{ 
    3, 4, 2, 4, 3, 5, //draw front face 
    0, 3, 2, 5, 3, 0, // draw left face 
    1, 5, 0, 2, 1, 0, // draw back face 
    4, 1, 2, 5, 1, 4 // draw right 
}; 
+0

所以,感谢您的回复,我应该确保我的代码是正确的。是的,我的意思是说你就是这样,我甚至没有意识到我的左右两边是相反的。这可以帮助解决我很多困惑。 我不知道我的图纸是否因为我的顶点已关闭或者我没有正确理解索引的绘图顺序而关闭,但我非常感谢您的回复,并且会在纸上画出它以更好地理解它。 –

+0

雷托科拉迪,我想知道你是否可以进一步解释你是如何得到你的纸质草图的?我正在努力获得更复杂的形状(“枪”),以及我基于如何理解索引和对象应该出来的顶点正确的概念。然而,我的22个顶点只有7个被绘制,我不知道这是怎么画的索引或GL_TRIANGLES或其他。谢谢。 –

+0

我真的没有任何神奇的食谱。这是信封(字面上)草图的背面。我绘制了一个三维坐标系,其中x轴向右,y轴向上,z轴向着我。有点像这样,除了不那么漂亮:https://wiki.brown.edu/confluence/display/wdm/3D+Coordinate+System。然后我画点,用它们的索引标记它们,并收集三角形。面向我的三角形的CCW,面向三角形的CW。我从来没有手动构建过复杂的形状。我所做的大部分是解析形状(几何和样条曲面类型的曲面)。 –