아 화면 렌더링 안 되는건 memset으로 id복사하면서 버텍스 버퍼를 0으로 덮어써버리는게 원인이었음 그리고 현재 있는 버그는 너무 빠른 속도 또는 적당한 이동속도에서 총알을 많이 발사하면 카메라의 위치가 nan이 됨.
This commit is contained in:
@@ -13,64 +13,85 @@ Model::~Model() {
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
static void Append(std::vector<char>& dst, const T& data) {
|
||||
const char* ptr = reinterpret_cast<const char*>(&data);
|
||||
dst.insert(dst.end(), ptr, ptr + sizeof(T));
|
||||
}
|
||||
|
||||
std::vector<char> Model::Serialize() {
|
||||
std::vector<char> serialized;
|
||||
|
||||
Append(serialized, ID);
|
||||
|
||||
Append(serialized, transform);
|
||||
Append(serialized, position);
|
||||
Append(serialized, linear_velocity);
|
||||
Append(serialized, linear_acceleration);
|
||||
Append(serialized, rotation);
|
||||
Append(serialized, angular_velocity);
|
||||
Append(serialized, angular_acceleration);
|
||||
Append(serialized, scale);
|
||||
Append(serialized, original_offset);
|
||||
|
||||
Append(serialized, radius);
|
||||
|
||||
uint8_t vis = visible ? 1 : 0;
|
||||
uint8_t col = colision ? 1 : 0;
|
||||
Append(serialized, vis);
|
||||
Append(serialized, col);
|
||||
|
||||
return serialized;
|
||||
void Append(std::vector<char>& buffer, const T& value) {
|
||||
const char* data = reinterpret_cast<const char*>(&value);
|
||||
buffer.insert(buffer.end(), data, data + sizeof(T));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
static void Extract(const std::vector<char>& src, size_t& offset, T& out) {
|
||||
std::memcpy(&out, src.data() + offset, sizeof(T));
|
||||
void AppendVector(std::vector<char>& buffer, const std::vector<T>& vec) {
|
||||
std::uint32_t size = static_cast<std::uint32_t>(vec.size());
|
||||
Append(buffer, size);
|
||||
buffer.insert(buffer.end(), reinterpret_cast<const char*>(vec.data()),
|
||||
reinterpret_cast<const char*>(vec.data() + size));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
void Read(const std::vector<char>& buffer, size_t& offset, T& out) {
|
||||
std::memcpy(&out, buffer.data() + offset, sizeof(T));
|
||||
offset += sizeof(T);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
void ReadVector(const std::vector<char>& buffer, size_t& offset,
|
||||
std::vector<T>& out) {
|
||||
std::uint32_t size = 0;
|
||||
Read(buffer, offset, size);
|
||||
out.resize(size);
|
||||
std::memcpy(out.data(), buffer.data() + offset, sizeof(T) * size);
|
||||
offset += sizeof(T) * size;
|
||||
}
|
||||
|
||||
std::vector<char> Model::Serialize() {
|
||||
std::vector<char> buffer;
|
||||
|
||||
AppendVector(buffer, vertices);
|
||||
AppendVector(buffer, indices);
|
||||
|
||||
Append(buffer, position);
|
||||
Append(buffer, linear_velocity);
|
||||
Append(buffer, linear_acceleration);
|
||||
|
||||
Append(buffer, rotation);
|
||||
Append(buffer, angular_velocity);
|
||||
Append(buffer, angular_acceleration);
|
||||
|
||||
Append(buffer, scale);
|
||||
Append(buffer, transform);
|
||||
|
||||
Append(buffer, original_offset);
|
||||
Append(buffer, radius);
|
||||
Append(buffer, lifespan);
|
||||
|
||||
Append(buffer, visible);
|
||||
Append(buffer, colision);
|
||||
|
||||
return buffer;
|
||||
}
|
||||
|
||||
void Model::Deserialize(std::vector<char> data) {
|
||||
size_t offset = 0;
|
||||
|
||||
Extract(data, offset, ID);
|
||||
ReadVector(data, offset, vertices);
|
||||
ReadVector(data, offset, indices);
|
||||
|
||||
Extract(data, offset, transform);
|
||||
Extract(data, offset, position);
|
||||
Extract(data, offset, linear_velocity);
|
||||
Extract(data, offset, linear_acceleration);
|
||||
Extract(data, offset, rotation);
|
||||
Extract(data, offset, angular_velocity);
|
||||
Extract(data, offset, angular_acceleration);
|
||||
Extract(data, offset, scale);
|
||||
Extract(data, offset, original_offset);
|
||||
Read(data, offset, position);
|
||||
Read(data, offset, linear_velocity);
|
||||
Read(data, offset, linear_acceleration);
|
||||
|
||||
Extract(data, offset, radius);
|
||||
Read(data, offset, rotation);
|
||||
Read(data, offset, angular_velocity);
|
||||
Read(data, offset, angular_acceleration);
|
||||
|
||||
uint8_t vis = 0, col = 0;
|
||||
Extract(data, offset, vis);
|
||||
Extract(data, offset, col);
|
||||
visible = vis != 0;
|
||||
colision = col != 0;
|
||||
Read(data, offset, scale);
|
||||
Read(data, offset, transform);
|
||||
|
||||
Read(data, offset, original_offset);
|
||||
Read(data, offset, radius);
|
||||
Read(data, offset, lifespan);
|
||||
|
||||
Read(data, offset, visible);
|
||||
Read(data, offset, colision);
|
||||
}
|
||||
|
||||
void veng::Model::Update(float dt) {
|
||||
|
||||
Reference in New Issue
Block a user