首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >识别3d立方体的表面

识别3d立方体的表面
EN

Stack Overflow用户
提问于 2010-07-21 17:32:18
回答 2查看 263关注 0票数 0

我正在开发一个iPad应用程序,它只是绘制一个3d立方体。用户可以通过手指运动来旋转它,并可以通过挤压它来放大/缩小它。

现在我同时给整个立方体(每个表面)上色。现在,如果我想让用户分别给立方体的每个表面着色,这意味着用户将点击一个表面,它将只给该表面着色,但我不知道如何识别用户点击的表面。

我正在使用简单的openGL基础知识绘制整个立方体,如下所示。

代码语言:javascript
复制
    static const GLfloat cubeVertices[] = {

        -1.0, -1.0, 1.0,
        1.0, -1.0, 1.0,
        1.0, 1.0, 1.0,
        -1.0, 1.0, 1.0,

        -1.0, -1.0, -1.0,
        1.0, -1.0, -1.0,
        1.0, 1.0, -1.0,
        -1.0, 1.0, -1.0,
    };


    static const GLushort cubeIndicesFaceFront[] = {
        0, 1, 2, 3, 0
    };

    static const GLushort cubeIndicesFaceBack[] = {
        4, 5, 6, 7, 4
    };

    static const GLushort cubeIndicesFaceLeft[] = {
        0, 4, 7, 3, 0
    };

    static const GLushort cubeIndicesFaceRight[] = {
        1, 5, 6, 2, 1
    };

    static const GLushort cubeIndicesFaceTop[] = {
        3, 2, 6, 7, 3
    };

    static const GLushort cubeIndicesFaceBottom[] = {
        0, 1, 5, 4, 0
    };

static const GLubyte cubeColors[] = {
    0, 255, 255, 255,
    0, 255, 255, 255,
    0, 255, 255, 255,
    0, 255, 255, 255,
    0, 255, 255, 255,
};      


    glVertexPointer(3, GL_FLOAT, 0, cubeVertices);
    glEnableClientState(GL_VERTEX_ARRAY);


    glColorPointer(4, GL_UNSIGNED_BYTE, 0, cubeColors);
    glEnableClientState(GL_COLOR_ARRAY);
    glDrawElements(GL_TRIANGLE_FAN, 5, GL_UNSIGNED_SHORT, cubeIndicesFaceFront);
    glDrawElements(GL_TRIANGLE_FAN, 5, GL_UNSIGNED_SHORT, cubeIndicesFaceBack);
    glDrawElements(GL_TRIANGLE_FAN, 5, GL_UNSIGNED_SHORT, cubeIndicesFaceLeft);
    glDrawElements(GL_TRIANGLE_FAN, 5, GL_UNSIGNED_SHORT, cubeIndicesFaceRight);
    glDrawElements(GL_TRIANGLE_FAN, 5, GL_UNSIGNED_SHORT, cubeIndicesFaceTop);
    glDrawElements(GL_TRIANGLE_FAN, 5, GL_UNSIGNED_SHORT, cubeIndicesFaceBottom);


    glBindRenderbufferOES(GL_RENDERBUFFER_OES, colorRenderbuffer);
    [context presentRenderbuffer:GL_RENDERBUFFER_OES];

在advance....appreciated中感谢您的支持。

EN

回答 2

Stack Overflow用户

发布于 2010-07-21 17:37:10

此页包含有关选择曲面的有用信息:http://www.opengl.org/resources/faq/technical/selection.htm

票数 1
EN

Stack Overflow用户

发布于 2010-07-21 17:36:33

您需要在用户单击的点所定义的直线与视图方向和立方体之间执行交点。

您可以忽略所有指向与视图方向相同的面(即远离您),而只看那些指向您的面。如果你做面部法线和光线的点积,当指向你时,它将是负的,而当指向远离时,它将是正的。如果它是零(在舍入误差范围内),那么你正在看的是面的边缘。

这可以称为光线投射。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3297892

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档