#include "stdneb.h" #include "SkySphere.h" #include "RenderSystem.h" #include "foundation/io/ioserver.h" #include "foundation/io/textreader.h" #include "addons/wjshader/WJShader.h" #include "addons/wjshader/parser/WJShaderParser.h" #include "RenderMessageProtocol.h" #include "GraphicSystem.h" #include "SkyRender.h" namespace Sky { __ImplementClass(SkySphere,'SSPH', Core::RefCounted) SkySphere::SkySphere() : m_pVertices(NULL), m_nCircles(80), m_nSteps(70), m_SkydomeFadingPercent(0.05f), m_bSmoothSkydomeFading(true) { } SkySphere::~SkySphere() { } void SkySphere::SetUp() { //[zhongdaohuan][render_obj]临时删掉实现 } void SkySphere::Destroy() { m_VertexBuffer = 0; m_primitiveGroup = 0; m_VertexComponents.Clear(); if (m_pVertices != NULL) { n_delete_array(m_pVertices); m_pVertices = NULL; } m_CloudMaterial = NULL; m_MaterialVector.Clear(); } void SkySphere::CreateSphere() { //int numVertices = m_nSteps * m_nCircles + 1; //int numEle = 6 * m_nSteps * (m_nCircles-1) + 3 * m_nSteps; //m_VertexComponents.Append(RenderBase::VertexComponent(RenderBase::VertexComponent::Position,0, RenderBase::VertexComponent::Float3)); //m_VertexComponents.Append(RenderBase::VertexComponent(RenderBase::VertexComponent::TexCoord,0, RenderBase::VertexComponent::Float3)); //m_VertexComponents.Append(RenderBase::VertexComponent(RenderBase::VertexComponent::TexCoord,1, RenderBase::VertexComponent::Float2)); //m_VertexComponents.Append(RenderBase::VertexComponent(RenderBase::VertexComponent::TexCoord,2, RenderBase::VertexComponent::Float)); //m_VertexBuffer = RenderBase::VertexBuffer::Create(); //GPtr ib = RenderBase::IndexBuffer::Create(); //unsigned int *indexbuffer = n_new_array(unsigned int, numEle); //for (IndexT k = 0; k < m_nSteps; k++) //{ // indexbuffer[k*3] = 0; // indexbuffer[k*3+1] = k+1; // if (k != m_nSteps-1) // { // indexbuffer[k*3+2] = k+2; // } // else // { // indexbuffer[k*3+2] = 1; // } //} //for(IndexT y=0; ySetup(RenderBase::IndexType::Index32, numEle, indexbuffer, numEle * sizeof(unsigned int), // RenderBase::IndexBuffer::UsageImmutable, RenderBase::IndexBuffer::AccessNone); //m_primitiveGroup = RenderBase::PrimitiveGroup::Create(); //m_primitiveGroup->SetIndexBuffer(ib); //m_nIndiceCount = numEle; //n_delete_array(indexbuffer); //m_pVertices = n_new_array(POS_UV_VERTEX, 1 + m_nSteps * m_nCircles); //m_nVerticeCount = 1 + m_nSteps * m_nCircles; //Math::bbox box = Math::bbox(Math::point(0.0,0.0,0.0), Math::vector(9999999.0,9999999.0,9999999.0)); ////SetBoundingBox(box);//[zhongdaohuan][render_obj]临时删掉实现 } void SkySphere::UpdateSphere() { /*float TODO_Radius = 1000; GPtr camera = Graphic::GraphicSystem::Instance()->GetCameraByType(Graphic::eCO_Main); if ( camera ) { TODO_Radius =camera->GetCameraSetting().GetZFar() * 0.95f; } m_pVertices[0].pos.set(0.0f, TODO_Radius, 0.0f); m_pVertices[0].normal.set(0.0f, 1.0f, 0.0f); m_pVertices[0].uv.set(4.0f, 4.0f); m_pVertices[0].opacity = 1.0f; float AngleStep = float( (PI) / (m_nCircles - 1) ); float r, uvr, c, s, sc; IndexT x, y; for (y = 0; y(y+1)/(m_nCircles-1); for(x = 0; x(m_nCircles + 1) / (m_nCircles - 1); for(x = 0; xSetup(m_VertexComponents, m_nVerticeCount, m_pVertices, m_nVerticeCount * sizeof(POS_UV_VERTEX), RenderBase::VertexBuffer::UsageImmutable, RenderBase::VertexBuffer::AccessNone); m_primitiveGroup->SetVertexBuffer(m_VertexBuffer); m_primitiveGroup->SetBaseVertex(0); m_primitiveGroup->SetNumVertices(m_nVerticeCount); m_primitiveGroup->SetBaseIndex(0); m_primitiveGroup->SetNumIndices(m_nIndiceCount); m_primitiveGroup->SetPrimitiveTopology(RenderBase::PrimitiveTopology::TriangleList); if (m_primHandle.IsValid()) { Graphic::GraphicSystem::Instance()->UpdatePrimitiveGroup(m_primHandle, m_primitiveGroup); } else m_primHandle = Graphic::GraphicSystem::Instance()->CreatePrimitiveGroup(m_primitiveGroup);*/ } }