#include "Waveline.h" CWaveLine::CWaveLine() { m_Pick = false; m_Normal.x = m_Normal.z = 0.0f; m_Normal.y = 1.0f; m_PointNum = 0; m_WaveNum = 0; m_UnitInterpol = WAVEUNITVOT; m_LayerNum = WAVENUM; m_Length = WAVEVECLENGTH; m_CreateFrame = WAVETERMFRAME; m_Vert = NULL; m_Bubble = NULL; m_Device = NULL; m_ShakeValue.x = WAVESHAKE; m_ShakeValue.z = WAVESHAKE; m_WaveTex = NULL; m_WaveTexNum = 0; m_BackupList = NULL; m_WaveCenter.x = 0.0f; m_WaveCenter.y = 0.0f; m_WaveCenter.z = 0.0f; m_DownLayerNum = 0; m_UpLayerNum = 0; m_BeforeTime = timeGetTime(); m_CurrentTime = m_BeforeTime; tcount = 1; kcount = 1; t_value1 = 0.0f; t_value2 = 1.0f; t_value3 = 0.0f; } CWaveLine ::CWaveLine(LPDIRECT3DDEVICE8 device) { m_Pick = false; m_Normal.x = m_Normal.z = 0.0f; m_Normal.y = 1.0f; m_PointNum = 0; m_WaveNum = 0; m_UnitInterpol = WAVEUNITVOT; m_LayerNum = WAVENUM; m_Length = WAVEVECLENGTH; m_CreateFrame = WAVETERMFRAME; m_Vert = NULL; m_Bubble = NULL; m_Device = device; m_ShakeValue.x = WAVESHAKE; m_ShakeValue.z = WAVESHAKE; m_WaveTex = NULL; m_WaveTexNum = 0; m_BackupList = NULL; m_WaveCenter.x = 0.0f; m_WaveCenter.y = 0.0f; m_WaveCenter.z = 0.0f; m_DownLayerNum = 0; m_UpLayerNum = 0; m_BeforeTime = timeGetTime(); m_CurrentTime = m_BeforeTime; tcount = 1; kcount = 1; t_value1 = 0.0f; t_value2 = 1.0f; t_value3 = 0.0f; } CWaveLine::~CWaveLine() { int i; if(m_WaveTexNum > 0) delete[] m_WaveTex; if(m_BackupList) delete[] m_BackupList; if(m_Vert) { for(i=0;i<(m_LayerNum);i++) { m_Vert[i]->Release(); } delete[] m_Vert; } if(m_Bubble) { for(i=0;iRelease(); } delete[] m_Bubble; } if(m_WaveLayer.size()) { for(i=0;i0) { CTexture::SetPath(EFFECTTEXTUREPATH); m_WaveTex[num].Load(filename); } /* if(num) { CTexture::SetPath(EFFECTTEXTUREPATH); m_WaveTex[0].Load("pado.dds"); m_WaveTex[1].Load("pado2.dds"); } */ } void CWaveLine::InsertPoint(float x,float y,float z) { CWavePoint tmp_point; tmp_point.m_Pos.x = x; tmp_point.m_Pos.y = y; tmp_point.m_Pos.z = z; tmp_point.m_PointIndex = m_PointNum; m_WaveList.push_back(tmp_point); m_PointNum++; } void CWaveLine::InsertPoint(D3DXVECTOR3 pos) { CWavePoint tmp_point; tmp_point.m_Pos = pos; tmp_point.m_PointIndex = m_PointNum; m_WaveList.push_back(tmp_point); m_PointNum++; } void CWaveLine::DeletePoint(float x,float y,float z) { int i; for(i=0;i= 1.0f) m_UnitInterpol = 1.0f; else if(m_UnitInterpol <= 0.0f) m_UnitInterpol = 0.0f; } void CWaveLine::Render() { DWORD cullmode,zwritemode; DWORD alpha1,alpha2,light; HRESULT hr; D3DXMATRIX world; D3DXMatrixIdentity(&world); m_Device->SetTransform(D3DTS_WORLD,&world); m_Device->GetRenderState(D3DRS_CULLMODE,&cullmode); m_Device->GetRenderState(D3DRS_ZWRITEENABLE,&zwritemode); hr = m_Device->GetRenderState(D3DRS_SRCBLEND,&alpha1); hr = m_Device->GetRenderState(D3DRS_DESTBLEND,&alpha2); hr = m_Device->GetRenderState( D3DRS_LIGHTING,&light); hr = m_Device->SetRenderState( D3DRS_LIGHTING, FALSE); hr = m_Device->SetRenderState(D3DRS_CULLMODE,D3DCULL_NONE); hr = m_Device->SetRenderState(D3DRS_ZWRITEENABLE,FALSE); hr = m_Device->SetRenderState(D3DRS_ALPHABLENDENABLE,TRUE); hr = m_Device->SetRenderState(D3DRS_SRCBLEND,D3DBLEND_SRCALPHA); hr = m_Device->SetRenderState(D3DRS_DESTBLEND,D3DBLEND_INVSRCALPHA); if(m_Pick) m_Device->SetRenderState(D3DRS_FILLMODE, D3DFILL_WIREFRAME); //m_Device->SetRenderState(D3DRS_DIFFUSEMATERIALSOURCE,D3DMCS_COLOR1); //m_Device->BeginScene(); /* hr = m_Device->SetTexture(0,m_WaveTex[1].GetTexture()); hr = m_Device->SetTextureStageState(0,D3DTSS_MAGFILTER,D3DTEXF_LINEAR); hr = m_Device->SetTextureStageState(0,D3DTSS_MINFILTER,D3DTEXF_LINEAR); hr = m_Device->SetTextureStageState(0,D3DTSS_COLORARG1,D3DTA_TEXTURE); hr = m_Device->SetTextureStageState(0,D3DTSS_COLORARG2,D3DTA_DIFFUSE); //hr = m_Device->SetTextureStageState(0,D3DTSS_COLORARG2,D3DTA_DIFFUSE); hr = m_Device->SetTextureStageState(0,D3DTSS_COLOROP, D3DTOP_MODULATE); hr = m_Device->SetTextureStageState(0,D3DTSS_ALPHAARG1,D3DTA_DIFFUSE); hr = m_Device->SetTextureStageState(0,D3DTSS_ALPHAARG2,D3DTA_TEXTURE); hr = m_Device->SetTextureStageState(0,D3DTSS_ALPHAOP,D3DTOP_MODULATE); //m_Device->SetTextureStageState(0,D3DTSS_MAGFILTER,D3DTEXF_ANISOTROPIC); //m_Device->SetTextureStageState(0,D3DTSS_MINFILTER,D3DTEXF_ANISOTROPIC); //m_Device->SetTextureStageState(0,D3DTSS_MAXANISOTROPY,16); hr = m_Device->SetTextureStageState(1,D3DTSS_COLOROP,D3DTOP_DISABLE); hr = m_Device->SetTextureStageState(1,D3DTSS_ALPHAOP,D3DTOP_DISABLE); // ¹°°Åǰ µé¾î°¥¶§ µé¾î°¥ ÄÚµå (¹°°ÅǰÀº Ç÷» Àüü¿¡ ÀÚ±ÛÀÚ±Û ÇÏ°Ô ³Ö¾îÁÖ¾î¾ß ÇÒµí) /*hr = m_Device->SetTexture(1,m_WaveTex[1].GetTexture()); hr = m_Device->SetTextureStageState(1,D3DTSS_MAGFILTER,D3DTEXF_LINEAR); hr = m_Device->SetTextureStageState(1,D3DTSS_MINFILTER,D3DTEXF_LINEAR); hr = m_Device->SetTextureStageState(1,D3DTSS_COLORARG1,D3DTA_TEXTURE); hr = m_Device->SetTextureStageState(1,D3DTSS_COLORARG2,D3DTA_CURRENT); hr = m_Device->SetTextureStageState(1,D3DTSS_COLOROP,D3DTOP_MODULATE); hr = m_Device->SetTextureStageState(2,D3DTSS_COLOROP,D3DTOP_DISABLE); hr = m_Device->SetTextureStageState(1,D3DTSS_ALPHAARG1,D3DTA_TEXTURE); hr = m_Device->SetTextureStageState(1,D3DTSS_ALPHAARG2,D3DTA_CURRENT); hr = m_Device->SetTextureStageState(1,D3DTSS_ALPHAOP,D3DTOP_MODULATE); hr = m_Device->SetTextureStageState(2,D3DTSS_ALPHAOP,D3DTOP_DISABLE); */ /* for(int i=0;i=7) // continue; // if(i >= m_DownLayerNum) // continue; hr = m_Device->SetStreamSource(0,m_Bubble[i],sizeof(CWaveVertex)); hr = m_Device->SetVertexShader(D3DFVF_XYZ | D3DFVF_DIFFUSE | D3DFVF_TEX1); //m_Device->DrawPrimitive(D3DPT_LINESTRIP,0,m_WaveNum - 1); hr = m_Device->DrawPrimitive(D3DPT_TRIANGLESTRIP,0,((m_WaveNum * 2)-3) + 1); }*/ hr = m_Device->SetTexture(0,m_WaveTex[0].GetTexture()); hr = m_Device->SetTextureStageState(0,D3DTSS_MAGFILTER,D3DTEXF_LINEAR); hr = m_Device->SetTextureStageState(0,D3DTSS_MINFILTER,D3DTEXF_LINEAR); hr = m_Device->SetTextureStageState(0,D3DTSS_COLORARG1,D3DTA_TEXTURE); hr = m_Device->SetTextureStageState(0,D3DTSS_COLORARG2,D3DTA_DIFFUSE); //hr = m_Device->SetTextureStageState(0,D3DTSS_COLORARG2,D3DTA_DIFFUSE); hr = m_Device->SetTextureStageState(0,D3DTSS_COLOROP, D3DTOP_MODULATE); hr = m_Device->SetTextureStageState(0,D3DTSS_ALPHAARG1,D3DTA_DIFFUSE); hr = m_Device->SetTextureStageState(0,D3DTSS_ALPHAARG2,D3DTA_TEXTURE); hr = m_Device->SetTextureStageState(0,D3DTSS_ALPHAOP,D3DTOP_MODULATE); //m_Device->SetTextureStageState(0,D3DTSS_MAGFILTER,D3DTEXF_ANISOTROPIC); //m_Device->SetTextureStageState(0,D3DTSS_MINFILTER,D3DTEXF_ANISOTROPIC); //m_Device->SetTextureStageState(0,D3DTSS_MAXANISOTROPY,16); hr = m_Device->SetTextureStageState(1,D3DTSS_COLOROP,D3DTOP_DISABLE); hr = m_Device->SetTextureStageState(1,D3DTSS_ALPHAOP,D3DTOP_DISABLE); for(int i=0;i=7) // continue; // if(i >= m_DownLayerNum) // continue; hr = m_Device->SetStreamSource(0,m_Vert[i],sizeof(CWaveVertex)); hr = m_Device->SetVertexShader(D3DFVF_XYZ | D3DFVF_DIFFUSE | D3DFVF_TEX1); //m_Device->DrawPrimitive(D3DPT_LINESTRIP,0,m_WaveNum - 1); hr = m_Device->DrawPrimitive(D3DPT_TRIANGLESTRIP,0,((m_WaveNum * 2)-3) + 1); } /////////////////////////////////////////////////plan///// /* hr = m_Device->SetTexture(0,m_WaveTex[1].GetTexture()); m_Device->SetTextureStageState(0,D3DTSS_MAGFILTER,D3DTEXF_LINEAR); m_Device->SetTextureStageState(0,D3DTSS_MINFILTER,D3DTEXF_LINEAR); //m_Device->SetTextureStageState(0,D3DTSS_MAGFILTER,D3DTEXF_ANISOTROPIC); //m_Device->SetTextureStageState(0,D3DTSS_MINFILTER,D3DTEXF_ANISOTROPIC); //m_Device->SetTextureStageState(0,D3DTSS_MAXANISOTROPY,16); m_Device->SetTextureStageState(0,D3DTSS_COLORARG1,D3DTA_TEXTURE); m_Device->SetTextureStageState(0,D3DTSS_COLORARG2,D3DTA_DIFFUSE); m_Device->SetTextureStageState(0,D3DTSS_COLOROP, D3DTOP_SELECTARG1); //m_Device->SetTextureStageState(0,D3DTSS_COLOROP, D3DTOP_MODULATE); m_Device->SetTextureStageState(1,D3DTSS_COLOROP,D3DTOP_DISABLE); m_Device->SetTextureStageState(0,D3DTSS_ALPHAARG1,D3DTA_DIFFUSE); m_Device->SetTextureStageState(0,D3DTSS_ALPHAARG2,D3DTA_TEXTURE); m_Device->SetTextureStageState(0,D3DTSS_ALPHAOP,D3DTOP_SELECTARG1);//D3DTOP_MODULATE); m_Device->SetTextureStageState(1,D3DTSS_ALPHAOP,D3DTOP_DISABLE); m_Device->SetStreamSource(0,m_Vert[m_LayerNum],sizeof(CWaveVertex)); m_Device->SetVertexShader(D3DFVF_XYZ | D3DFVF_DIFFUSE | D3DFVF_TEX1); //m_Device->DrawPrimitive(D3DPT_LINESTRIP,0,m_WaveNum - 1); hr = m_Device->DrawPrimitive(D3DPT_TRIANGLESTRIP,0,2); */ ///////////////////////////////////////////////////////////////////// // m_Device->EndScene(); if(m_Pick) m_Device->SetRenderState(D3DRS_FILLMODE, D3DFILL_SOLID); m_Device->SetRenderState(D3DRS_CULLMODE,cullmode); m_Device->SetRenderState(D3DRS_ZWRITEENABLE,zwritemode); hr = m_Device->SetRenderState(D3DRS_SRCBLEND,alpha1); hr = m_Device->SetRenderState(D3DRS_DESTBLEND,alpha2); hr = m_Device->SetRenderState( D3DRS_LIGHTING,light); } void CWaveLine::ResetLayer(int index,int type) { //delete[] (m_Wave[index]); // m_Wave.erase(&(m_Wave[index])); // CWavePoint *tmp; // tmp = new CWavePoint; // m_Wave.push_back(tmp); // int test = m_Wave.size(); // CreateInterpolation(m_Wave.size() - 1,type); CreateInterpolation(index,type); } void CWaveLine::MoveVertex(CWaveLine::CWavePoint *point) { int i; for(i=0;i=0) { point[i-2].m_Pos -= (point[i-2].m_FwdVec)* (3.5f); if(point[i-2].m_UnitAlpha <0.0f) point[i-2].m_Alpha += point[i-2].m_UnitAlpha * 2.5f; else { point[i-2].m_UnitAlpha *= (-1.0f); point[i-2].m_Alpha += point[i-2].m_UnitAlpha * 2.5f; } } // if((i+2)<=((m_WaveNum *2) -1)) { point[i+2].m_Pos -= (point[i+2].m_FwdVec)* (3.5f); if(point[i+2].m_UnitAlpha <0.0f) point[i+2].m_Alpha += point[i+2].m_UnitAlpha * 2.5f; else { point[i+2].m_UnitAlpha *= (-1.0f); point[i+2].m_Alpha += point[i+2].m_UnitAlpha * 2.5f; } } // } } else { //point[i].m_Alpha = 0.0f; } } } void CWaveLine::Update() { int i,j; int loop; int f_count = 0; int b_count = 0; unsigned long frameskip = 0; m_CurrentTime = timeGetTime(); if(m_CurrentTime - m_BeforeTime >= 30) { frameskip = (m_CurrentTime - m_BeforeTime) / 30; tcount+= frameskip; m_BeforeTime = m_CurrentTime; for(loop = 0;loop <(int)frameskip;loop++) { int reset_index = -1; /// 1À» k·Î //for(j=0;j 0.0f) m_Wave[j][i].m_Alpha +=m_Wave[j][i].m_UnitAlpha*1.5f; if(m_Wave[j][i].m_Alpha >= 0.9f) { m_Wave[j][i].m_Alpha = 0.9f; m_Wave[j][i].m_UnitAlpha *= (-1.0f); } else if(m_Wave[j][i].m_Alpha <= 0.0f) { f_count++; if(m_Wave[j][i].m_Alpha <= 0.0f) m_Wave[j][i].m_Alpha = 0.0f; } }//if else { m_Wave[j][i].m_Alpha +=(m_Wave[j][i].m_UnitAlpha * 1.2f); if(m_Wave[j][i].m_Alpha >= 0.3f) { m_Wave[j][i].m_Alpha = 0.3f; m_Wave[j][i].m_UnitAlpha *= (-1.0f); } else if(m_Wave[j][i].m_Alpha <= 0.0f) { b_count++; if(m_Wave[j][i].m_Alpha <= 0.0f) m_Wave[j][i].m_Alpha = 0.0f; } }//else } // for if(f_count >=(m_WaveNum)) { reset_index = j; //ResetLayer(j,WAVEFWDMOVE); } //if(b_count == (m_WaveNum * 2)) { if(b_count == (m_WaveNum)) { reset_index = j; //ResetLayer(j,WAVEBACKMOVE); } } for(i=0;i (m_CreateFrame))) { kcount++; //tcount++; tcount = 0; } if(kcount > m_LayerNum) { kcount = kcount -1; } } void CWaveLine::CreateVertexBuffer() { int i; CWaveVertex *tmp; m_Vert = new LPDIRECT3DVERTEXBUFFER8[m_LayerNum]; //m_Bubble = new LPDIRECT3DVERTEXBUFFER8[m_LayerNum]; for(i=0;iCreateVertexBuffer(m_WaveNum * 2 * sizeof(CWaveVertex),0, D3DFVF_XYZ | D3DFVF_DIFFUSE | D3DFVF_TEX1,D3DPOOL_MANAGED,&(m_Vert[i])); /*m_Device->CreateVertexBuffer(m_WaveNum * 2 * sizeof(CWaveVertex),0, D3DFVF_XYZ | D3DFVF_DIFFUSE | D3DFVF_TEX1,D3DPOOL_MANAGED,&(m_Bubble[i])); */ m_WaveLayer.push_back(tmp); //m_WaveBubble.push_back(tmp2); m_WaveLayer[i] = new CWaveVertex[m_WaveNum * 2]; //m_WaveBubble[i] = new CWaveVertex[m_WaveNum * 2]; if(i < m_DownLayerNum) { SetVertexBuffer(i,WAVEFWDMOVE); // SetBubbleBuffer(i,WAVEFWDMOVE); } else{ SetVertexBuffer(i,WAVEBACKMOVE); // SetBubbleBuffer(i,WAVEBACKMOVE); } } // ¹è°æ plane /* m_Device->CreateVertexBuffer(m_WaveNum * 2 * sizeof(CWaveVertex),0, D3DFVF_XYZ | D3DFVF_DIFFUSE | D3DFVF_TEX1,D3DPOOL_MANAGED,&(m_Vert[m_LayerNum])); m_WaveLayer.push_back(tmp); m_WaveLayer[m_LayerNum] = new CWaveVertex[4]; SetVertexBuffer(m_LayerNum,WAVEPLANE); */ } bool CWaveLine::Test_Vector(CWaveLine::CWavePoint point,int type) { if(point.m_lie) { return true; } else { float length; float tmp_length; int index = 0; D3DXVECTOR3 tmp_point; tmp_point = m_WaveList[0].m_Pos - point.m_Pos; length = D3DXVec3Length(&tmp_point); for(int i=0;iLock(0,m_WaveNum * sizeof(CWaveVertex) * 2,(BYTE **)&tmp_buffer,0); memcpy(tmp_buffer,m_WaveBubble[i],2 * m_WaveNum * sizeof(CWaveVertex)); m_Bubble[i]->Unlock(); delete[] t_point; } void CWaveLine::SetVertexBuffer(int i,int type) { CWavePoint *t_point; t_point = new CWavePoint[m_WaveNum * 2]; if(type == WAVEPLANE) { D3DXVECTOR3 plane_length; float plane_width; m_WaveLayer[i][0].x = m_Wave[0][0].m_Pos.x+(m_Wave[0][0].m_FwdVec.x) * (m_Length *2.0f); m_WaveLayer[i][0].y = m_Wave[0][0].m_Pos.y+(m_Wave[0][0].m_FwdVec.y) * (m_Length *2.0f); m_WaveLayer[i][0].z = m_Wave[0][0].m_Pos.z+(m_Wave[0][0].m_FwdVec.z) * (m_Length *2.0f); m_WaveLayer[i][0].s = 0.0f ; m_WaveLayer[i][0].t = t_value1; m_WaveLayer[i][0].color = D3DCOLOR_ARGB(120,255,255,255); m_WaveLayer[i][1].x = m_Wave[0][1].m_Pos.x -(m_Wave[0][0].m_FwdVec.x) * m_Length; m_WaveLayer[i][1].y = m_Wave[0][1].m_Pos.y -(m_Wave[0][0].m_FwdVec.y) * m_Length; m_WaveLayer[i][1].z = m_Wave[0][1].m_Pos.z -(m_Wave[0][0].m_FwdVec.z) * m_Length; m_WaveLayer[i][1].s = t_value2 ; m_WaveLayer[i][1].t = t_value1; m_WaveLayer[i][1].color = D3DCOLOR_ARGB(120,255,255,255); m_WaveLayer[i][2].x = m_Wave[0][m_WaveNum*2 - 2].m_Pos.x+(m_Wave[0][m_WaveNum *2 -2].m_FwdVec.x) * (m_Length *2.0f); m_WaveLayer[i][2].y = m_Wave[0][m_WaveNum*2 - 2].m_Pos.y+(m_Wave[0][m_WaveNum *2- 2].m_FwdVec.y) * (m_Length *2.0f); m_WaveLayer[i][2].z = m_Wave[0][m_WaveNum*2 - 2].m_Pos.z+(m_Wave[0][m_WaveNum *2- 2].m_FwdVec.z) * (m_Length *2.0f); m_WaveLayer[i][2].s = 0.0f ; m_WaveLayer[i][2].t = t_value2; m_WaveLayer[i][2].color = D3DCOLOR_ARGB(120,255,255,255); m_WaveLayer[i][3].x = m_Wave[0][m_WaveNum*2 - 1].m_Pos.x - (m_Wave[0][m_WaveNum*2- 2].m_FwdVec.x) * m_Length; m_WaveLayer[i][3].y = m_Wave[0][m_WaveNum*2 - 1].m_Pos.y - (m_Wave[0][m_WaveNum*2- 2].m_FwdVec.y) * m_Length; m_WaveLayer[i][3].z = m_Wave[0][m_WaveNum*2 - 1].m_Pos.z - (m_Wave[0][m_WaveNum*2- 2].m_FwdVec.z) * m_Length; m_WaveLayer[i][3].s = t_value2; m_WaveLayer[i][3].t = t_value2; m_WaveLayer[i][3].color = D3DCOLOR_ARGB(120,255,255,255); plane_length.x = m_WaveLayer[i][2].x - m_WaveLayer[i][0].x; plane_length.y = m_WaveLayer[i][2].y - m_WaveLayer[i][0].y; plane_length.z = m_WaveLayer[i][2].z - m_WaveLayer[i][0].z; plane_width = D3DXVec3Length(&plane_length); //tiling ÇØÁÖ´Â ºÎºÐ t_value2 += plane_width / PLANEWRAP; t_value3 = t_value2; m_WaveLayer[i][2].t = t_value3; m_WaveLayer[i][3].t = t_value3; } else if(type == WAVEPLANE2) { m_WaveLayer[i][0].s = t_value1; m_WaveLayer[i][0].t = 0.0f ; m_WaveLayer[i][0].color = D3DCOLOR_ARGB(120,255,255,255); m_WaveLayer[i][1].s = t_value2; m_WaveLayer[i][1].t = 0.0f; m_WaveLayer[i][1].color = D3DCOLOR_ARGB(120,255,255,255); m_WaveLayer[i][2].s = t_value1; m_WaveLayer[i][2].t = t_value3; m_WaveLayer[i][2].color = D3DCOLOR_ARGB(120,255,255,255); m_WaveLayer[i][3].s = t_value2 ; m_WaveLayer[i][3].t = t_value3; m_WaveLayer[i][3].color = D3DCOLOR_ARGB(120,255,255,255); t_value1 +=0.01f; t_value2 +=0.01f; /*if(t_value1 >1.0f) t_value1 -=1.0f; if(t_value2 >1.0f) t_value2 -=1.0f; */ } else { if(type == WAVEBACKMOVE) printf(""); memcpy(t_point,m_Wave[i],sizeof(CWavePoint) * m_WaveNum * 2); // SetVertexInfo(t_point); for(int j=0;j= 0.0f) m_WaveLayer[i][j].color = D3DCOLOR_COLORVALUE(1.0f,1.0f,1.0f,t_alpha); else m_WaveLayer[i][j].color = D3DCOLOR_COLORVALUE(1.0f,1.0f,1.0f,0.0f); } } m_WaveLayer[i][0].color = D3DCOLOR_COLORVALUE(0.8f,0.8f,0.8f,0.0f); m_WaveLayer[i][1].color = D3DCOLOR_COLORVALUE(0.8f,0.8f,0.8f,0.0f); // m_WaveLayer[i][2].color = D3DCOLOR_COLORVALUE(0.8f,0.8f,0.8f,0.2f); // m_WaveLayer[i][3].color = D3DCOLOR_COLORVALUE(0.8f,0.8f,0.8f,0.2f); m_WaveLayer[i][(m_WaveNum * 2)-2].color = D3DCOLOR_COLORVALUE(0.8f,0.8f,0.8f,0.0f); m_WaveLayer[i][(m_WaveNum * 2)-1].color = D3DCOLOR_COLORVALUE(0.8f,0.8f,0.8f,0.0f); // m_WaveLayer[i][(m_WaveNum * 2)-4].color = D3DCOLOR_COLORVALUE(0.8f,0.8f,0.8f,0.2f); // m_WaveLayer[i][(m_WaveNum * 2)-3].color = D3DCOLOR_COLORVALUE(0.8f,0.8f,0.8f,0.2f); } if(type == WAVEPLANE || type == WAVEPLANE2) { VOID *tmp_buffer; m_Vert[i]->Lock(0,sizeof(CWaveVertex) * 4,(BYTE **)&tmp_buffer,0); memcpy(tmp_buffer,m_WaveLayer[i],4 * sizeof(CWaveVertex)); m_Vert[i]->Unlock(); } else { VOID *tmp_buffer; m_Vert[i]->Lock(0,m_WaveNum * sizeof(CWaveVertex) * 2,(BYTE **)&tmp_buffer,0); memcpy(tmp_buffer,m_WaveLayer[i],2 * m_WaveNum * sizeof(CWaveVertex)); m_Vert[i]->Unlock(); } delete[] t_point; } void CWaveLine::StoreList() { int i; CWavePoint *tmp_layer = NULL; if(m_BackupList) delete[] m_BackupList; m_BackupList = new CWavePoint[m_PointNum]; for(i=0;i= (m_PointNum-1)) { p3 = m_WaveList[i+1].m_Pos; p4 = m_WaveList[i+1].m_Pos; } else { p3 = m_WaveList[i+1].m_Pos; p4 = m_WaveList[i+2].m_Pos; } m_Wave[index][count].m_Pos = p2; m_Wave[index][count].m_PointIndex = count++; // ¸¶Áö¸· Á¡ ÀÏ °æ¿ì´Â ³ÖÁö ¾Ê´Â´Ù if(i != (m_PointNum -1 )) { // Catmull rom spline for(int j= 1;j<=k;j++) { double t = m_UnitInterpol * j; double t2 = t * t; double t3 = t*t*t; m_Wave[index][count].m_Pos = p1 * ((-0.5f)*t3 + t2 + (-0.5)*t) + p2 * ((1.5f)*t3 + (-2.5f)*t2 + 1.0f) + p3 * ((-1.5f)*t3 + (2.0f)*t2 + (0.5f)*t) + p4 * ((0.5f)*t3 + (-0.5f)*t2); ///// Á¡ Èçµé±â D3DXVECTOR3 tmp; tmp.x = (float)(rand() %(int)((m_ShakeValue.x) * 1000)) / 1000.0f; tmp.z = (float)(rand() %(int)((m_ShakeValue.z) * 1000)) / 1000.0f; if(rand() % 2) tmp.x *= -1.0f; if(rand() % 2) tmp.z *= -1.0f; m_Wave[index][count].m_Pos.x += tmp.x * 2.0f; m_Wave[index][count].m_Pos.z += tmp.z * 2.0f; //// m_Wave[index][count].m_PointIndex = count++; } } } //fwd vector get D3DXVECTOR3 right; D3DXVECTOR3 tmp = m_Wave[index][m_WaveNum - 1].m_Pos - m_Wave[index][0].m_Pos; D3DXVec3Normalize(&right,&tmp); float wavefwdlength = WAVEFWDLENGTH; float sub_tmp = 0.0f; // °Å¸® ·»´ý ¼¼ÆÃ sub_tmp = (float)(rand() % (int)(wavefwdlength / 2)); if(rand() %2) { sub_tmp *= -1.0f; } wavefwdlength += sub_tmp; for(i=0;i 0) { if(!(i % ((m_WaveNum * 2) / WAVESLIP))) { t_ual = (rand() % 1000) / 100000.0f; if(t_ual == 0.0f) { t_ual = 0.0001f; } } } if(!(i % 2)) m_Wave[index][i] = tmp_point[(i/2)]; else { m_Wave[index][i] = tmp_point[(i-1)/2]; m_Wave[index][i].m_Pos.x += (((tmp_point[(i-1)/2].m_FwdVec.x)) * m_Length / 1.3f); // m_Wave[index][i].m_Pos.y += ((-(tmp_point[(i-1)/2].m_FwdVec.y)) * m_Length); m_Wave[index][i].m_Pos.z += (((tmp_point[(i-1)/2].m_FwdVec.z)) * m_Length /1.3f); } m_Wave[index][i].m_UnitAlpha = t_ual; } }// if else if(type == WAVEBACKMOVE) { for(i=0;i= (m_PointNum-1)) { p3 = m_WaveList[i+1].m_Pos; p4 = m_WaveList[i+1].m_Pos; } else { p3 = m_WaveList[i+1].m_Pos; p4 = m_WaveList[i+2].m_Pos; } m_Wave[index][count].m_Pos = p2; m_Wave[index][count].m_PointIndex = count++; // ¸¶Áö¸· Á¡ ÀÏ °æ¿ì´Â ³ÖÁö ¾Ê´Â´Ù if(i != (m_PointNum -1 )) { // Catmull rom spline for(int j= 1;j<=k;j++) { double t = m_UnitInterpol * j; double t2 = t * t; double t3 = t*t*t; m_Wave[index][count].m_Pos = p1 * ((-0.5f)*t3 + t2 + (-0.5)*t) + p2 * ((1.5f)*t3 + (-2.5f)*t2 + 1.0f) + p3 * ((-1.5f)*t3 + (2.0f)*t2 + (0.5f)*t) + p4 * ((0.5f)*t3 + (-0.5f)*t2); m_Wave[index][count].m_PointIndex = count++; } } } //fwd vector get D3DXVECTOR3 right; D3DXVECTOR3 tmp = m_Wave[index][m_WaveNum - 1].m_Pos - m_Wave[index][0].m_Pos; D3DXVec3Normalize(&right,&tmp); for(i=0;i0) { if(!(i % ((m_WaveNum * 2) / WAVESLIP))) { t_ual = (float)(rand() % 1000) / 100000.0f; if(t_ual == 0.0f) t_ual += 0.002f; } } if(!(i % 2)) m_Wave[index][i] = tmp_point[(i/2)]; else { m_Wave[index][i] = tmp_point[(i-1)/2]; m_Wave[index][i].m_Pos.x -= (((tmp_point[(i-1)/2].m_FwdVec.x)) * (m_Length/2.0f)); // m_Wave[index][i].m_Pos.y += (((tmp_point[(i-1)/2].m_FwdVec.y)) * m_Length); m_Wave[index][i].m_Pos.z -= (((tmp_point[(i-1)/2].m_FwdVec.z)) * (m_Length/2.0f)); } m_Wave[index][i].m_UnitAlpha = t_ual; } for(i=0;im_UnitAlpha = (rand() % 100000) / 1000000.0f + 0.05f; }