开源 企业版 高校版 私有云 模力方舟 AI 队友
代码拉取完成,页面将自动刷新
加入 Gitee
与超过 1400万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
已有帐号? 立即登录
文件
release
分支 (30)
标签 (27)
release
tylermorganwall-triangulation-fix
mapboxearcut-correct-facing
mapboxearcut-ccw
webassembly
shape-dealloc
opt-refactor
mkdocs
azure-pypi
vertex_weight
simplegui
multithreaded-parser-merge
pypi
v1.0.x
warn
afl
smoothing-group
gopalss-SmoothingGroup
devel
better-cxx11-support
v2.0.0rc10
v2.0.0rc9
v2.0.0rc8
v2.0.0rc7
v2.0.0rc6
v2.0.0rc5
v2.0.0-rc4
v2.0.0-rc3
v2.0.0-rc2
v2.0.0-rc1
v2.0-rc1
v1.0.7
v1.0.6
v1.0.5
v1.0.4
v1.0.2
v1.0.1
v1.0.0
v0.9.25
v0.9.24
release
分支 (30)
标签 (27)
release
tylermorganwall-triangulation-fix
mapboxearcut-correct-facing
mapboxearcut-ccw
webassembly
shape-dealloc
opt-refactor
mkdocs
azure-pypi
vertex_weight
simplegui
multithreaded-parser-merge
pypi
v1.0.x
warn
afl
smoothing-group
gopalss-SmoothingGroup
devel
better-cxx11-support
v2.0.0rc10
v2.0.0rc9
v2.0.0rc8
v2.0.0rc7
v2.0.0rc6
v2.0.0rc5
v2.0.0-rc4
v2.0.0-rc3
v2.0.0-rc2
v2.0.0-rc1
v2.0-rc1
v1.0.7
v1.0.6
v1.0.5
v1.0.4
v1.0.2
v1.0.1
v1.0.0
v0.9.25
v0.9.24
克隆/下载
克隆/下载
提示
下载代码请复制以下命令到终端执行
为确保你提交的代码身份被 Gitee 正确识别,请执行以下命令完成配置
初次使用 SSH 协议进行代码克隆、推送等操作时,需按下述提示完成 SSH 配置
1 生成 RSA 密钥
2 获取 RSA 公钥内容,并配置到 SSH公钥
在 Gitee 上使用 SVN,请访问 使用指南
使用 HTTPS 协议时,命令行会出现如下账号密码验证步骤。基于安全考虑,Gitee 建议 配置并使用私人令牌 替代登录密码进行克隆、推送等操作
Username for 'https://gitee.com': userName
Password for 'https://userName@gitee.com': # 私人令牌
release
分支 (30)
标签 (27)
release
tylermorganwall-triangulation-fix
mapboxearcut-correct-facing
mapboxearcut-ccw
webassembly
shape-dealloc
opt-refactor
mkdocs
azure-pypi
vertex_weight
simplegui
multithreaded-parser-merge
pypi
v1.0.x
warn
afl
smoothing-group
gopalss-SmoothingGroup
devel
better-cxx11-support
v2.0.0rc10
v2.0.0rc9
v2.0.0rc8
v2.0.0rc7
v2.0.0rc6
v2.0.0rc5
v2.0.0-rc4
v2.0.0-rc3
v2.0.0-rc2
v2.0.0-rc1
v2.0-rc1
v1.0.7
v1.0.6
v1.0.5
v1.0.4
v1.0.2
v1.0.1
v1.0.0
v0.9.25
v0.9.24
tinyobjloader
/
python
/
bindings.cc
tinyobjloader
/
python
/
bindings.cc
bindings.cc 6.94 KB
一键复制 编辑 原始数据 按行查看 历史
Syoyo Fujita 提交于 2022年10月09日 02:52 +08:00 . Bfut python new setup (#345)
#include <pybind11/pybind11.h>
#include <pybind11/stl.h>
#include <pybind11/numpy.h>
#include <cstring>
// Use double precision for better python integration.
#define TINYOBJLOADER_USE_DOUBLE
// define some helper functions for pybind11
#define TINY_OBJ_LOADER_PYTHON_BINDING
#include "../tiny_obj_loader.h"
namespace py = pybind11;
using namespace tinyobj;
PYBIND11_MODULE(tinyobjloader, tobj_module)
{
tobj_module.doc() = "Python bindings for TinyObjLoader.";
// register struct
py::class_<ObjReaderConfig>(tobj_module, "ObjReaderConfig")
.def(py::init<>())
.def_readwrite("triangulate", &ObjReaderConfig::triangulate);
// py::init<>() for default constructor
py::class_<ObjReader>(tobj_module, "ObjReader")
.def(py::init<>())
.def("ParseFromFile", &ObjReader::ParseFromFile, py::arg("filename"), py::arg("option") = ObjReaderConfig())
.def("ParseFromString", &ObjReader::ParseFromString, py::arg("obj_text"), py::arg("mtl_text"), py::arg("option") = ObjReaderConfig())
.def("Valid", &ObjReader::Valid)
.def("GetAttrib", &ObjReader::GetAttrib)
.def("GetShapes", &ObjReader::GetShapes)
.def("GetMaterials", &ObjReader::GetMaterials)
.def("Warning", &ObjReader::Warning)
.def("Error", &ObjReader::Error);
py::class_<attrib_t>(tobj_module, "attrib_t")
.def(py::init<>())
.def_readonly("vertices", &attrib_t::vertices)
.def("numpy_vertices", [] (attrib_t &instance) {
auto ret = py::array_t<real_t>(instance.vertices.size());
py::buffer_info buf = ret.request();
memcpy(buf.ptr, instance.vertices.data(), instance.vertices.size() * sizeof(real_t));
return ret;
})
.def_readonly("normals", &attrib_t::normals)
.def_readonly("texcoords", &attrib_t::texcoords)
.def_readonly("colors", &attrib_t::colors)
;
py::class_<shape_t>(tobj_module, "shape_t")
.def(py::init<>())
.def_readwrite("name", &shape_t::name)
.def_readwrite("mesh", &shape_t::mesh)
.def_readwrite("lines", &shape_t::lines)
.def_readwrite("points", &shape_t::points);
py::class_<index_t>(tobj_module, "index_t")
.def(py::init<>())
.def_readwrite("vertex_index", &index_t::vertex_index)
.def_readwrite("normal_index", &index_t::normal_index)
.def_readwrite("texcoord_index", &index_t::texcoord_index)
;
// NOTE(syoyo): It looks it is rather difficult to expose assignment by array index to
// python world for array variable.
// For example following python scripting does not work well.
//
// print(mat.diffuse)
// >>> [0.1, 0.2, 0.3]
// mat.diffuse[1] = 1.0
// print(mat.diffuse)
// >>> [0.1, 0.2, 0.3] # No modification
//
// https://github.com/pybind/pybind11/issues/1134
//
// so, we need to update array variable like this:
//
// diffuse = mat.diffuse
// diffuse[1] = 1.0
// mat.diffuse = diffuse
//
py::class_<material_t>(tobj_module, "material_t")
.def(py::init<>())
.def_readwrite("name", &material_t::name)
.def_property("ambient", &material_t::GetAmbient, &material_t::SetAmbient)
.def_property("diffuse", &material_t::GetDiffuse, &material_t::SetDiffuse)
.def_property("specular", &material_t::GetSpecular, &material_t::SetSpecular)
.def_property("transmittance", &material_t::GetTransmittance, &material_t::SetTransmittance)
.def_readwrite("shininess", &material_t::shininess)
.def_readwrite("ior", &material_t::ior)
.def_readwrite("dissolve", &material_t::dissolve)
.def_readwrite("illum", &material_t::illum)
.def_readwrite("ambient_texname", &material_t::ambient_texname)
.def_readwrite("diffuse_texname", &material_t::diffuse_texname)
.def_readwrite("specular_texname", &material_t::specular_texname)
.def_readwrite("specular_highlight_texname", &material_t::specular_highlight_texname)
.def_readwrite("bump_texname", &material_t::bump_texname)
.def_readwrite("displacement_texname", &material_t::displacement_texname)
.def_readwrite("alpha_texname", &material_t::alpha_texname)
.def_readwrite("reflection_texname", &material_t::reflection_texname)
// TODO(syoyo): Expose texture parameter
// PBR
.def_readwrite("roughness", &material_t::roughness)
.def_readwrite("metallic", &material_t::metallic)
.def_readwrite("sheen", &material_t::sheen)
.def_readwrite("clearcoat_thickness", &material_t::clearcoat_thickness)
.def_readwrite("clearcoat_roughness", &material_t::clearcoat_roughness)
.def_readwrite("anisotropy", &material_t::anisotropy)
.def_readwrite("anisotropy_rotation", &material_t::anisotropy_rotation)
.def_readwrite("roughness_texname", &material_t::roughness_texname)
.def_readwrite("metallic_texname", &material_t::metallic_texname)
.def_readwrite("sheen_texname", &material_t::sheen_texname)
.def_readwrite("emissive_texname", &material_t::emissive_texname)
.def_readwrite("normal_texname", &material_t::normal_texname)
.def("GetCustomParameter", &material_t::GetCustomParameter)
;
py::class_<mesh_t>(tobj_module, "mesh_t")
.def(py::init<>())
.def_readonly("num_face_vertices", &mesh_t::num_face_vertices)
.def("numpy_num_face_vertices", [] (mesh_t &instance) {
auto ret = py::array_t<unsigned char>(instance.num_face_vertices.size());
py::buffer_info buf = ret.request();
memcpy(buf.ptr, instance.num_face_vertices.data(), instance.num_face_vertices.size() * sizeof(unsigned char));
return ret;
})
.def_readonly("indices", &mesh_t::indices)
.def("numpy_indices", [] (mesh_t &instance) {
// Flatten indexes. index_t is composed of 3 ints(vertex_index, normal_index, texcoord_index).
// numpy_indices = [0, -1, -1, 1, -1, -1, ...]
// C++11 or later should pack POD struct tightly and does not reorder variables,
// so we can memcpy to copy data.
// Still, we check the size of struct and byte offsets of each variable just for sure.
static_assert(sizeof(index_t) == 12, "sizeof(index_t) must be 12");
static_assert(offsetof(index_t, vertex_index) == 0, "offsetof(index_t, vertex_index) must be 0");
static_assert(offsetof(index_t, normal_index) == 4, "offsetof(index_t, normal_index) must be 4");
static_assert(offsetof(index_t, texcoord_index) == 8, "offsetof(index_t, texcoord_index) must be 8");
auto ret = py::array_t<int>(instance.indices.size() * 3);
py::buffer_info buf = ret.request();
memcpy(buf.ptr, instance.indices.data(), instance.indices.size() * 3 * sizeof(int));
return ret;
})
.def_readonly("material_ids", &mesh_t::material_ids)
.def("numpy_material_ids", [] (mesh_t &instance) {
auto ret = py::array_t<int>(instance.material_ids.size());
py::buffer_info buf = ret.request();
memcpy(buf.ptr, instance.material_ids.data(), instance.material_ids.size() * sizeof(int));
return ret;
});
py::class_<lines_t>(tobj_module, "lines_t")
.def(py::init<>());
py::class_<points_t>(tobj_module, "points_t")
.def(py::init<>());
}
Loading...
举报
举报成功
我们将于2个工作日内通过站内信反馈结果给你!
请认真填写举报原因,尽可能描述详细。
请选择举报类型
取消
发送
误判申诉

此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。

如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。

取消
提交

简介

tinyobjloader
暂无标签
MIT
使用 MIT 开源许可协议
取消

发行版

暂无发行版

贡献者

全部

近期动态

不能加载更多了
编辑仓库简介
简介内容
主页
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C++
1
https://gitee.com/peridyno/tinyobjloader.git
git@gitee.com:peridyno/tinyobjloader.git
peridyno
tinyobjloader
tinyobjloader
release
点此查找更多帮助

搜索帮助

评论
仓库举报
回到顶部
登录提示
该操作需登录 Gitee 帐号,请先登录后再操作。
立即登录
没有帐号,去注册

AltStyle によって変換されたページ (->オリジナル) /