游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2703|回复: 3

请教关于VBO的问题:

[复制链接]

2

主题

7

帖子

7

积分

新手上路

Rank: 1

积分
7
发表于 2008-9-2 22:00:00 | 显示全部楼层 |阅读模式
请教关于VBO的问题:
GLint face_indicies[6][9] = {
        {2,0,3 ,0,0,0 ,0,1,2 }, {1,3,0 ,0,0,0 ,3,2,1 }
        , {6,4,7 ,1,1,1 ,0,1,2 }, {5,7,4 ,1,1,1 ,3,2,1 }
        , {10,8,11 ,2,2,2 ,0,1,2 }, {9,11,8 ,2,2,2 ,3,2,1 }
};

face_indicies[n]-----第n个三角形
face_indicies[][0-2]----顶点索引
face_indicies[][3-5]----法向索引
face_indicies[][6-8]----贴图坐标索引

GLfloat vertices[12][3] = {
{-252.866f,200.469f,-2.1247e-07f},{-246.616f,211.294f,2.1247e-07f},{-252.866f,200.469f,15.0f},
{-246.616f,211.294f,15.0f},{-246.616f,200.469f,-7.30884e-07f},{-252.866f,211.294f,7.30884e-07f},
{-246.616f,200.469f,15.0f},{-252.866f,211.294f,15.0f},{-255.991f,205.881f,-7.10543e-15f},
{-243.491f,205.881f,-7.10543e-15f},{-255.991f,205.881f,15.0f},{-243.491f,205.881f,15.0f}
};
GLfloat normals[3][3] = {
{0.866025f,-0.5f,0.0f},{0.866025f,0.5f,0.0f},{0.0f,-1.0f,0.0f}
};
GLfloat textures[4][2] = {
{0.0f,2.0f},{0.0f,1.0f},{1.0f,2.0f},
{1.0f,1.0f}
};

BuildVBOs()
{
    .......
        glGenBuffersARB( 1, &m_nVBOId );
        glBindBufferARB( GL_ARRAY_BUFFER_ARB, m_nVBOId);                        // Bind The Buffer
        glBufferDataARB(GL_ARRAY_BUFFER_ARB, Vertex_num*3*sizeof(float)+Textures_num*2*sizeof(float)+Normals_num*3*sizeof(float), 0, GL_STATIC_DRAW_ARB);
        glBufferSubDataARB(GL_ARRAY_BUFFER_ARB, 0, Vertex_num*3*sizeof(float), vertices);
        glBufferSubDataARB(GL_ARRAY_BUFFER_ARB, Vertex_num*3*sizeof(float), Textures_num*2*sizeof(float), textures);
        glBufferSubDataARB(GL_ARRAY_BUFFER_ARB, Vertex_num*3*sizeof(float)+Textures_num*2*sizeof(float), Normals__num*3*sizeof(float), normals);
    .......
}

DRAW()
{
......
    glBindBufferARB( GL_ARRAY_BUFFER_ARB, m_nVBOId);
    glBegin (GL_TRIANGLES);
    for(i=0;i<=num_face;i++)
    {
        for(int j=0;j<3;j++)
        {
            int vi=face_indicies[j];
            int ni=face_indicies[j+3];
            int ti=face_indicies[j+6];
            glNormal3fv  ((float *)0+(Vertex_num*3*sizeof(float)+Textures_num*2*sizeof(float)+ni*3*sizeof(float)));
            glTexCoord2fv((float *)0+(Vertex_num*3*sizeof(float)+ti*2*sizeof(float)));
                glVertex3fv  ((float *)0+(vi*3*sizeof(float)));
        }
    }
    glEnd ();
.......
}
编译通过了,但是执行时总是出错,无法正确绘制,不知道错在哪里?有知道的朋友给提示一下,万分感谢!!!

0

主题

13

帖子

13

积分

新手上路

Rank: 1

积分
13
发表于 2008-9-3 09:12:00 | 显示全部楼层

Re: 请教关于VBO的问题:

VBO用到了OpenGL扩展,不知道你的OpenGL扩展用的是哪一个?glew还是glext还是glee?

如果是glew的话还需要动态的查找那些扩展函数API的地址吧。不知道有没有处理?否则也会编译正确执行弹出错误的。不知道是不是这个问题。

如:
声明:
PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC        glCheckFramebufferStatusEXT = NULL ;
初始化的时候:
glCheckFramebufferStatusEXT = (PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC)                wglGetProcAddress( "glCheckFramebufferStatusEXT" );

之后再使用就没有问题了。

2

主题

7

帖子

7

积分

新手上路

Rank: 1

积分
7
 楼主| 发表于 2008-9-3 11:09:00 | 显示全部楼层

Re:请教关于VBO的问题:

tandunming说得问题我都注意到了,应该不是,我之前用glDrawElements或者glDrawArrays方式绘制,都可以正确显示。由于顶点、法向、体贴都有自己的索引,glDrawElements或者glDrawArrays方式绘制会大大增加数据量,所以打算采用glVertex3fv,我的想法是:绑定VBO后,glVertex3fv只需要得到一个偏移值就可以自动读出该偏移值后的三个顶点数,为了编译能通过,把偏移值强制转换为float型。但是现在程序执行时直接跳出来,不知道是不是跟glVertex3fv读取数据有关;

0

主题

13

帖子

13

积分

新手上路

Rank: 1

积分
13
发表于 2008-9-3 16:15:00 | 显示全部楼层

Re:请教关于VBO的问题:

看看NEHE教程吧 有这一个例子
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-21 11:49

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表