【问题标题】:Draw a line using OpenGL|ES in Android NDK using C++使用 C++ 在 Android NDK 中使用 OpenGL|ES 绘制一条线
【发布时间】:2014-03-10 06:40:01
【问题描述】:

我想使用 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
                 };

然后在屏幕上也将绘制相同的线条,即线条的长度不会发生变化。附加输出:

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

【问题讨论】:

  • 这不是同一行,当您将 x 和 y 更改为 5 时,您只是看不到它的剩余部分。尝试低于 1 的值,看看它是否有任何变化。具有不同斜率的值也应该有所帮助。
  • 好的。我也想知道在opengl|es的情况下do坐标0,0,0代表屏幕的中心。
  • 取决于您的视口和相机设置。但是默认的视口坐标从-1到1,右上角是(1,1),左下角是(-1,-1)。所以是的,默认情况下 (0,0) 是屏幕的中心。请注意,虽然坐标相同,但屏幕宽度和高度是不同的。

标签: android c++ opengl-es android-ndk


【解决方案1】:

在不修改矩阵的情况下,默认的 OpenGL 坐标被归一化(映射为 0-1)。 (0,0) 为屏幕中心,(1,0) 为中心右侧,(0, -1) 为屏幕底部,以此类推

在您的示例中,(5,5) 和 (100,100) 相对于中心和屏幕外的方向完全相同,这就是为什么您在两者中看到同一条线的原因。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-28
    • 2012-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多