本文整理汇总了C++中util::Reference类的典型用法代码示例。如果您正苦于以下问题:C++ Reference类的具体用法?C++ Reference怎么用?C++ Reference使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了Reference类的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: drawTriangle
void drawTriangle(RenderingContext & rc, const Geometry::Vec3f & vertexA, const Geometry::Vec3f & vertexB, const Geometry::Vec3f & vertexC) {
static Util::Reference<Mesh> mesh;
if (mesh.isNull()) {
VertexDescription vertexDescription;
vertexDescription.appendPosition3D();
mesh = new Mesh(vertexDescription, 3, 3);
MeshIndexData & id = mesh->openIndexData();
uint32_t * indices = id.data();
indices[0] = 0;
indices[1] = 1;
indices[2] = 2;
id.updateIndexRange();
id.markAsChanged();
}
MeshVertexData & vd = mesh->openVertexData();
float * vertices = reinterpret_cast<float *>(vd.data());
// First vertex
*vertices++ = vertexA.getX();
*vertices++ = vertexA.getY();
*vertices++ = vertexA.getZ();
// Second vertex
*vertices++ = vertexB.getX();
*vertices++ = vertexB.getY();
*vertices++ = vertexB.getZ();
// Third vertex
*vertices++ = vertexC.getX();
*vertices++ = vertexC.getY();
*vertices++ = vertexC.getZ();
vd.updateBoundingBox();
vd.markAsChanged();
rc.displayMesh(mesh.get());
}
开发者ID:StanEpp,项目名称:Rendering,代码行数:35,代码来源:Draw.cpp
示例2: createMeshFromBitmaps
//! Deprecated
Mesh * MeshBuilder::createMeshFromBitmaps(const VertexDescription& vd, Util::Reference<Util::Bitmap> depth, Util::Reference<Util::Bitmap> color, Util::Reference<Util::Bitmap> normals) {
Util::Reference<Util::PixelAccessor> depthAcc = Util::PixelAccessor::create(std::move(depth));
if( depth.isNull() || depth->getPixelFormat()!=Util::PixelFormat::MONO_FLOAT ){
WARN("createMeshFromBitmaps: unsupported depth texture format");
return nullptr;
}
Util::Reference<Util::PixelAccessor> colorReader;
if(color.isNotNull()) {
colorReader = Util::PixelAccessor::create(std::move(color));
if(colorReader.isNull() || (colorReader->getPixelFormat() != Util::PixelFormat::RGBA && colorReader->getPixelFormat() != Util::PixelFormat::RGB)) {
WARN("createMeshFromBitmaps: unsupported color texture format");
return nullptr;
}
}
Util::Reference<Util::PixelAccessor> normalReader;
if(normals.isNotNull()) {
normalReader = Util::PixelAccessor::create(std::move(normals));
if(normalReader.isNull()){
WARN("createMeshFromBitmaps: unsupported normal texture format");
return nullptr;
}
}
return MeshUtils::createMeshFromBitmaps(vd,depthAcc,colorReader,normalReader);
}
开发者ID:PADrend,项目名称:Rendering,代码行数:26,代码来源:MeshBuilder.cpp
示例3: update
void StatChart::update(const Statistics & fStats) {
Util::Reference<Util::PixelAccessor> pixels = Util::PixelAccessor::create(bitmap.get());
if(pixels == nullptr)
return;
pixels->fill(0, 0, bitmap->getWidth(), bitmap->getHeight(), Util::Color4f(0, 0, 0, 0));
// show grids
static const Util::Color4ub gridColor(0xa0, 0xa0, 0xa0, 0xa0);
for(float f = 10.0; f < timeRange; f += 10.0) {
const uint32_t x = static_cast<uint32_t> (bitmap->getWidth() * f / timeRange);
for (uint32_t row = 0; row < bitmap->getHeight(); ++row) {
pixels->writeColor(x, row, gridColor);
}
}
const float timeScale = getWidth() / (timeRange * 1000.0);
for(size_t i = 0; i < fStats.getNumEvents(); ++i) {
const Statistics::Event & event = fStats.getEvent(i);
const int x = static_cast<int> (event.time * timeScale);
if(x >= static_cast<int> (getWidth()))
continue;
const DataRow & dataRow = dataRows[event.type];
const int yTo = std::max(static_cast<int> (bitmap->getHeight()) - static_cast<int> (event.value * dataRow.scale), 0);
for(int y = bitmap->getHeight() - 1; y > yTo; --y)
pixels->writeColor(x, y, dataRow.color);
}
}
开发者ID:MeisterYeti,项目名称:MinSG,代码行数:30,代码来源:StatChart.cpp
示例4: drawFullScreenRect
void drawFullScreenRect(RenderingContext & rc){
GET_GL_ERROR();
static Geometry::Matrix4x4f projectionMatrix(Geometry::Matrix4x4f::orthographicProjection(-1, 1, -1, 1, -1, 1));
static Geometry::Matrix4x4f modelViewMatrix;
static Util::Reference<Mesh> mesh;
if(mesh.isNull()) {
VertexDescription vertexDescription;
vertexDescription.appendPosition3D();
vertexDescription.appendTexCoord();
MeshUtils::MeshBuilder mb(vertexDescription);
mb.position(Geometry::Vec3f(-1,-1,0)); mb.texCoord0(Geometry::Vec2f(0,0)); uint32_t a = mb.addVertex();
mb.position(Geometry::Vec3f(1,-1,0)); mb.texCoord0(Geometry::Vec2f(1,0)); uint32_t b = mb.addVertex();
mb.position(Geometry::Vec3f(-1,1,0)); mb.texCoord0(Geometry::Vec2f(0,1)); uint32_t c = mb.addVertex();
mb.position(Geometry::Vec3f(1,1,0)); mb.texCoord0(Geometry::Vec2f(1,1)); uint32_t d = mb.addVertex();
mb.addTriangle(a, b, c);
mb.addTriangle(c, b, d);
mesh = mb.buildMesh();
}
rc.pushMatrix_cameraToClipping();
rc.setMatrix_cameraToClipping(projectionMatrix);
rc.pushMatrix_modelToCamera();
rc.setMatrix_modelToCamera(modelViewMatrix);
rc.displayMesh(mesh.get());
rc.popMatrix_modelToCamera();
rc.popMatrix_cameraToClipping();
GET_GL_ERROR();
}
开发者ID:StanEpp,项目名称:Rendering,代码行数:33,代码来源:Draw.cpp
示例5: doAddChild
void AbstractJoint::doAddChild(Util::Reference<Node> child) {
if(dynamic_cast<AbstractJoint *>(child.get()) == nullptr)
return;
if(dynamic_cast<ArmatureNode *> (child.get()) != nullptr)
return;
ListNode::doAddChild(child);
}
开发者ID:MeisterYeti,项目名称:MinSG,代码行数:9,代码来源:AbstractJoint.cpp
示例6: createAndSetId
Util::StringIdentifier createAndSetId(Util::Reference<Obj> obj){
Util::StringIdentifier id = getId(obj.get());
if(obj.isNotNull() && id.empty()) {
do { // Create a new, random identifier....
id = Util::StringIdentifier("$" + Util::StringUtils::createRandomString(6));
}while( get(id) ); // ... until an unused one is found.
setId(obj,id);
}
return id;
}
开发者ID:MeisterYeti,项目名称:MinSG,代码行数:10,代码来源:SceneManager.cpp
示例7: setId
void setId(Util::Reference<Obj> obj,const Util::StringIdentifier & id){
if(!id.empty()) // remove a obj possibly previously registered with the id
removeId( id );
if(obj.isNotNull()) // remove the obj's old id
removeId( obj.get() );
if(obj.isNotNull()&&!id.empty()){ // register the obj using the new id
map_objToId.emplace(obj.get(),id);
map_idToObj.emplace(id, std::move(obj));
}
}
开发者ID:MeisterYeti,项目名称:MinSG,代码行数:10,代码来源:SceneManager.cpp
示例8:
Util::Reference<CameraNode> PhotonRenderer::computePhotonCamera(){
Util::Reference<CameraNode> camera = new CameraNode;
float minDistance = 0.01f;
float maxDistance = 500.f;
camera->setViewport(Geometry::Rect_i(0, 0, _samplingWidth, _samplingHeight));
camera->setNearFar(minDistance, maxDistance);
camera->setAngles(-70, 70, -50, 50);
return camera;
}
开发者ID:StanEpp,项目名称:MinSG,代码行数:12,代码来源:PhotonRenderer.cpp
示例9: doRemoveChild
bool MultiAlgoGroupNode::doRemoveChild(Util::Reference<Node> child) {
if(node.get() == child.get()) {
WARN("MultiAlgoGroupNode::doRemoveChild: don't remove direct child of MultiAlgoGroupNode");
return false;
}
return node->removeChild(child);
}
开发者ID:MeisterYeti,项目名称:MinSG,代码行数:7,代码来源:MultiAlgoGroupNode.cpp
示例10: drawVector
void drawVector(RenderingContext & rc, const Geometry::Vec3 & from, const Geometry::Vec3 & to) {
static Util::Reference<Mesh> mesh;
if (mesh.isNull()) {
VertexDescription vertexDescription;
vertexDescription.appendPosition3D();
mesh = new Mesh(vertexDescription, 2, 2);
mesh->setDrawMode(Mesh::DRAW_LINES);
MeshIndexData & id = mesh->openIndexData();
uint32_t * indices = id.data();
indices[0] = 0;
indices[1] = 1;
id.updateIndexRange();
id.markAsChanged();
mesh->setDataStrategy(SimpleMeshDataStrategy::getPureLocalStrategy());
}
MeshVertexData & vd = mesh->openVertexData();
float * vertices = reinterpret_cast<float *> (vd.data());
*vertices++ = from.getX(); // From
*vertices++ = from.getY();
*vertices++ = from.getZ();
*vertices++ = to.getX(); // To
*vertices++ = to.getY();
*vertices++ = to.getZ();
vd.updateBoundingBox();
vd.markAsChanged();
rc.displayMesh(mesh.get());
}
开发者ID:StanEpp,项目名称:Rendering,代码行数:30,代码来源:Draw.cpp
示例11: drawBox
void drawBox(RenderingContext & rc, const Geometry::Box & box) {
static Util::Reference<Mesh> mesh;
if (mesh.isNull()) {
VertexDescription vertexDescription;
vertexDescription.appendPosition3D();
vertexDescription.appendNormalFloat();
const Geometry::Box unitBox(Geometry::Vec3(-0.5f, -0.5f, -0.5f), Geometry::Vec3(0.5f, 0.5f, 0.5f));
mesh = MeshUtils::MeshBuilder::createBox(vertexDescription, unitBox);
}
Geometry::Matrix4x4 matrix;
matrix.translate(box.getCenter());
matrix.scale(box.getExtentX(), box.getExtentY(), box.getExtentZ());
rc.pushMatrix_modelToCamera();
rc.multMatrix_modelToCamera(matrix);
rc.displayMesh(mesh.get());
rc.popMatrix_modelToCamera();
}
开发者ID:StanEpp,项目名称:Rendering,代码行数:18,代码来源:Draw.cpp
示例12: drawWireframeBox
void drawWireframeBox(RenderingContext & rc, const Geometry::Box & box) {
static Util::Reference<Mesh> mesh;
if (mesh.isNull()) {
VertexDescription vertexDescription;
vertexDescription.appendPosition3D();
mesh = new Mesh(vertexDescription, 8, 16);
mesh->setDataStrategy(SimpleMeshDataStrategy::getPureLocalStrategy());
mesh->setDrawMode(Mesh::DRAW_LINE_STRIP);
MeshIndexData & id = mesh->openIndexData();
uint32_t * indices = id.data();
/*
* Corners:
* 6---------7
* /| /|
* / | / |
* 2---------3 |
* | | | |
* | 4------|--5
* | / | /
* |/ |/
* 0---------1
*/
indices[0] = 0;
indices[1] = 2;
indices[2] = 3;
indices[3] = 1;
indices[4] = 5;
indices[5] = 7;
indices[6] = 6;
indices[7] = 4;
indices[8] = 0;
indices[9] = 1;
indices[10] = 3;
indices[11] = 7;
indices[12] = 5;
indices[13] = 4;
indices[14] = 6;
indices[15] = 2;
id.updateIndexRange();
id.markAsChanged();
}
MeshVertexData & vd = mesh->openVertexData();
float * vertices = reinterpret_cast<float *>(vd.data());
for (uint_fast8_t c = 0; c < 8; ++c) {
const Geometry::Vec3 & corner = box.getCorner(static_cast<Geometry::corner_t> (c));
*vertices++ = corner.getX();
*vertices++ = corner.getY();
*vertices++ = corner.getZ();
}
vd._setBoundingBox(box);
vd.markAsChanged();
rc.displayMesh(mesh.get());
}
开发者ID:StanEpp,项目名称:Rendering,代码行数:56,代码来源:Draw.cpp
示例13: QString
OverviewTableRow::OverviewTableRow(util::Reference<const impl::Call> call)
: call_{ call }
{
id_ = call_->getId();
idStr = QString::number(call_->getId());
for (size_t i = 0; i < 2 && i < call->matrixCount(); i++)
{
QPixmap img;
std::tie(std::ignore, img) =
qtutil::convertMatToQPixmap(call->matrixAt(i));
imgs.push_back(std::move(img));
}
description_ = QString(call_->description());
if (call_->metaData().isKnown)
{
const auto &data = call_->metaData();
line_ = data.line;
lineStr = QString::number(data.line);
fileStr = data.file;
functionStr = data.function;
}
typeStr = QString(call_->type());
}
开发者ID:2php,项目名称:opencv_contrib,代码行数:23,代码来源:overview_table_row.cpp
示例14: operator
void ParticlePointRenderer::operator()(ParticleSystemNode* psys, FrameContext & context, const RenderParam & rp /* = 0 */) {
if ( (rp.getFlag(NO_GEOMETRY)) )
return;
// render particles
std::vector<Particle> & particles = psys->getParticles();
uint32_t count = psys->getParticleCount();
Rendering::VertexDescription vertexDesc;
const Rendering::VertexAttribute & posAttrib = vertexDesc.appendPosition3D();
const Rendering::VertexAttribute & colorAttrib = vertexDesc.appendColorRGBAByte();
// The usage of a cache for the mesh has been tested. Reusing a preallocated mesh is not faster.
Util::Reference<Rendering::Mesh> mesh = new Rendering::Mesh(vertexDesc, count, count);
mesh->setDataStrategy(Rendering::SimpleMeshDataStrategy::getPureLocalStrategy());
mesh->setDrawMode(Rendering::Mesh::DRAW_POINTS);
// mesh->setUseIndexData(false);
Rendering::MeshIndexData & indexData = mesh->openIndexData();
Rendering::MeshVertexData & vertexData = mesh->openVertexData();
Util::Reference<Rendering::PositionAttributeAccessor> positionAccessor = Rendering::PositionAttributeAccessor::create(vertexData, posAttrib.getNameId());
Util::Reference<Rendering::ColorAttributeAccessor> colorAccessor = Rendering::ColorAttributeAccessor::create(vertexData, colorAttrib.getNameId());
uint32_t * indices = indexData.data();
for(uint_fast32_t index = 0; index < count; ++index) {
const Particle & p = particles[index];
colorAccessor->setColor(index, p.color);
positionAccessor->setPosition(index, p.position);
*indices++ = index;
}
indexData.markAsChanged();
indexData.updateIndexRange();
vertexData.markAsChanged();
vertexData.updateBoundingBox();
context.displayMesh(mesh.get());
}
开发者ID:MeisterYeti,项目名称:MinSG,代码行数:37,代码来源:ParticleRenderer.cpp
示例15: drawGrid
void drawGrid(RenderingContext & rc, float scale) {
static Util::Reference<Mesh> mesh;
if (mesh.isNull()) {
VertexDescription vertexDescription;
vertexDescription.appendPosition3D();
mesh = new Mesh(vertexDescription, 4 * 101, 4 * 101);
mesh->setDrawMode(Mesh::DRAW_LINES);
MeshVertexData & vd = mesh->openVertexData();
float * vertices = reinterpret_cast<float *> (vd.data());
MeshIndexData & id = mesh->openIndexData();
uint32_t * indices = id.data();
uint32_t nextIndex = 0;
const float step = 1.0f / 100.0f;
for (uint_fast8_t line = 0; line < 101; ++line) {
const float pos = -0.5f + static_cast<float> (line) * step;
*vertices++ = -0.5f;
*vertices++ = 0.0f;
*vertices++ = pos;
*vertices++ = 0.5f;
*vertices++ = 0.0f;
*vertices++ = pos;
*indices++ = nextIndex++;
*indices++ = nextIndex++;
*vertices++ = pos;
*vertices++ = 0.0f;
*vertices++ = -0.5f;
*vertices++ = pos;
*vertices++ = 0.0f;
*vertices++ = 0.5f;
*indices++ = nextIndex++;
*indices++ = nextIndex++;
}
vd.updateBoundingBox();
vd.markAsChanged();
id.updateIndexRange();
id.markAsChanged();
}
Geometry::Matrix4x4 matrix;
matrix.scale(scale);
rc.pushMatrix_modelToCamera();
rc.multMatrix_modelToCamera(matrix);
rc.displayMesh(mesh.get());
rc.popMatrix_modelToCamera();
}
开发者ID:MeisterYeti,项目名称:Rendering,代码行数:53,代码来源:DrawCompound.cpp
示例16: drawFrustum
void drawFrustum(RenderingContext & rc, const Geometry::Frustum & frustum, const Util::Color4f & color, float lineWidth) {
static Util::Reference<Mesh> mesh;
if (mesh.isNull()) {
VertexDescription vertexDescription;
vertexDescription.appendPosition3D();
mesh = new Mesh(vertexDescription, 8, 16);
mesh->setDrawMode(Mesh::DRAW_LINE_STRIP);
MeshIndexData & id = mesh->openIndexData();
uint32_t * indices = id.data();
indices[0] = 0;
indices[1] = 2;
indices[2] = 3;
indices[3] = 1;
indices[4] = 5;
indices[5] = 7;
indices[6] = 6;
indices[7] = 4;
indices[8] = 0;
indices[9] = 1;
indices[10] = 3;
indices[11] = 7;
indices[12] = 5;
indices[13] = 4;
indices[14] = 6;
indices[15] = 2;
id.updateIndexRange();
}
MeshVertexData & vd = mesh->openVertexData();
float * vertices = reinterpret_cast<float *>(vd.data());
for (uint_fast8_t c = 0; c < 8; ++c) {
const Geometry::Vec3 & corner = frustum[static_cast<Geometry::corner_t> (c)];
*vertices++ = corner.getX();
*vertices++ = corner.getY();
*vertices++ = corner.getZ();
}
vd.updateBoundingBox();
vd.markAsChanged();
rc.pushAndSetLine(lineWidth);
rc.pushAndSetLighting(LightingParameters(false));
rc.pushAndSetColorMaterial(color);
rc.displayMesh(mesh.get());
rc.popMaterial();
rc.popLighting();
rc.popLine();
}
开发者ID:MeisterYeti,项目名称:Rendering,代码行数:48,代码来源:DrawCompound.cpp
示例17: drawRect
void drawRect(RenderingContext & rc, const Geometry::Rect & rect) {
static Util::Reference<Mesh> mesh;
if (mesh.isNull()) {
VertexDescription vertexDescription;
vertexDescription.appendPosition2D();
mesh = new Mesh(vertexDescription, 4, 6);
mesh->setDrawMode(Mesh::DRAW_TRIANGLES);
MeshVertexData & vd = mesh->openVertexData();
float * vertices = reinterpret_cast<float *> (vd.data());
*vertices++ = 0.0f; // Bottom left
*vertices++ = 0.0f;
*vertices++ = 1.0f; // Bottom right
*vertices++ = 0.0f;
*vertices++ = 1.0f; // Top right
*vertices++ = 1.0f;
*vertices++ = 0.0f; // Top left
*vertices++ = 1.0f;
vd.updateBoundingBox();
vd.markAsChanged();
MeshIndexData & id = mesh->openIndexData();
uint32_t * indices = id.data();
indices[0] = 0;
indices[1] = 2;
indices[2] = 1;
indices[3] = 0;
indices[4] = 3;
indices[5] = 2;
id.updateIndexRange();
id.markAsChanged();
}
Geometry::Matrix4x4 matrix;
matrix.translate(rect.getX(), rect.getY(), 0.0f);
matrix.scale(rect.getWidth(), rect.getHeight(), 1.0f);
rc.pushMatrix_modelToCamera();
rc.multMatrix_modelToCamera(matrix);
rc.displayMesh(mesh.get());
rc.popMatrix_modelToCamera();
}
开发者ID:StanEpp,项目名称:Rendering,代码行数:41,代码来源:Draw.cpp
示例18: doEnableState
State::stateResult_t VisibilitySubdivisionRenderer::doEnableState(
FrameContext & context,
Node *,
const RenderParam & rp) {
if (rp.getFlag(SKIP_RENDERER)) {
return State::STATE_SKIPPED;
}
if (viSu == nullptr) {
// Invalid information. => Fall back to standard rendering.
return State::STATE_SKIPPED;
}
// [AccumRendering]
if(accumRenderingEnabled){
// camera moved? -> start new frame
const Geometry::Matrix4x4 & newCamMat=context.getCamera()->getWorldTransformationMatrix();
if(newCamMat!=lastCamMatrix){
lastCamMatrix = newCamMat;
startRuntime=0;
}
}else{
startRuntime=0;
}
// ----
uint32_t renderedTriangles = 0;
if (hold) {
for (const auto & object : holdObjects) {
if (debugOutput) {
debugDisplay(renderedTriangles, object, context, rp);
} else {
context.displayNode(object, rp);
}
}
return State::STATE_SKIP_RENDERING;
}
Geometry::Vec3 pos = context.getCamera()->getWorldOrigin();
bool refreshCache = false;
// Check if cached cell can be used.
if (currentCell == nullptr || !currentCell->getBB().contains(pos)) {
currentCell = viSu->getNodeAtPosition(pos);
refreshCache = true;
}
if (currentCell == nullptr || !currentCell->isLeaf()) {
// Invalid information. => Fall back to standard rendering.
return State::STATE_SKIPPED;
}
if (refreshCache) {
try {
const auto & vv = getVV(currentCell);
const uint32_t maxIndex = vv.getIndexCount();
objects.clear();
objects.reserve(maxIndex);
for(uint_fast32_t index = 0; index < maxIndex; ++index) {
if(vv.getBenefits(index) == 0) {
continue;
}
const VisibilityVector::costs_t costs = vv.getCosts(index);
const VisibilityVector::benefits_t benefits = vv.getBenefits(index);
const float score = static_cast<float>(costs) / static_cast<float>(benefits);
objects.emplace_back(score, vv.getNode(index));
}
} catch(...) {
// Invalid information. => Fall back to standard rendering.
return State::STATE_SKIPPED;
}
if (displayTexturedDepthMeshes) {
#ifdef MINSG_EXT_OUTOFCORE
for (const auto & depthMesh : depthMeshes) {
OutOfCore::getCacheManager().setUserPriority(depthMesh.get(), 0);
}
#endif /* MINSG_EXT_OUTOFCORE */
depthMeshes.clear();
depthMeshes.reserve(6);
textures.clear();
textures.reserve(6);
const std::string dmDirectionStrings[6] = { "-dir_x1_y0_z0", "-dir_x-1_y0_z0",
"-dir_x0_y1_z0", "-dir_x0_y-1_z0",
"-dir_x0_y0_z1", "-dir_x0_y0_z-1" };
for (auto & dmDirectionString : dmDirectionStrings) {
Util::GenericAttribute * attrib = currentCell->getAttribute("DepthMesh" + dmDirectionString);
if (attrib == nullptr) {
continue;
}
Util::FileName dmMeshPath(attrib->toString());
Util::Reference<Rendering::Mesh> dmMesh;
#ifdef MINSG_EXT_OUTOFCORE
Util::GenericAttribute * bbAttrib = currentCell->getAttribute("DepthMesh" + dmDirectionString + "-bounds");
if (bbAttrib == nullptr) {
WARN("Found depth mesh with no bounding box.");
continue;
}
std::vector<float> bbValues = Util::StringUtils::toFloats(bbAttrib->toString());
//.........这里部分代码省略.........
开发者ID:PADrend,项目名称:MinSG,代码行数:101,代码来源:VisibilitySubdivisionRenderer.cpp
示例19: drawCamera
void drawCamera(RenderingContext & rc, const Util::Color4f & color) {
static Util::Reference<Mesh> mesh;
if (mesh.isNull()) {
std::deque<Mesh *> meshes;
std::deque<Geometry::Matrix4x4f> transformations;
{
VertexDescription vertexDescription;
vertexDescription.appendPosition3D();
vertexDescription.appendNormalFloat();
Geometry::Box box(Geometry::Vec3f(0.0f, 0.0f, 0.1f), 0.2f, 0.5f, 0.8f);
meshes.push_back(MeshUtils::MeshBuilder::createBox(vertexDescription, box));
transformations.push_back(Geometry::Matrix4x4());
}
{
// Lens
meshes.push_back(MeshUtils::MeshBuilder::createConicalFrustum(0.1f, 0.25f, 0.2f, 16));
Geometry::Matrix4x4f mat;
mat.translate(0.0f, 0.0f, -0.3f);
mat.rotate_deg(90.0f, 0.0f, 1.0f, 0.0f);
transformations.push_back(mat);
}
{
// Lens cap
meshes.push_back(MeshUtils::MeshBuilder::createDiscSector(0.25f, 16));
Geometry::Matrix4x4f mat;
mat.translate(0.0f, 0.0f, -0.5f);
mat.rotate_deg(-90.0f, 0.0f, 1.0f, 0.0f);
transformations.push_back(mat);
}
{
// First film reel
meshes.push_back(MeshUtils::MeshBuilder::createConicalFrustum(0.2f, 0.2f, 0.1f, 16));
Geometry::Matrix4x4f mat;
mat.translate(-0.05f, 0.45f, -0.1f);
transformations.push_back(mat);
}
{
meshes.push_back(MeshUtils::MeshBuilder::createDiscSector(0.2f, 16));
Geometry::Matrix4x4f mat;
mat.translate(-0.05f, 0.45f, -0.1f);
transformations.push_back(mat);
}
{
meshes.push_back(MeshUtils::MeshBuilder::createDiscSector(0.2f, 16));
Geometry::Matrix4x4f mat;
mat.translate(0.05f, 0.45f, -0.1f);
mat.rotate_deg(180.0f, 0.0f, 1.0f, 0.0f);
transformations.push_back(mat);
}
{
// Second film reel
meshes.push_back(MeshUtils::MeshBuilder::createConicalFrustum(0.2f, 0.2f, 0.1f, 16));
Geometry::Matrix4x4f mat;
mat.translate(-0.05f, 0.45f, 0.3f);
transformations.push_back(mat);
}
{
meshes.push_back(MeshUtils::MeshBuilder::createDiscSector(0.2f, 16));
Geometry::Matrix4x4f mat;
mat.translate(-0.05f, 0.45f, 0.3f);
transformations.push_back(mat);
}
{
meshes.push_back(MeshUtils::MeshBuilder::createDiscSector(0.2f, 16));
Geometry::Matrix4x4f mat;
mat.translate(0.05f, 0.45f, 0.3f);
mat.rotate_deg(180.0f, 0.0f, 1.0f, 0.0f);
transformations.push_back(mat);
}
mesh = MeshUtils::combineMeshes(meshes, transformations);
}
rc.pushAndSetLighting(LightingParameters(false));
rc.pushAndSetColorMaterial(Util::Color4f(color));
rc.displayMesh(mesh.get());
rc.popMaterial();
rc.popLighting();
}
开发者ID:MeisterYeti,项目名称:Rendering,代码行数:82,代码来源:DrawCompound.cpp
示例20: drawCoordSys
void drawCoordSys(RenderingContext & rc, float scale) {
static Util::Reference<Mesh> arrow;
static Util::Reference<Mesh> sphere;
static Util::Reference<Mesh> charX;
static Util::Reference<Mesh> charY;
static Util::Reference<Mesh> charZ;
const float radius = 0.025f;
if (arrow.isNull()) {
std::deque<Mesh *> meshes;
std::deque<Geometry::Matrix4x4> transformations;
Geometry::Matrix4x4 transform;
meshes.push_back(MeshUtils::MeshBuilder::createConicalFrustum(radius, radius, 0.7f, 16));
transformations.push_back(transform);
meshes.push_back(MeshUtils::MeshBuilder::createConicalFrustum(radius, 2.0f * radius, 0.01f, 16));
transform.translate(0.7f, 0.0f, 0.0f);
transformations.push_back(transform);
meshes.push_back(MeshUtils::MeshBuilder::createCone(2.0f * radius, 0.29f, 16));
transform.translate(0.01f, 0.0f, 0.0f);
transformations.push_back(transform);
arrow = MeshUtils::combineMeshes(meshes, transformations);
MeshUtils::optimizeIndices(arrow.get());
while (!meshes.empty()) {
delete meshes.back();
meshes.pop_back();
}
}
if (sphere.isNull()) {
Util::Reference<Mesh> icosahedron = MeshUtils::PlatonicSolids::createIcosahedron();
sphere = MeshUtils::PlatonicSolids::createEdgeSubdivisionSphere(icosahedron.get(), 2);
Geometry::Matrix4x4 transform;
transform.scale(1.1f * radius);
MeshUtils::transform(sphere.get()->openVertexData(), transform);
}
if(charX.isNull()) {
std::deque<Mesh *> meshes;
std::deque<Geometry::Matrix4x4> transformations;
VertexDescription vertexDescription;
vertexDescription.appendPosition3D();
vertexDescription.appendNormalFloat();
const Geometry::Box box(Geometry::Vec3f(0.0f, 0.0f, 0.0f), 0.02f, 0.2f, 0.05f);
{
meshes.push_back(MeshUtils::MeshBuilder::createBox(vertexDescription, box));
Geometry::Matrix4x4 transform;
transform.translate(1.2f, 0.0f, 0.0f);
transform.rotate_deg(30.0f, 0.0f, 0.0f, -1.0f);
transformations.push_back(transform);
}
{
meshes.push_back(MeshUtils::MeshBuilder::createBox(vertexDescription, box));
Geometry::Matrix4x4 transform;
transform.translate(1.2f, 0.0f, 0.0f);
transform.rotate_deg(-30.0f, 0.0f, 0.0f, -1.0f);
transformations.push_back(transform);
}
charX = MeshUtils::combineMeshes(meshes, transformations);
MeshUtils::optimizeIndices(charX.get());
while(!meshes.empty()) {
delete meshes.back();
meshes.pop_back();
}
}
if(charY.isNull()) {
std::deque<Mesh *> meshes;
std::deque<Geometry::Matrix4x4> transformations;
VertexDescription vertexDescription;
vertexDescription.appendPosition3D();
vertexDescription.appendNormalFloat();
const Geometry::Box box(Geometry::Vec3f(0.0f, 0.0f, 0.0f), 0.02f, 0.1f, 0.05f);
{
meshes.push_back(MeshUtils::MeshBuilder::createBox(vertexDescription, box));
Geometry::Matrix4x4 transform;
transform.translate(0.025f, 0.045f, 0.0f);
transform.rotate_deg(30.0f, 0.0f, 0.0f, -1.0f);
transformations.push_back(transform);
}
{
meshes.push_back(MeshUtils::MeshBuilder::createBox(vertexDescription, box));
Geometry::Matrix4x4 transform;
transform.translate(-0.025f, 0.045f, 0.0f);
transform.rotate_deg(-30.0f, 0.0f, 0.0f, -1.0f);
transformations.push_back(transform);
}
{
meshes.push_back(MeshUtils::MeshBuilder::createBox(vertexDescription, box));
Geometry::Matrix4x4 transform;
transform.translate(0.0f, -0.045f, 0.0f);
transformations.push_back(transform);
}
charY = MeshUtils::combineMeshes(meshes, transformations);
//.........这里部分代码省略.........
开发者ID:MeisterYeti,项目名称:Rendering,代码行数:101,代码来源:DrawCompound.cpp
注:本文中的util::Reference类示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论