diff --git a/.vs/3dMath/v15/.suo b/.vs/3dMath/v15/.suo index 769db18..4c2d463 100644 Binary files a/.vs/3dMath/v15/.suo and b/.vs/3dMath/v15/.suo differ diff --git a/.vs/3dMath/v15/Browse.VC.opendb b/.vs/3dMath/v15/Browse.VC.opendb new file mode 100644 index 0000000..f2a154f Binary files /dev/null and b/.vs/3dMath/v15/Browse.VC.opendb differ diff --git a/3dMath.vcxproj b/3dMath.vcxproj index b805f1c..49eedf2 100644 --- a/3dMath.vcxproj +++ b/3dMath.vcxproj @@ -123,6 +123,8 @@ + + diff --git a/3dMath.vcxproj.filters b/3dMath.vcxproj.filters index 7ed2a6c..d3aa178 100644 --- a/3dMath.vcxproj.filters +++ b/3dMath.vcxproj.filters @@ -18,6 +18,12 @@ 头文件 + + 头文件 + + + 头文件 + diff --git a/CArrayBuffer.h b/CArrayBuffer.h new file mode 100644 index 0000000..15a3e32 --- /dev/null +++ b/CArrayBuffer.h @@ -0,0 +1,23 @@ +#pragma once +typedef unsigned char Byte; + +class CArrayBuffer { +public: + CArrayBuffer(int byteLength = 8) { + this->_byteLenght = byteLength; + this->pData = new Byte[this->_byteLenght]; + } + ~CArrayBuffer() { + if (this->pData != nullptr) { + delete[] this->pData; + this->pData = nullptr; + } + } + int byteLength() { + return this->_byteLenght; + } +public: + Byte *pData; +private: + int _byteLenght; +}; \ No newline at end of file diff --git a/CDataView.h b/CDataView.h new file mode 100644 index 0000000..31c34f8 --- /dev/null +++ b/CDataView.h @@ -0,0 +1,36 @@ +#pragma once +#include +#include "CArrayBuffer.h" + +typedef unsigned short uint16; +typedef float float32; + +class CDataView { +public: + CArrayBuffer* buffer; + + int byteOffset; + int byteLength; + + CDataView(CArrayBuffer* pBuffer, int byteOffset, int byteLength) { + this->buffer = pBuffer; + this->byteOffset = byteOffset; + this->byteLength = byteLength; + } + + void setFloat32(int offset, float32 value) { + memcpy(this->buffer->pData + (this->byteOffset + offset), &value, sizeof(float32)); + } + + float32 getFloat32(int offset) { + return *((float32*)(this->buffer->pData + (this->byteOffset + offset))); + } + + void setUint16(int offset, uint16 value) { + memcpy(this->buffer->pData + (this->byteOffset + offset), &value, sizeof(uint16)); + } + + uint16 getUint16(int offset) { + return *((uint16*)(this->buffer->pData + (this->byteOffset + offset))); + } +}; \ No newline at end of file diff --git a/main.cpp b/main.cpp index c638222..0feef0e 100644 --- a/main.cpp +++ b/main.cpp @@ -1,17 +1,40 @@ #include "GMath.h" +#include "CArrayBuffer.h" +#include "CDataView.h" int main() { + CArrayBuffer buffer(16); + CDataView view0(&buffer, 0, buffer.byteLength()); - float a[] = { - 0, 0, 0, 2, - 0, 0, 2, 1, - 0, 2, 1, 2, - 2, 1, 2, 3 + view0.setFloat32(8, 99.99); + view0.setUint16(8 + 4, 2048); + + printf("%f\n", view0.getFloat32(8)); + printf("%d\n", view0.getUint16(8+4)); + + CDataView view1(&buffer, 8, 18); + + printf("%f\n", view1.getFloat32(0)); + printf("%d\n", view1.getUint16(4)); + + /*float a[] = { + 2, 2, 2, 2, + 3, 3, 3, 3, + 4, 4, 4, 4, + 5, 5, 5, 5 }; GMatrix A(4, 4, a); - //cout << B*A << endl; - cout << Det(A) << endl; + float b[] = { + 2, + 2, + 2, + 2 + }; + GMatrix B(4, 1, b); + + + cout << A*B << endl;*/ /*float a[] = { 1,0,