Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/221.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 索引opengl需要解释吗_Android_Opengl Es - Fatal编程技术网

Android 索引opengl需要解释吗

Android 索引opengl需要解释吗,android,opengl-es,Android,Opengl Es,我正在用android开发一个简单的opengl程序。 我习惯于画一个填充圆,然后用它来做一些事情。 问题只是在绘图部分,可能是因为我不了解如何使用索引 为了得到圆的坐标,我使用了一个简单的数学算法,该算法使用极坐标系获取坐标 for(int i=0;i<360;i++) { buffer[i]=(float)Math.cos(Math.toRadians((double)i))*0.5f; buffer[++i]=(floa

我正在用android开发一个简单的opengl程序。 我习惯于画一个填充圆,然后用它来做一些事情。 问题只是在绘图部分,可能是因为我不了解如何使用索引

为了得到圆的坐标,我使用了一个简单的数学算法,该算法使用极坐标系获取坐标

for(int i=0;i<360;i++)
        {
            buffer[i]=(float)Math.cos(Math.toRadians((double)i))*0.5f;
            buffer[++i]=(float)Math.sin(Math.toRadians((double)i))*0.5f*coaf;
            buffer[++i]=0f;
            // Log.i("",""+buffer[i-2]+" "+buffer[i-1]+" "+buffer[i]);
        }

for(int i=0;i您的值是一团乱麻。如前所述,由于迭代器增量,您只生成120个顶点,而不是360个顶点,但即使您这样做了,您也会使用
360 count
为第一次迭代生成
360
,即361个顶点

您确实需要改进代码以更好地跟踪正在发生的事情。请使用一些常量以确保值正确:

int tessellation = 360; // will have 360 vertices
int dimensionCount = 3; // x, y, z
double angleFraction = 360.0 / (double)tessellation; // How many degrees between 2 points
for(int i=0; i<tessellation; i++) {
    double angle = Math.toRadians((double)i*angleFraction);
    buffer[i*dimensionCount + 0] = (float)Math.cos(angle)*0.5f;
    buffer[i*dimensionCount + 1] = (float)Math.sin(angle)*0.5f*coaf;
    buffer[i*dimensionCount + 2] = 0f;
}
int-tessellation=360;//将有360个顶点
int-dimensionCount=3;//x,y,z
双角度分数=360.0/(双)细分;//两个点之间的度数

对于(int i=0;i而言,您的值是一团乱麻。如前所述,由于迭代器增量,您只生成120个顶点,而不是360个顶点,但即使您这样做了,您也会使用
360 count
为第一次迭代生成
360
,即第361个顶点

您确实需要改进代码以更好地跟踪正在发生的事情。请使用一些常量以确保值正确:

int tessellation = 360; // will have 360 vertices
int dimensionCount = 3; // x, y, z
double angleFraction = 360.0 / (double)tessellation; // How many degrees between 2 points
for(int i=0; i<tessellation; i++) {
    double angle = Math.toRadians((double)i*angleFraction);
    buffer[i*dimensionCount + 0] = (float)Math.cos(angle)*0.5f;
    buffer[i*dimensionCount + 1] = (float)Math.sin(angle)*0.5f*coaf;
    buffer[i*dimensionCount + 2] = 0f;
}
int-tessellation=360;//将有360个顶点
int-dimensionCount=3;//x,y,z
双角度分数=360.0/(双)细分;//两个点之间的度数

对于(int i=0;i什么是“simmetric”?对称性我写错了你的意思是为什么它不对称?直线从指针指向相反方向,例如顶点0(x;y)顶点01(x;-y),因为你在顶点创建循环中增加了三次
i
,你只创建了120个顶点,而不是360个。因此,当你尝试使用时,比如index“359”它不知道指的是什么顶点。“simmetric”是什么?对称的我写错了你的意思是为什么它不对称?这些线不是从指针指向相反的顶点,例如顶点0(x;y)顶点01(x;-y)由于在顶点创建循环中增加了三次
i
,因此只创建120个顶点,而不是360个。因此,当您尝试使用索引“359”时,它不知道要引用哪个顶点。
int limit = tessellation/2; // We need only half of the pairs, the other half will just repeat the same lines
for(short i=0; i<limit; i++) {
    indices[2*i + 0] = i;
    indices[2*i + 1] = (short)(tessellation-i-1); // Note there is always "-1" when backwards enumerating
}
short limit = tessellation/2; // We need only half of the pairs, the other half will just repeat the same lines
for(short i=0; i<limit; i++) {
    indices[2*i + 0] = i;
    indices[2*i + 1] = (short)(limit+i); // basically saying +180 degrees
}