Files
Work/engine/TEXTURE.CPP
2024-08-07 09:16:27 -04:00

121 lines
5.2 KiB
C++

#include <engine/texture.hpp>
#include <engine/point3d.hpp>
#include <engine/angle3d.hpp>
#include <engine/angle.hpp>
#include <engine/dib3d.hpp>
#include <common/dib.hpp>
#include <common/bitmap.hpp>
Texture::Texture(const Vector3D &dstPoints,Bitmap &textureBitmap,DIB3D &displayBitmap)
: mEdgeMap(&mLeftEdge,&mRightEdge)
{
mDstPoints3D=dstPoints;
displayBitmap.translatePoint(mDstPoints3D,mDstPoints2D);
mLeftEdge.numVertexes(Vector3D::VectorPoints);
mRightEdge.numVertexes(Vector3D::VectorPoints);
mTexturePoints[0]=Point(0,0);
mTexturePoints[1]=Point(textureBitmap.width()-1,0);
mTexturePoints[2]=Point(textureBitmap.width()-1,textureBitmap.height()-1);
mTexturePoints[3]=Point(0,textureBitmap.height()-1);
mLeftEdge.setSrcPoints((Point*)&mTexturePoints);
mLeftEdge.setDstPoints((Point*)&mDstPoints2D);
mRightEdge.setSrcPoints((Point*)&mTexturePoints);
mRightEdge.setDstPoints((Point*)&mDstPoints2D);
::setSrcBitmapInfo(textureBitmap.width(),textureBitmap.height(),textureBitmap.getDataPtr());
::setDstBitmapInfo(displayBitmap.width(),displayBitmap.height(),(unsigned char*)displayBitmap.ptrData());
}
Texture::Texture(const Vector3D &dstPoints,Bitmap &textureBitmap,Bitmap &displayBitmap,Device3D &displayDevice)
: mEdgeMap(&mLeftEdge,&mRightEdge)
{
mDstPoints3D=dstPoints;
displayDevice.translatePoint(mDstPoints3D,mDstPoints2D);
mLeftEdge.numVertexes(Vector3D::VectorPoints);
mRightEdge.numVertexes(Vector3D::VectorPoints);
mTexturePoints[0]=Point(0,0);
mTexturePoints[1]=Point(textureBitmap.width()-1,0);
mTexturePoints[2]=Point(textureBitmap.width()-1,textureBitmap.height()-1);
mTexturePoints[3]=Point(0,textureBitmap.height()-1);
mLeftEdge.setSrcPoints((Point*)&mTexturePoints);
mLeftEdge.setDstPoints((Point*)&mDstPoints2D);
mRightEdge.setSrcPoints((Point*)&mTexturePoints);
mRightEdge.setDstPoints((Point*)&mDstPoints2D);
::setSrcBitmapInfo(textureBitmap.width(),textureBitmap.height(),textureBitmap.getDataPtr());
::setDstBitmapInfo(displayBitmap.width(),displayBitmap.height(),displayBitmap.getDataPtr());
}
Texture::Texture(const Vector2D &dstPoints,Bitmap &textureBitmap,DIBitmap &displayBitmap)
: mEdgeMap(&mLeftEdge,&mRightEdge)
{
mDstPoints2D=dstPoints;
mLeftEdge.numVertexes(Vector3D::VectorPoints);
mRightEdge.numVertexes(Vector3D::VectorPoints);
mTexturePoints[0]=Point(0,0);
mTexturePoints[1]=Point(textureBitmap.width()-1,0);
mTexturePoints[2]=Point(textureBitmap.width()-1,textureBitmap.height()-1);
mTexturePoints[3]=Point(0,textureBitmap.height()-1);
mLeftEdge.setSrcPoints((Point*)&mTexturePoints);
mLeftEdge.setDstPoints((Point*)&mDstPoints2D);
mRightEdge.setSrcPoints((Point*)&mTexturePoints);
mRightEdge.setDstPoints((Point*)&mDstPoints2D);
::setSrcBitmapInfo(textureBitmap.width(),textureBitmap.height(),textureBitmap.getDataPtr());
::setDstBitmapInfo(displayBitmap.width(),displayBitmap.height(),(unsigned char*)displayBitmap.ptrData());
}
Texture::Texture(const Vector3D &dstPoints,Bitmap &textureBitmap,DIBitmap &displayBitmap,Device3D &displayDevice)
: mEdgeMap(&mLeftEdge,&mRightEdge)
{
mDstPoints3D=dstPoints;
displayDevice.translatePoint(mDstPoints3D,mDstPoints2D);
mLeftEdge.numVertexes(Vector3D::VectorPoints);
mRightEdge.numVertexes(Vector3D::VectorPoints);
mTexturePoints[0]=Point(0,0);
mTexturePoints[1]=Point(textureBitmap.width()-1,0);
mTexturePoints[2]=Point(textureBitmap.width()-1,textureBitmap.height()-1);
mTexturePoints[3]=Point(0,textureBitmap.height()-1);
mLeftEdge.setSrcPoints((Point*)&mTexturePoints);
mLeftEdge.setDstPoints((Point*)&mDstPoints2D);
mRightEdge.setSrcPoints((Point*)&mTexturePoints);
mRightEdge.setDstPoints((Point*)&mDstPoints2D);
::setSrcBitmapInfo(textureBitmap.width(),textureBitmap.height(),textureBitmap.getDataPtr());
::setDstBitmapInfo(displayBitmap.width(),displayBitmap.height(),(unsigned char*)displayBitmap.ptrData());
}
Texture::Texture(const Triangle3D &angle3D,Bitmap &textureBitmap,DIBitmap &displayBitmap,Device3D &displayDevice,TriMap triMap)
: mEdgeMap(&mLeftEdge,&mRightEdge)
{
Triangle angle2D;
displayDevice.mapCoordinates((Triangle3D&)angle3D,angle2D);
mDstPoints2D[0]=angle2D[0];
mDstPoints2D[1]=angle2D[1];
mDstPoints2D[2]=angle2D[2];
mLeftEdge.numVertexes(Triangle::VectorPoints);
mRightEdge.numVertexes(Triangle::VectorPoints);
switch(triMap)
{
case MapCenter :
mTexturePoints[0]=Point(0,textureBitmap.height()-1);
mTexturePoints[1]=Point(textureBitmap.width()/2,0);
mTexturePoints[2]=Point(textureBitmap.width()-1,textureBitmap.height()-1);
break;
case MapUpperRight :
mTexturePoints[0]=Point(0,0);
mTexturePoints[1]=Point(textureBitmap.width()-1,0);
mTexturePoints[2]=Point(textureBitmap.width()-1,textureBitmap.height()-1);
break;
case MapLowerLeft :
mTexturePoints[0]=Point(0,0);
mTexturePoints[1]=Point(textureBitmap.width()-1,textureBitmap.height()-1);
mTexturePoints[2]=Point(0,textureBitmap.height()-1);
break;
}
mLeftEdge.setSrcPoints((Point*)&mTexturePoints);
mLeftEdge.setDstPoints((Point*)&mDstPoints2D);
mRightEdge.setSrcPoints((Point*)&mTexturePoints);
mRightEdge.setDstPoints((Point*)&mDstPoints2D);
::setSrcBitmapInfo(textureBitmap.width(),textureBitmap.height(),textureBitmap.getDataPtr());
::setDstBitmapInfo(displayBitmap.width(),displayBitmap.height(),(unsigned char*)displayBitmap.ptrData());
}