15#ifndef DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_MESH_PREDICTION_SCHEME_TEX_COORDS_ENCODER_H_
16#define DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_MESH_PREDICTION_SCHEME_TEX_COORDS_ENCODER_H_
33template <
typename DataTypeT,
class TransformT,
class MeshDataT>
44 pos_attribute_(nullptr),
45 entry_to_point_id_map_(nullptr),
50 int num_components,
const PointIndex *entry_to_point_id_map)
override;
59 if (pos_attribute_ ==
nullptr) {
89 const PointIndex point_id = entry_to_point_id_map_[entry_id];
91 pos_attribute_->ConvertValue(pos_attribute_->mapped_index(point_id),
97 const int data_offset = entry_id * num_components_;
99 static_cast<float>(
data[data_offset + 1]));
108 std::unique_ptr<DataTypeT[]> predicted_value_;
111 std::vector<bool> orientations_;
114template <
typename DataTypeT,
class TransformT,
class MeshDataT>
117 int size,
int num_components,
119 num_components_ = num_components;
120 entry_to_point_id_map_ = entry_to_point_id_map;
122 std::unique_ptr<DataTypeT[]>(
new DataTypeT[num_components]);
127 static_cast<int>(this->
mesh_data().data_to_corner_map()->
size()) - 1;
132 const int dst_offset = p * num_components;
134 in_data + dst_offset, predicted_value_.get(), out_corr + dst_offset);
139template <
typename DataTypeT,
class TransformT,
class MeshDataT>
143 const uint32_t num_orientations =
static_cast<uint32_t
>(orientations_.size());
145 bool last_orientation =
true;
148 for (
bool orientation : orientations_) {
149 encoder.
EncodeBit(orientation == last_orientation);
150 last_orientation = orientation;
157template <
typename DataTypeT,
class TransformT,
class MeshDataT>
165 this->
mesh_data().corner_table()->Next(corner_id);
167 this->
mesh_data().corner_table()->Previous(corner_id);
170 int next_data_id, prev_data_id;
172 int next_vert_id, prev_vert_id;
174 this->
mesh_data().corner_table()->Vertex(next_corner_id).value();
176 this->
mesh_data().corner_table()->Vertex(prev_corner_id).value();
178 next_data_id = this->
mesh_data().vertex_to_data_map()->at(next_vert_id);
179 prev_data_id = this->
mesh_data().vertex_to_data_map()->at(prev_vert_id);
181 if (prev_data_id < data_id && next_data_id < data_id) {
187 predicted_value_[0] =
static_cast<int>(p_uv[0]);
188 predicted_value_[1] =
static_cast<int>(p_uv[1]);
219 const Vector3f pn = prev_pos - next_pos;
220 const Vector3f cn = tip_pos - next_pos;
232 if (pn_norm2_squared > 0) {
233 s = pn.
Dot(cn) / pn_norm2_squared;
237 t = sqrt((cn - pn * s).SquaredNorm() / pn_norm2_squared);
258 const float pnus = pn_uv[0] * s + n_uv[0];
259 const float pnut = pn_uv[0] * t;
260 const float pnvs = pn_uv[1] * s + n_uv[1];
261 const float pnvt = pn_uv[1] * t;
266 const Vector2f predicted_uv_0(pnus - pnvt, pnvs + pnut);
267 const Vector2f predicted_uv_1(pnus + pnvt, pnvs - pnut);
269 if ((c_uv - predicted_uv_0).SquaredNorm() <
270 (c_uv - predicted_uv_1).SquaredNorm()) {
271 predicted_uv = predicted_uv_0;
272 orientations_.push_back(
true);
274 predicted_uv = predicted_uv_1;
275 orientations_.push_back(
false);
277 if (std::is_integral<DataTypeT>::value) {
279 predicted_value_[0] =
static_cast<int>(
floor(predicted_uv[0] + 0.5));
280 predicted_value_[1] =
static_cast<int>(
floor(predicted_uv[1] + 0.5));
282 predicted_value_[0] =
static_cast<int>(predicted_uv[0]);
283 predicted_value_[1] =
static_cast<int>(predicted_uv[1]);
291 if (prev_data_id < data_id) {
293 data_offset = prev_data_id * num_components_;
295 if (next_data_id < data_id) {
297 data_offset = next_data_id * num_components_;
302 data_offset = (data_id - 1) * num_components_;
305 for (
int i = 0; i < num_components_; ++i) {
306 predicted_value_[i] = 0;
311 for (
int i = 0; i < num_components_; ++i) {
312 predicted_value_[i] =
data[data_offset + i];
void floor(const FCube &pos, FLine &l1, FLine &l2, FLine &l3, FLine &l4, FPlane &pl, FaceStore &s)
Definition Functions.cc:95
Definition encoder_buffer.h:29
uint8_t num_components() const
Definition geometry_attribute.h:263
Type attribute_type() const
Definition geometry_attribute.h:256
Type
Definition geometry_attribute.h:46
@ POSITION
Definition geometry_attribute.h:52
MeshPredictionSchemeEncoder(const PointAttribute *attribute, const TransformT &transform, const MeshDataT &mesh_data)
Definition mesh_prediction_scheme_encoder.h:31
const MeshData & mesh_data() const
Definition mesh_prediction_scheme_encoder.h:38
bool SetParentAttribute(const PointAttribute *att) override
Definition mesh_prediction_scheme_tex_coords_encoder.h:76
typename MeshPredictionSchemeEncoder< DataTypeT, TransformT, MeshDataT >::CorrType CorrType
Definition mesh_prediction_scheme_tex_coords_encoder.h:37
MeshPredictionSchemeTexCoordsEncoder(const PointAttribute *attribute, const TransformT &transform, const MeshDataT &mesh_data)
Definition mesh_prediction_scheme_tex_coords_encoder.h:39
Vector2f GetTexCoordForEntryId(int entry_id, const DataTypeT *data) const
Definition mesh_prediction_scheme_tex_coords_encoder.h:96
bool IsInitialized() const override
Definition mesh_prediction_scheme_tex_coords_encoder.h:58
bool ComputeCorrectionValues(const DataTypeT *in_data, CorrType *out_corr, int size, int num_components, const PointIndex *entry_to_point_id_map) override
Definition mesh_prediction_scheme_tex_coords_encoder.h:116
bool EncodePredictionData(EncoderBuffer *buffer) override
Definition mesh_prediction_scheme_tex_coords_encoder.h:141
GeometryAttribute::Type GetParentAttributeType(int i) const override
Definition mesh_prediction_scheme_tex_coords_encoder.h:70
PredictionSchemeMethod GetPredictionMethod() const override
Definition mesh_prediction_scheme_tex_coords_encoder.h:54
int GetNumParentAttributes() const override
Definition mesh_prediction_scheme_tex_coords_encoder.h:68
void ComputePredictedValue(CornerIndex corner_id, const DataTypeT *data, int data_id)
Definition mesh_prediction_scheme_tex_coords_encoder.h:159
Vector3f GetPositionForEntryId(int entry_id) const
Definition mesh_prediction_scheme_tex_coords_encoder.h:88
Definition point_attribute.h:33
const PointAttribute * attribute() const
Definition prediction_scheme_encoder.h:79
const Transform & transform() const
Definition prediction_scheme_encoder.h:80
Definition rans_bit_encoder.h:28
void EndEncoding(EncoderBuffer *target_buffer)
Definition rans_bit_encoder.cc:75
void EncodeBit(bool bit)
Definition rans_bit_encoder.cc:31
void StartEncoding()
Definition rans_bit_encoder.cc:29
Scalar Dot(const Self &o) const
Definition vector_d.h:250
Scalar SquaredNorm() const
Definition vector_d.h:234
#define DRACO_DCHECK_EQ(a, b)
Definition macros.h:81
lazy data
Definition meshpage.php:1583
n< br > font size
Definition meshpage.php:3536
Definition attribute_octahedron_transform.cc:21
VectorD< float, 3 > Vector3f
Definition vector_d.h:340
VectorD< float, 2 > Vector2f
Definition vector_d.h:339
CornerIndex CornerIndex
Definition mesh_edgebreaker_encoder_impl.cc:35
bool EncodeVarint(IntTypeT val, EncoderBuffer *out_buffer)
Definition varint_encoding.h:28
PredictionSchemeMethod
Definition compression_shared.h:80
@ MESH_PREDICTION_TEX_COORDS_DEPRECATED
Definition compression_shared.h:88
Definition GameApi_pl.cc:29382