📄 lwo2parser.h
字号:
FORM::SURF::BUMP *chk = new FORM::SURF::BUMP; chk->strength = read_FP4(it); chk->envelope = read_VX(it); return chk; } if (tag == "SIDE") { FORM::SURF::SIDE *chk = new FORM::SURF::SIDE; chk->sidedness = read_U2(it); return chk; } if (tag == "SMAN") { FORM::SURF::SMAN *chk = new FORM::SURF::SMAN; chk->max_smoothing_angle = read_ANG4(it); return chk; } if (tag == "RFOP") { FORM::SURF::RFOP *chk = new FORM::SURF::RFOP; chk->reflection_options = read_U2(it); return chk; } if (tag == "RIMG") { FORM::SURF::RIMG *chk = new FORM::SURF::RIMG; chk->image = read_VX(it); return chk; } if (tag == "RSAN") { FORM::SURF::RSAN *chk = new FORM::SURF::RSAN; chk->seam_angle = read_ANG4(it); chk->envelope = read_VX(it); return chk; } if (tag == "RBLR") { FORM::SURF::RBLR *chk = new FORM::SURF::RBLR; chk->blur_percentage = read_FP4(it); chk->envelope = read_VX(it); return chk; } if (tag == "RIND") { FORM::SURF::RIND *chk = new FORM::SURF::RIND; chk->refractive_index = read_F4(it); chk->envelope = read_VX(it); return chk; } if (tag == "TROP") { FORM::SURF::TROP *chk = new FORM::SURF::TROP; chk->transparency_options = read_U2(it); return chk; } if (tag == "TIMG") { FORM::SURF::TIMG *chk = new FORM::SURF::TIMG; chk->image = read_VX(it); return chk; } if (tag == "TBLR") { FORM::SURF::TBLR *chk = new FORM::SURF::TBLR; chk->blur_percentage = read_FP4(it); chk->envelope = read_VX(it); return chk; } if (tag == "CLRH") { FORM::SURF::CLRH *chk = new FORM::SURF::CLRH; chk->color_highlights = read_FP4(it); chk->envelope = read_VX(it); return chk; } if (tag == "CLRF") { FORM::SURF::CLRF *chk = new FORM::SURF::CLRF; chk->color_filter = read_FP4(it); chk->envelope = read_VX(it); return chk; } if (tag == "ADTR") { FORM::SURF::ADTR *chk = new FORM::SURF::ADTR; chk->additive = read_FP4(it); chk->envelope = read_VX(it); return chk; } if (tag == "GLOW") { FORM::SURF::GLOW *chk = new FORM::SURF::GLOW; chk->type = read_U2(it); chk->intensity = read_F4(it); chk->intensity_envelope = read_VX(it); chk->size = read_F4(it); chk->size_envelope = read_VX(it); return chk; } if (tag == "LINE") { FORM::SURF::LINE *chk = new FORM::SURF::LINE; chk->flags = read_U2(it); if (it < end) { chk->size = read_F4(it); chk->size_envelope = read_VX(it); if (it < end) { chk->color = read_COL12(it); chk->color_envelope = read_VX(it); } } return chk; } if (tag == "ALPH") { FORM::SURF::ALPH *chk = new FORM::SURF::ALPH; chk->mode = read_U2(it); chk->value = read_FP4(it); return chk; } if (tag == "VCOL") { FORM::SURF::VCOL *chk = new FORM::SURF::VCOL; chk->intensity = read_FP4(it); chk->envelope = read_VX(it); chk->vmap_type = read_ID4(it); chk->name = read_S0(it); return chk; } // surface blocks if (tag == "BLOK") { FORM::SURF::BLOK *chk = new FORM::SURF::BLOK; std::string hid; for (Iter tempit=it; tempit<(it+4); ++tempit) hid += *tempit; chk->header = parse_subchunk(it, "FORM::SURF::BLOK"); while (it < end) { chk->attributes.push_back(parse_subchunk(it, "FORM::SURF::BLOK::" + hid)); } return chk; } } if (context == "FORM::SURF::BLOK") { // block headers if (tag == "IMAP") { FORM::SURF::BLOK::IMAP *chk = new FORM::SURF::BLOK::IMAP; chk->ordinal = read_S0(it); while (it < end) { chk->block_attributes.push_back(parse_subchunk(it, "FORM::SURF::BLOK")); } return chk; } if (tag == "PROC") { FORM::SURF::BLOK::PROC *chk = new FORM::SURF::BLOK::PROC; chk->ordinal = read_S0(it); while (it < end) { chk->block_attributes.push_back(parse_subchunk(it, "FORM::SURF::BLOK")); } return chk; } if (tag == "GRAD") { FORM::SURF::BLOK::GRAD *chk = new FORM::SURF::BLOK::GRAD; chk->ordinal = read_S0(it); while (it < end) { chk->block_attributes.push_back(parse_subchunk(it, "FORM::SURF::BLOK")); } return chk; } if (tag == "SHDR") { FORM::SURF::BLOK::SHDR *chk = new FORM::SURF::BLOK::SHDR; chk->ordinal = read_S0(it); while (it < end) { chk->block_attributes.push_back(parse_subchunk(it, "FORM::SURF::BLOK")); } return chk; } } if (context == "FORM::SURF::BLOK") { // attributes common to all block headers if (tag == "CHAN") { FORM::SURF::BLOK::CHAN *chk = new FORM::SURF::BLOK::CHAN; chk->texture_channel = read_ID4(it); return chk; } if (tag == "ENAB") { FORM::SURF::BLOK::ENAB *chk = new FORM::SURF::BLOK::ENAB; chk->enable = read_U2(it); return chk; } if (tag == "OPAC") { FORM::SURF::BLOK::OPAC *chk = new FORM::SURF::BLOK::OPAC; chk->type = read_U2(it); chk->opacity = read_FP4(it); chk->envelope = read_VX(it); return chk; } if (tag == "AXIS") { FORM::SURF::BLOK::AXIS *chk = new FORM::SURF::BLOK::AXIS; chk->displacement_axis = read_U2(it); return chk; } } if (context == "FORM::SURF::BLOK::IMAP" || context == "FORM::SURF::BLOK::PROC") { if (tag == "TMAP") { FORM::SURF::BLOK::IMAP::TMAP *chk = new FORM::SURF::BLOK::IMAP::TMAP; while (it < end) chk->attributes.push_back(parse_subchunk(it, "FORM::SURF::BLOK::IMAP/PROC::TMAP")); return chk; } } if (context == "FORM::SURF::BLOK::IMAP/PROC::TMAP") { if (tag == "CNTR") { FORM::SURF::BLOK::IMAP::TMAP::CNTR *chk = new FORM::SURF::BLOK::IMAP::TMAP::CNTR; chk->vector = read_VEC12(it); chk->envelope = read_VX(it); return chk; } if (tag == "SIZE") { FORM::SURF::BLOK::IMAP::TMAP::SIZE *chk = new FORM::SURF::BLOK::IMAP::TMAP::SIZE; chk->vector = read_VEC12(it); chk->envelope = read_VX(it); return chk; } if (tag == "ROTA") { FORM::SURF::BLOK::IMAP::TMAP::ROTA *chk = new FORM::SURF::BLOK::IMAP::TMAP::ROTA; chk->vector = read_VEC12(it); chk->envelope = read_VX(it); return chk; } if (tag == "OREF") { FORM::SURF::BLOK::IMAP::TMAP::OREF *chk = new FORM::SURF::BLOK::IMAP::TMAP::OREF; chk->object_name = read_S0(it); return chk; } if (tag == "FALL") { FORM::SURF::BLOK::IMAP::TMAP::FALL *chk = new FORM::SURF::BLOK::IMAP::TMAP::FALL; chk->type = read_U2(it); chk->vector = read_VEC12(it); chk->envelope = read_VX(it); return chk; } if (tag == "CSYS") { FORM::SURF::BLOK::IMAP::TMAP::CSYS *chk = new FORM::SURF::BLOK::IMAP::TMAP::CSYS; chk->type = read_U2(it); return chk; } } if (context == "FORM::SURF::BLOK::IMAP") { if (tag == "PROJ") { FORM::SURF::BLOK::IMAP::PROJ *chk = new FORM::SURF::BLOK::IMAP::PROJ; chk->projection_mode = read_U2(it); return chk; } if (tag == "AXIS") { FORM::SURF::BLOK::IMAP::AXIS *chk = new FORM::SURF::BLOK::IMAP::AXIS; chk->texture_axis = read_U2(it); return chk; } if (tag == "IMAG") { FORM::SURF::BLOK::IMAP::IMAG *chk = new FORM::SURF::BLOK::IMAP::IMAG; chk->texture_image = read_VX(it); return chk; } if (tag == "WRAP") { FORM::SURF::BLOK::IMAP::WRAP *chk = new FORM::SURF::BLOK::IMAP::WRAP; chk->width_wrap = read_U2(it); chk->height_wrap = read_U2(it); return chk; } if (tag == "WRPW") { FORM::SURF::BLOK::IMAP::WRPW *chk = new FORM::SURF::BLOK::IMAP::WRPW; chk->cycles = read_FP4(it); chk->envelope = read_VX(it); return chk; } if (tag == "WRPH") { FORM::SURF::BLOK::IMAP::WRPH *chk = new FORM::SURF::BLOK::IMAP::WRPH; chk->cycles = read_FP4(it); chk->envelope = read_VX(it); return chk; } if (tag == "VMAP") { FORM::SURF::BLOK::IMAP::VMAP *chk = new FORM::SURF::BLOK::IMAP::VMAP; chk->txuv_map_name = read_S0(it); return chk; } if (tag == "AAST") { FORM::SURF::BLOK::IMAP::AAST *chk = new FORM::SURF::BLOK::IMAP::AAST; chk->flags = read_U2(it); chk->antialiasing_strength = read_FP4(it); return chk; } if (tag == "PIXB") { FORM::SURF::BLOK::IMAP::PIXB *chk = new FORM::SURF::BLOK::IMAP::PIXB; chk->flags = read_U2(it); return chk; } if (tag == "STCK") { FORM::SURF::BLOK::IMAP::STCK *chk = new FORM::SURF::BLOK::IMAP::STCK; chk->on_off = read_U2(it); chk->time = read_FP4(it); return chk; } if (tag == "TAMP") { FORM::SURF::BLOK::IMAP::TAMP *chk = new FORM::SURF::BLOK::IMAP::TAMP; chk->amplitude = read_FP4(it); chk->envelope = read_VX(it); return chk; } } if (context == "FORM::SURF::BLOK::PROC") { if (tag == "AXIS") { FORM::SURF::BLOK::PROC::AXIS *chk = new FORM::SURF::BLOK::PROC::AXIS; chk->axis = read_U2(it); return chk; } if (tag == "VALU") { FORM::SURF::BLOK::PROC::VALU *chk = new FORM::SURF::BLOK::PROC::VALU; while (it < end) chk->value.push_back(read_FP4(it)); return chk; } if (tag == "FUNC") { FORM::SURF::BLOK::PROC::FUNC *chk = new FORM::SURF::BLOK::PROC::FUNC; chk->algorithm_name = read_S0(it); while (it < end) chk->data.push_back(read_U1(it)); return chk; } } if (context == "FORM::SURF::BLOK::GRAD") { if (tag == "PNAM") { FORM::SURF::BLOK::GRAD::PNAM *chk = new FORM::SURF::BLOK::GRAD::PNAM; chk->parameter = read_S0(it); return chk; } if (tag == "INAM") { FORM::SURF::BLOK::GRAD::INAM *chk = new FORM::SURF::BLOK::GRAD::INAM; chk->item_name = read_S0(it); return chk; } if (tag == "GRST") { FORM::SURF::BLOK::GRAD::GRST *chk = new FORM::SURF::BLOK::GRAD::GRST; chk->input_range = read_FP4(it); return chk; } if (tag == "GREN") { FORM::SURF::BLOK::GRAD::GREN *chk = new FORM::SURF::BLOK::GRAD::GREN; chk->input_range = read_FP4(it); return chk; } if (tag == "GRPT") { FORM::SURF::BLOK::GRAD::GRPT *chk = new FORM::SURF::BLOK::GRAD::GRPT; chk->repeat_mode = read_U2(it); return chk; } if (tag == "FKEY") { FORM::SURF::BLOK::GRAD::FKEY *chk = new FORM::SURF::BLOK::GRAD::FKEY; while (it < end) { FORM::SURF::BLOK::GRAD::FKEY::value_type val; val.input = read_FP4(it); for (int i=0; i<4; ++i) val.output[i] = read_FP4(it); chk->values.push_back(val); } return chk; } if (tag == "IKEY") { FORM::SURF::BLOK::GRAD::IKEY *chk = new FORM::SURF::BLOK::GRAD::IKEY; while (it < end) chk->interpolation.push_back(read_U2(it)); return chk; } } if (context == "FORM::SURF::BLOK::SHDR") { if (tag == "FUNC") { FORM::SURF::BLOK::SHDR::FUNC *chk = new FORM::SURF::BLOK::SHDR::FUNC; chk->algorithm_name = read_S0(it); while (it < end) chk->data.push_back(read_U1(it)); return chk; } } return 0; } LP_TMP iff::Chunk *Parser<Iter>::parse_subchunk(Iter &it, const std::string &context) { std::string tag; for (int i=0; i<4; ++i) tag += *(it++); unsigned int len = ((static_cast<unsigned int>(*(it++)) & 0xFF) << 8) | (static_cast<unsigned int>(*(it++)) & 0xFF); this->os() << "DEBUG INFO: lwo2parser: reading subchunk " << tag << ", length = " << len << ", context = " << context << "\n"; iff::Chunk *chk = parse_chunk_data(tag, context, it, it+len); if (!chk) this->os() << "DEBUG INFO: lwo2parser: \tprevious subchunk not handled\n"; it += len; if ((len % 2) != 0) ++it; return chk; }}#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -