使用C+在Android NDK中使用OpenGL|ES画一条线+;

使用C+在Android NDK中使用OpenGL|ES画一条线+;,android,c++,opengl-es,android-ndk,Android,C++,Opengl Es,Android Ndk,我想用OpenGL | ES在我的Android NDK应用程序中画一条线 我使用下面的代码在屏幕上画线 GLfloat line[] = { 0,0,0, 100,100,0 }; GLfloat colors[] = { 1.0f, 0.0f, 0.0f, 1.0f, 0.0

我想用OpenGL | ES在我的Android NDK应用程序中画一条线

我使用下面的代码在屏幕上画线

GLfloat line[] = { 
                     0,0,0,
                     100,100,0
                  };

GLfloat colors[] = {
                        1.0f, 0.0f, 0.0f, 1.0f,
                        0.0f, 1.0f, 0.0f, 1.0f,
                        0.0f, 0.0f, 1.0f, 1.0f
                    };
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
glClear(GL_COLOR_BUFFER_BIT);
glShadeModel(GL_SMOOTH);
glVertexPointer(3, GL_FLOAT, 0, line);
glColorPointer(4, GL_FLOAT, 0, colors);
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_COLOR_ARRAY);
glClear(GL_COLOR_BUFFER_BIT);
glDrawArrays(GL_LINES, 0, 2);
glFlush();
上面的代码将在屏幕上画一条线,但我面临的问题是,如果我更改数组
Line
中的坐标,例如

GLfloat line[] = {
                      0,0,0,
                      5,5,0
                 };
然后在屏幕上也会画出相同的线,即线的长度不会改变。输出附件:


这种异常行为的原因是什么?

在不修改矩阵的情况下,默认的OpenGL坐标被规范化(映射为0-1)。(0,0)是屏幕的中心,(1,0)是屏幕的中间右侧,(0,-1)是屏幕的底部,等等


在您的示例中,(5,5)和(100100)相对于中心和屏幕外的方向完全相同,因此您可以在这两个方向上看到同一条线。

这不是同一条线,当您将x和y更改为5时,您将看不到它的剩余部分。尝试小于1的值,看看它是否有任何变化。具有不同坡度的值也有帮助。确定。我还想知道,对于opengl | es,do坐标
0,0,0
表示屏幕的中心。这取决于您的视口和相机设置。但是默认视口坐标从-1延伸到1,右上角为(1,1),左下角为(-1,-1)。因此,是的,在默认条件下(0,0)是屏幕的中心。请注意,尽管坐标相同,但屏幕宽度和高度不同。