#include <deform_2d.h>
Nevrax France
Definition at line 47 of file deform_2d.h.
Public Types | |
typedef std::vector< NLMISC::CVector2f > | TPoint2DVect |
Static Public Member Functions | |
void | doDeform (const TPoint2DVect &surf, IDriver *drv, IPerturbUV *uvp) |
void | setupBuffer (uint width, uint height, uint xGranularity, uint yGranularity, uint xQuad, uint yQuad) |
Static Protected Attributes | |
uint | _Height |
NLMISC::CSmartPtr< ITexture > | _Tex |
uint | _Width |
uint | _XGranularity |
uint | _XQuad |
uint | _YGranularity |
uint | _YQuad |
|
Definition at line 50 of file deform_2d.h. Referenced by doDeform(). |
|
Definition at line 85 of file deform_2d.cpp. References _Tex, _XGranularity, _YGranularity, NL3D::IDriver::activeVertexBuffer(), NL3D::IDriver::copyFrameBufferToTexture(), nlassert, NL3D::CDeform2d::IPerturbUV::perturbUV(), NLMISC::raiseToNextPowerOf2(), NL3D::IDriver::renderQuads(), NL3D::CMaterial::setDoubleSided(), NL3D::IDriver::setFrustum(), NL3D::CMaterial::setLighting(), NL3D::CVertexBuffer::setNumVertices(), NL3D::CVertexBuffer::setTexCoord(), NL3D::CMaterial::setTexture(), NL3D::IDriver::setupModelMatrix(), NL3D::IDriver::setupViewMatrix(), NL3D::CVertexBuffer::setVertexCoord(), NL3D::CVertexBuffer::setVertexFormat(), NL3D::CMaterial::setZFunc(), TPoint2DVect, uint, uint32, v, and NLMISC::CVector::y.
00086 { 00087 00088 nlassert(uvp); 00089 00090 typedef CQuadEffect::TPoint2DVect TPoint2DVect; 00091 TPoint2DVect dest; 00092 00093 CQuadEffect::processPoly(surf, (float) _XGranularity, (float) _YGranularity, dest); 00094 00095 uint realWidth = NLMISC::raiseToNextPowerOf2(_Width); 00096 uint realHeight= NLMISC::raiseToNextPowerOf2(_Height); 00097 00098 00099 // draw the poly contour 00100 /*for (uint k = 0; k < dest.size(); ++k) 00101 { 00102 CDRU::drawLine(dest[k].x, dest[k].y, dest[(k + 1) % dest.size()].x, dest[(k + 1) % dest.size()].y, *drv, CRGBA::Red); 00103 }*/ 00104 00105 00106 00107 00108 static CMaterial mat; 00109 mat.setDoubleSided(true); 00110 mat.setLighting(false); 00111 mat.setZFunc(CMaterial::always); 00112 /* mat.setColor(CRGBA::Red); 00113 mat.texEnvOpRGB(0, CMaterial::Add); */ 00114 00115 static CVertexBuffer vb; 00116 vb.setVertexFormat(CVertexBuffer::PositionFlag | CVertexBuffer::TexCoord0Flag); 00117 00118 00119 00120 drv->setFrustum(0, (float) _Width, 0, (float) _Height, -1, 1, false); 00121 drv->setupViewMatrix(CMatrix::Identity); 00122 drv->setupModelMatrix(CMatrix::Identity); 00123 00124 00125 const float iDu = 1.f / _Width; 00126 const float iDv = 1.f / _Height; 00127 const float widthRatio = _Width / (float) realWidth; 00128 const float heightRatio = _Height / (float) realHeight; 00129 00130 00131 float u, u2, v; 00132 float du, dv; 00133 00134 TPoint2DVect::const_iterator it; 00135 00136 // get back datas from frame buffer 00137 for (it = dest.begin(); it != dest.end(); ++it) 00138 { 00139 drv->copyFrameBufferToTexture(_Tex, 0, (uint32) it->x,(uint32) it->y, (uint32) it->x, (uint32) it->y, _XGranularity, _YGranularity); 00140 } 00141 00142 00146 vb.setNumVertices(dest.size() << 2); 00147 mat.setTexture(0, _Tex); 00148 uint k = 0; // current index in the vertex buffer 00149 for (it = dest.begin(); it != dest.end(); ++it, k += 4) 00150 { 00151 00152 // \todo optimize this by a direct access to the vertex buffer (if needed) 00153 // blit data to frame buffer and apply deformations 00154 00155 vb.setVertexCoord(k, NLMISC::CVector(it->x, 0, it->y)); 00156 vb.setVertexCoord(k + 1, NLMISC::CVector(it->x + _XGranularity, 0, it->y)); 00157 vb.setVertexCoord(k + 2, NLMISC::CVector(it->x + _XGranularity, 0, it->y + _YGranularity)); 00158 vb.setVertexCoord(k + 3, NLMISC::CVector(it->x , 0, it->y + _YGranularity)); 00159 00160 // perturbation of the uv coordinates 00161 00162 u = it->x * iDu; 00163 v = it->y * iDv; 00164 uvp->perturbUV(u, v, du, dv); 00165 vb.setTexCoord(k, 0, (u + du) * widthRatio, (v + dv) * heightRatio ); 00166 00167 u2 = (it->x + _XGranularity) * iDu; 00168 uvp->perturbUV(u2, v, du, dv); 00169 vb.setTexCoord(k + 1, 0, (u2 + du) * widthRatio, (v + dv) * heightRatio ); 00170 00171 v = (it->y + _YGranularity) * iDv; 00172 uvp->perturbUV(u2, v, du, dv); 00173 vb.setTexCoord(k + 2, 0, (u2 + du) * widthRatio, (v + dv) * heightRatio ); 00174 00175 uvp->perturbUV(u, v, du, dv); 00176 vb.setTexCoord(k + 3, 0, (u + du) * widthRatio, (v + dv) * heightRatio ); 00177 } 00178 00179 drv->activeVertexBuffer(vb); 00180 drv->renderQuads(mat, 0, dest.size()); 00181 } |
|
resize the granularity of buffers for fxs
Definition at line 55 of file deform_2d.cpp. References _Tex, _XGranularity, _XQuad, _YGranularity, _YQuad, height, NLMISC::raiseToNextPowerOf2(), uint, and width.
00057 { 00058 _Width = width; 00059 _Height = height; 00060 _XGranularity = xGranularity; 00061 _YGranularity = yGranularity; 00062 _XQuad = xQuad; 00063 _YQuad = yQuad; 00064 00065 uint realWidth = NLMISC::raiseToNextPowerOf2(_Width); 00066 uint realHeight= NLMISC::raiseToNextPowerOf2(_Height); 00067 00068 _Tex = new CTextureBlank; 00069 _Tex->resize(realWidth, realHeight, CBitmap::RGBA); 00070 } |
|
Definition at line 47 of file deform_2d.cpp. |
|
Definition at line 52 of file deform_2d.cpp. Referenced by doDeform(), and setupBuffer(). |
|
Definition at line 46 of file deform_2d.cpp. |
|
Definition at line 48 of file deform_2d.cpp. Referenced by doDeform(), and setupBuffer(). |
|
Definition at line 50 of file deform_2d.cpp. Referenced by setupBuffer(). |
|
Definition at line 49 of file deform_2d.cpp. Referenced by doDeform(), and setupBuffer(). |
|
Definition at line 51 of file deform_2d.cpp. Referenced by setupBuffer(). |