首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenGL es -看起来不像3D,看起来更像2D

OpenGL es -看起来不像3D,看起来更像2D
EN

Stack Overflow用户
提问于 2012-05-08 05:31:37
回答 1查看 524关注 0票数 0

试着做一个球体。但它看起来不像3D,实际上它看起来像平面2D图片。这里我漏掉了什么?

谢谢你

代码语言:javascript
复制
std::vector<GLfloat> ballVerts;

for(int i = 0; i <= 40; i++)
{
    double lat0 = M_PI * (-0.5 + (double) (i - 1) / 40);
    double z0  = sin(lat0);
    double zr0 =  cos(lat0);

    double lat1 = M_PI * (-0.5 + (double) i / 40);
    double z1 = sin(lat1);
    double zr1 = cos(lat1);

    for(int j = 0; j <= 40; j++)
    {
        double lng = 2 * M_PI * (double) (j - 1) / 40;
        double x = cos(lng);
        double y = sin(lng);

        //  normals
        glNormal3f(x * zr0, y * zr0, z0);

        ballVerts.push_back(x * zr0); //X
        ballVerts.push_back(y * zr0); //Y
        ballVerts.push_back(z0);      //Z

        ballVerts.push_back(0.0f); 
        ballVerts.push_back(1.0f); 
        ballVerts.push_back(0.0f); 
        ballVerts.push_back(1.0f); //R,G,B,A

        //  normals
        glNormal3f(x * zr1, y * zr1, z1);

        ballVerts.push_back(x * zr1); //X
        ballVerts.push_back(y * zr1); //Y
        ballVerts.push_back(z1);      //Z

        ballVerts.push_back(0.0f); 
        ballVerts.push_back(1.0f); 
        ballVerts.push_back(0.0f); 
        ballVerts.push_back(1.0f); //R,G,B,A

//呈现代码此外,我正在旋转这个圆,旋转工作得很好,因为我有光的变化,它给我一个想法,它是旋转的,实际上至少是一个圆

代码语言:javascript
复制
glRotatef(Angle, 1.0f, 0.5f, 0.3f);

glBindBuffer(GL_ARRAY_BUFFER, VertexBufferObject[2]);
glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer(3, GL_FLOAT, 7*4, 0);

glDrawArrays(GL_TRIANGLE_STRIP, 0, 3200);

glBindBuffer(GL_ARRAY_BUFFER, 0);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-08 05:48:38

首先,您需要检查当前是否使用glGetIntegerv(GL_LIGHTING,&i)启用了照明,可能还需要打开glEnable(GL_LIGHTING)

然后设置glMaterial(...)glLightModel(...)glLight(...),这里有tutorial http://www.cse.msu.edu/~cse872/tutorial3.html

或者你可以使用自己的GLSL着色器来应用一些高级照明,一些教程在这里http://www.lighthouse3d.com/opengl/glsl/

在一些微不足道的情况下,你可以通过glColor3f(...)传递顶点颜色。而不是使用GL照明。

此外,法线应为单位向量或启用规格化glEnable(GL_NORMALIZE)

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

https://stackoverflow.com/questions/10489446

复制
相关文章

相似问题

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