#include "dxstdafx.h" #include "texturedmaterial.h" TexturedMaterial::TexturedMaterial(void* pdata, int pitch, int textureWidth, int textureHeight) :Material(Vector::RGBLIGHTYELLOW, Vector::RGBLIGHTYELLOW, 4.0) { this->pdata = new unsigned char[pitch * textureHeight]; memcpy(this->pdata, pdata, pitch * textureHeight); this->pitch = pitch; this->imageWidth = textureWidth; this->imageHeight = textureHeight; } TexturedMaterial::~TexturedMaterial(void) { delete pdata; } Vector TexturedMaterial::getTextureDiffuseBrdf(const Vector& atPoint) const { Vector qp = atPoint; qp.x -= floor(qp.x); qp.y -= floor(qp.y); unsigned int dataIndex = floor(fabsf(qp.x) * imageWidth) * 4 + floor(fabsf(1.0 - fabsf(qp.y)) * imageHeight) * pitch; if(dataIndex >= pitch * imageHeight) return Vector::RGBBLACK; return Vector( pdata[dataIndex+2] / 255.0, pdata[dataIndex+1] / 255.0, pdata[dataIndex] / 255.0); } Vector TexturedMaterial::getTextureIdealBrdf(const Vector& atPoint) const { return Vector::RGBBLACK; } float TexturedMaterial::getTextureDiffuseAlbedo(const Vector& uv) const { return getTextureDiffuseBrdf(uv).sum() / 3.0; } float TexturedMaterial::getTextureIdealAlbedo(const Vector& uv) const { return getTextureIdealBrdf(uv).sum() / 3.0; }