游戏开发论坛

 找回密码
 立即注册
搜索
查看: 8899|回复: 5

OGRE如何画多边形?

[复制链接]

3

主题

6

帖子

10

积分

新手上路

Rank: 1

积分
10
发表于 2008-3-30 15:04:00 | 显示全部楼层 |阅读模式
比如openGL中
glBegin(GL_QUADS);
glVertex3f(0, 0, 0);
glVertex3f(10, 0, 0);
glVertex3f(10, 10, 0);
glVertex3f(0,10, 0);
glEnd();
这样画的四边形如何在ogre中画?

4

主题

26

帖子

26

积分

注册会员

Rank: 2

积分
26
发表于 2008-3-30 20:55:00 | 显示全部楼层

Re: OGRE如何画多边形?

OGRE有直接画平面的方法,createplane(),直接画多变形的没有吧?

3

主题

13

帖子

13

积分

新手上路

Rank: 1

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

Re:OGRE如何画多边形?

我这里是画线的部分代码。你可以参考。
        Ogre::ManualObject *pManual;

……
                        pManual->begin("",Ogre::RenderOperation::OT_LINE_STRIP);
                        for (i=0; i<mBezier.size(); i++)
                        {
                                pManual->position(mBezier);
                        }
                        pManual->end();

                        pManual->setCastShadows(false);
                        int num = pManual->getNumSections();

                        for (i=0; i<num; i++)
                        {
                                pManual->getSection(i)->getTechnique()->getPass(0)->setLightingEnabled(false);
                        }

6

主题

40

帖子

40

积分

注册会员

Rank: 2

积分
40
发表于 2008-3-31 15:59:00 | 显示全部楼层

Re:OGRE如何画多边形?

        void createGrassMesh()
        {
                // Each grass section is 3 planes at 60 degrees to each other
                // Normals point straight up to simulate correct lighting
                MeshPtr msh = MeshManager::getSingleton().createManual(GRASS_MESH_NAME,
                        ResourceGroupManager:EFAULT_RESOURCE_GROUP_NAME);
                SubMesh* sm = msh->createSubMesh();
                sm->useSharedVertices = false;
                sm->vertexData = new VertexData();
                sm->vertexData->vertexStart = 0;
                sm->vertexData->vertexCount = 12;
                VertexDeclaration* dcl = sm->vertexData->vertexDeclaration;
                size_t offset = 0;
                dcl->addElement(0, offset, VET_FLOAT3, VES_POSITION);
                offset += VertexElement::getTypeSize(VET_FLOAT3);
                dcl->addElement(0, offset, VET_FLOAT3, VES_NORMAL);
                offset += VertexElement::getTypeSize(VET_FLOAT3);
                dcl->addElement(0, offset, VET_FLOAT2, VES_TEXTURE_COORDINATES);
                offset += VertexElement::getTypeSize(VET_FLOAT2);

                HardwareVertexBufferSharedPtr vbuf = HardwareBufferManager::getSingleton()
                        .createVertexBuffer(
                                offset, 12, HardwareBuffer::HBU_STATIC_WRITE_ONLY);
                float* pReal = static_cast<float*>(vbuf->lock(HardwareBuffer::HBL_DISCARD));
                Vector3 baseVec(GRASS_WIDTH/2, 0, 0);
                Vector3 vec = baseVec;
                Quaternion rot;
                rot.FromAngleAxis(Degree(60), Vector3::UNIT_Y);
                int i;
                for (i = 0; i < 3; ++i)
                {
                        // position
                        *pReal++ = -vec.x;
                        *pReal++ = GRASS_HEIGHT;
                        *pReal++ = -vec.z;
                        // normal
                        *pReal++ = 0;
                        *pReal++ = 1;
                        *pReal++ = 0;
                        // uv
                        *pReal++ = 0;
                        *pReal++ = 0;

                        // position
                        *pReal++ = vec.x;
                        *pReal++ = GRASS_HEIGHT;
                        *pReal++ = vec.z;
                        // normal
                        *pReal++ = 0;
                        *pReal++ = 1;
                        *pReal++ = 0;
                        // uv
                        *pReal++ = 1;
                        *pReal++ = 0;

                        // position
                        *pReal++ = -vec.x;
                        *pReal++ = 0;
                        *pReal++ = -vec.z;
                        // normal
                        *pReal++ = 0;
                        *pReal++ = 1;
                        *pReal++ = 0;
                        // uv
                        *pReal++ = 0;
                        *pReal++ = 1;

                        // position
                        *pReal++ = vec.x;
                        *pReal++ = 0;
                        *pReal++ = vec.z;
                        // normal
                        *pReal++ = 0;
                        *pReal++ = 1;
                        *pReal++ = 0;
                        // uv
                        *pReal++ = 1;
                        *pReal++ = 1;

                        vec = rot * vec;
                }
                vbuf->unlock();
                sm->vertexData->vertexBufferBinding->setBinding(0, vbuf);
                sm->indexData->indexCount = 6*3;
                sm->indexData->indexBuffer = HardwareBufferManager::getSingleton()
                        .createIndexBuffer(HardwareIndexBuffer::IT_16BIT, 6*3,
                                HardwareBuffer::HBU_STATIC_WRITE_ONLY);
                uint16* pI = static_cast<uint16*>(
                        sm->indexData->indexBuffer->lock(HardwareBuffer::HBL_DISCARD));
                for (i = 0; i < 3; ++i)
                {
                        int off = i*4;
                        *pI++ = 0 + off;
                        *pI++ = 3 + off;
                        *pI++ = 1 + off;

                        *pI++ = 0 + off;
                        *pI++ = 2 + off;
                        *pI++ = 3 + off;
                }

                sm->indexData->indexBuffer->unlock();

                sm->setMaterialName(GRASS_MATERIAL);
                msh->load();

        }

ogre demo中很多这样的例子啊,这是草墩里的

3

主题

6

帖子

10

积分

新手上路

Rank: 1

积分
10
 楼主| 发表于 2008-4-2 09:20:00 | 显示全部楼层

Re:OGRE如何画多边形?

谢谢楼上几位给的提示

0

主题

3

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2009-7-18 14:57:00 | 显示全部楼层

招聘 OGRE

北京巽震数码科技有限公司
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-12-19 18:13

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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