要让矩形的多面都有颜色,你需要为每个面分别定义顶点和颜色。以下是一个使用OpenSceneGraph(OSG)绘制具有不同颜色的矩形的示例代码:
#include <osg/Geode>
#include <osg/Geometry>
#include <osgViewer/Viewer>
int main()
{
// 创建几何体节点和几何体对象
osg::ref_ptr<osg::Geode> geode = new osg::Geode();
osg::ref_ptr<osg::Geometry> geometry = new osg::Geometry();
// 创建顶点数组
osg::ref_ptr<osg::Vec3Array> vertices = new osg::Vec3Array;
vertices->push_back(osg::Vec3(-1.0f, 0.0f, -1.0f));
vertices->push_back(osg::Vec3(1.0f, 0.0f, -1.0f));
vertices->push_back(osg::Vec3(1.0f, 0.0f, 1.0f));
vertices->push_back(osg::Vec3(-1.0f, 0.0f, 1.0f));
// 创建颜色数组
osg::ref_ptr<osg::Vec4Array> colors = new osg::Vec4Array;
colors->push_back(osg::Vec4(1.0f, 1.0f, 1.0f, 1.0f)); // 第一个面的颜色
colors->push_back(osg::Vec4(1.0f, 0.f, 0.f, 1.f)); // 第二个面的颜色
colors->push_back(osg::Vec4(0.f, 1.0f, 0.f, 1.f)); // 第三个面的颜色
colors->push_back(osg::Vec4(0.f, 0.f, 1.0f, 1.f)); // 第四个面的颜色
// 设置几何体属性
geometry->setVertexArray(vertices.get());
geometry->setColorArray(colors.get());
geometry->setColorBinding(osg::Geometry::BIND_PER_VERTEX);
// 创建绘制元素数组并添加绘制元素
osg::ref_ptr<osg::DrawElementsUInt> indices = new osg::DrawElementsUInt(osg::PrimitiveSet::QUADS, 0);
indices->push_back(0);
indices->push_back(1);
indices->push_back(2);
indices->push_back(3);
// 将顶点和绘制元素添加到几何体中
geometry->addPrimitiveSet(indices.get());
// 将几何体添加到几何体节点中
geode->addDrawable(geometry.get());
// 创建查看器并设置场景数据
osgViewer::Viewer viewer;
viewer.setSceneData(geode.get());
// 开启查看器窗口,运行程序进行可视化展示
viewer.run();
return 0;
}
这段代码创建了一个具有四个顶点和四个面的矩形,并为每个面指定了不同的颜色。你可以根据需要修改颜色值或添加更多的顶点和面来绘制自定义的矩形。
内容由零声教学AI助手提供,问题来源于学员提问