Browse Source

聚餐复合操作

master
blobt 5 years ago
parent
commit
4dc9e78392
  1. 25
      src/4matrix/Raster.cc
  2. 4
      src/4matrix/Raster.h
  3. 50
      src/4matrix/matrix.cc
  4. 9
      src/4matrix/struct/tmat3x3.h
  5. 16
      src/4matrix/struct/tvec3.h

25
src/4matrix/Raster.cc

@ -42,6 +42,7 @@ Raster::Raster(int width, int height) {
_defaultUvPointer.stride = sizeof (float2);
_defaultUvPointer.data = _defaultUvArray;
_matModel = matrix3(1);
}
Raster::~Raster() {
@ -322,13 +323,23 @@ void Raster::drawArrays(DRAWMODE pri, int start, int count) {
for (int i = start; i < start + count; i += 3) {
float* pp = (float*) posData;
int2 p0(pp[0], pp[1]);
float3 mp0(pp[0], pp[1],1);
mp0 = _matModel * mp0;
posData += _positionPointer.stride;
pp = (float*) posData;
int2 p1(pp[0], pp[1]);
float3 mp1(pp[0], pp[1],1);
mp1 = _matModel * mp1;
posData += _positionPointer.stride;
pp = (float*) posData;
int2 p2(pp[0], pp[1]);
float3 mp2(pp[0], pp[1],1);
mp2 = _matModel * mp2;
int2 p0(mp0.x,mp0.y);
int2 p1(mp1.x,mp1.y);
int2 p2(mp2.x,mp2.y);
posData += _positionPointer.stride;
Rgba* pc = (Rgba*) cData;
@ -371,6 +382,14 @@ void Raster::drawArrays(DRAWMODE pri, int start, int count) {
}
void Raster::loadMatrix(const matrix3& mat){
_matModel = mat;
}
void Raster::loadIdentity(){
_matModel = matrix3(1);
}
void Raster::bindTexture(Image* image) {
_texture = image;
}

4
src/4matrix/Raster.h

@ -139,6 +139,8 @@ public:
void drawTriangle(Ege eges[3], Image* image);
void drawArrays(DRAWMODE pri, int start, int count);
void bindTexture(Image* image);
void loadMatrix(const matrix3& mat);
void loadIdentity();
int size();
void clean();
bool setPixel(int x, int y, Rgba color);
@ -149,6 +151,8 @@ private:
int _height;
Rgba _color;
Image* _texture;
matrix3 _matModel;
DataElementDes _positionPointer;
DataElementDes _colorPointer;

50
src/4matrix/matrix.cc

@ -20,9 +20,51 @@ struct Vertex {
Rgba color;
};
/**
*
*/
void example3() {
Vertex vertexs[] = {
{-10, -10, 0.0f, 0.0f, Rgba(255, 0, 0, 255)},
{210, 210, 1.0f, 1.0f, Rgba(255, 0, 0, 255)},
{210, -10, 1.0f, 0.0f, Rgba(255, 0, 0, 255)},
{-10, -10, 0.0f, 0.0f, Rgba(255, 255, 255, 255)},
{210, 210, 1.0f, 1.0f, Rgba(255, 255, 255, 255)},
{-10, 210, 0.0f, 1.0f, Rgba(255, 255, 255, 255)},
};
matrix3 tranMat1;
tranMat1.translate(-110, -110);
matrix3 mat;
static float angle = 0;
mat.rotate(angle);
angle += 0.5;
matrix3 scaleMat;
scaleMat.scale(0.5f, 0.5f);
matrix3 tranMat2;
tranMat2.translate(110, 110);
matrix3 all = tranMat2 * (mat * scaleMat * tranMat1);
raster.loadMatrix(all);
//raster.loadIdentity();
Image* image = Image::loadFromFile("/home/blobt/Documents/dev/cpp/3dbase/image/scale.jpg");
raster.bindTexture(image);
raster.vertexPointer(2, DT_FLOAT, sizeof (Vertex), &vertexs[0].x);
raster.colorPointer(4, DT_BYTE, sizeof (Vertex), &vertexs[0].color);
raster.textureCoordPointer(2, DT_FLOAT, sizeof (Vertex), &vertexs[0].u);
raster.drawArrays(DM_TRIANGES, 0, 6);
}
void example2() {
Vertex vertexs[] = {
{-10, -10, 0.0f, 0.0f, Rgba(255, 0, 0, 255)},
@ -87,7 +129,7 @@ void example1() {
unsigned char* makeBitmap() {
raster.clean();
example2();
example3();
return (unsigned char*) raster.buffer;
}

9
src/4matrix/struct/tmat3x3.h

@ -63,6 +63,7 @@ public:
value[2] = col_type(zero, zero, s);
}
tmat3x3(
value_type const &x0, value_type const &y0, value_type const &z0,
value_type const &x1, value_type const &y1, value_type const &z1,
@ -93,6 +94,14 @@ public:
value[0] = s[0];
value[1] = s[1];
value[2] = s[2];
return *this;
}
type const &operator=(type const & s) {
value[0] = s[0];
value[1] = s[1];
value[2] = s[2];
return *this;
}
tvec3<T> operator*(const tvec3<T> &s) const {

16
src/4matrix/struct/tvec3.h

@ -70,9 +70,9 @@ struct tvec3 {
*/
template <typename U>
tvec3(U s) {
// x = value_type(s);
// y = value_type(s);
// z = value_type(s);
// x = value_type(s);
// y = value_type(s);
// z = value_type(s);
}
template <typename A, typename B, typename C>
@ -82,7 +82,15 @@ struct tvec3 {
z = value_type(s3);
}
tvec3<T>& operator=(tvec3<T> const &s) {
tvec3<T>& operator=(tvec3<T> &s) {
x = s.x;
y = s.y;
z = s.z;
return *this;
}
tvec3<T> const & operator=(tvec3<T> const &s) {
x = s.x;
y = s.y;
z = s.z;

Loading…
Cancel
Save