#include "dxstdafx.h" #include "texturedmaterial.h" TexturedMaterial::TexturedMaterial(void* pdata, int pitch, int textureSize) :Material(Vector::RGBLIGHTYELLOW, Vector::RGBLIGHTYELLOW, 4.0) { this->pdata = new unsigned char[pitch * textureSize]; memcpy(this->pdata, pdata, pitch * textureSize); this->pitch = pitch; this->imageSize = textureSize; } TexturedMaterial::~TexturedMaterial(void) { delete pdata; } Vector TexturedMaterial::getTextureDiffuseBrdf(const Vector& atPoint) const { unsigned int dataIndex = floor(fabsf(atPoint.x) * imageSize) * 4 + floor(fabsf(1.0 - fabsf(atPoint.y)) * imageSize) * pitch; if(dataIndex >= pitch * imageSize) 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; }